NETinVM

A tool for teaching and learning about systems, networks and security

Authors:

Carlos Perez & David Perez

Date:

2026-09-08

What is NETinVM?

NETinVM is a single VMware virtual machine image that contains, ready to run, a series of Kernel Virtual Machine (KVM) virtual machines which, when started, conform a whole computer network inside the VMware virtual machine. Hence the name NETinVM, an acronym for NETwork in Virtual Machine. NETinVM has been conceived mainly as an educational tool for teaching and learning about operating systems, computer networks and system and network security, but other uses are certainly possible.

Documentation

NETinVM documentation is readily available as a separate document: "NETinVM-KVM documentation". Additionally, this paper (2016) at Springer Plus and freely available at http://rdcu.be/xxqG describes and analyzes how it has been used in different teaching/learning scenarios. A more focused use case using the newer KVM-based NETinVM is described in "Using a nested virtualization tool for teaching VPN fundamentals" (2024), published in the Cluster Computing journal (open access). Finally, in July 2018, Carlos Pérez has started a personal blog (in Spanish) to share experiences about using KVM at the University of Valencia.

Contact Information

You can contact us at: info@netinvm.org

Download

Current version (July 24, 2026)

  • KVM image (suitable for Libvirt): 2026-07-24_kvm_zip (ZIP file 4,7 GB)
    • MD5: 72d17bc117030163d3caacdd6e1d5df9

    • SHA256: e55a918d1fd2d23a81e6a141c7acae954b1eb97bc839a7b04502eac9260eb4f8

  • VMware image: 2026-07-24_vmware_zip (ZIP file 4,9 GB)
    • MD5: 97e2d617cc9d846c8cc87947ff640753

    • SHA256: 229bd32acefbce62940504528a656b58cde5fec9f7457a4b4258102fa4e187b3

  • Known issues
    • KVM terminal size changes are not detected automatically. (A simple ENTER is enough to cause detection.)

    • Copying from NETinVM to the host requires using the "xclipboard" application (included in NETinVM).

  • Change log from previous version:
    • Debian 13 is used (instead of Debian 11) for both base and the KVM2 machines.

    • Wayland window manager is used in base.

    • Only one text console is open by default for each KVM2 virtual machine. Additional consoles can be opened using the "Text consoles" application.

    • The "Text consoles" application has been added to easily open additional text consoles for running KVM2 machines.

    • Text consoles are opened always in the current virtual desktop.

    • The default keyboard layout is Spanish. (Changing to US layout just requires to click in the "es" icon in the system tray.)

    • It is possible to change from nested virtualization using KVM (the default) to CPU emulation using QEMU without KVM (for systems that do not support nested virtualization) using the script "netinvm_config_qemu". (It is also possible to go back to KVM using "netinvm_config_kvm".)

Previous version (July 22, 2025)

  • VMware image: 2025-07-22_vmware_zip (ZIP file, 4,4 GB)
    • MD5: 32c4c4e766226dd66a5317917bb5e3c1

    • SHA256: 7db6cba4b77199dfbcffd1891ee161c7809dd90dbf20dda03870e3e2e5891338

  • KVM image (suitable for Libvirt): 2025-07-22_kvm_zip (ZIP file, 4,4 GB)
    • MD5: ace994a615e172a2fd082e8676dd42f0

    • SHA256: 1d7ee928cbd1e7809e6cff6a6ad17b46b909ca6b2645bb3a46636a4af5d90744

  • Known issues
    • KVM terminal size changes are not detected automatically. (A simple ENTER is enough to cause detection).

  • Change log from previous version:
    • Debian 12 is used (instead of Debian 11) for both base and the KVM2 machines.

    • Base uses LVM.

    • KVM2 machines network interface names are now predictable (p.e. "eth-0", "eth-dmz").

Older versions

December 29, 2022

  • VMware image: 2022-12-29_vmware_zip (ZIP file, 4,3 GB)
    • MD5: 5ba087d258cdbe7560b2c85047b0563f

    • SHA256: 2f9852b814b431398dbcb95c360db3e29de2716320b552183f8800b0833c70d5

  • KVM image (suitable for Libvirt): 2022-12-29_kvm_zip (ZIP file, 4,3 GB)
    • MD5: c701c0197bec8939dbd5a34b9609afcb

    • SHA256: a61e738902e68710f2d7bcb28df407a135ef2645b800534c75bd423b39a4dc45

  • Known issues
    • KVM terminal size changes are not detected automatically. (A simple ENTER is enough to cause detection).

  • Change log from previous version:
    • Debian 11 is used (instead of Debian 10) for both base and the KVM machines.

    • "virtiofs" is used (instead of "9p") to share the "shared" directory among the KVMs and "base"

July 15, 2020

  • VMware image: kvm_2020-07-15_vmware_zip (ZIP file, 3,4 GB)
    • MD5: a3ca7207eade97e44458b9c0aca3275c

    • SHA256: b1420f9d881d37fe2ed8877ef5c6082142c4eeb85f531a4146e9872af424f281

  • Known issues
    • KVM terminal size changes are not detected automatically. (A simple ENTER is enough to cause detection).

  • Changelog from previous version:
    • Debian 10 is used (instead of Debian 9) for both base and the KVM machines.

    • KSM is now used to make the system more memory efficient.

    • Shortcuts have been updated to honour KDE defaults when possible.

July 23, 2018

  • VMware image: kvm_2018-07-23_vmware_zip (ZIP file, 2,8 GB)
    • MD5: d17342c845841786a2d65f531d34a4f8

    • SHA256: 12fd6d2c1517d515cad4110b2ab690a9989b2d6727ab7c73801a015c9583a4ec

  • Known issues
    • KVM terminal size changes are not detected automatically. (A simple ENTER is enough to cause detection).

    • Rebooting a KVM machine gets the machine paused. So, it is recommended to shutdown KVM machines and then start them again.

  • Changelog from previous version:
    • Open vSwitch is used (instead of Linux bridges) for NETinVM networks.

    • Debian 9 is used (instead of Debian 8) for both base and the KVM machines.

    • KDE 5 is used in base (instead of KDE 4).

    • 'fw' KVM machine no longer does SNAT.

    • KVM machines now use a second disk for swap, so that back up and restore is more efficient.

November 3, 2016

  • VMware image: 2016-11-03_vmware_zip (ZIP file, 2,2 GB)
    • MD5: 3396d92f07d52471fa65b614086de396

    • SHA256: 922c5674f27bbc4612c3c1558ffc89c922077cbebdc682cf827a919bcdf514a1

  • Warning
    • This version (and all previous ones) use User-mode Linux for nested virtualization. For this reason, current documentation is no longer applicable. Documentation for UML versions of NETinVM is still available: NETinVM-UML documentation

  • Known issues
    • It is not recommended to use "shutdown -r now" in the UML machines. Instead, it is recommended to use "shutdown -h now" and, then, start the UML machine with "uml.sh".

    • When UML terminals are resized, it is necessary to execute "resize" in the corresponding terminal.

  • Changelog from previous version:
    • UML operating system is now Debian 8

    • base operating system is Debian 8

    • "Kill all" added to facilitate cleanup when "Shutdown all" leaves UML processes running.