NETinVM
A tool for teaching and learning about systems, networks and security
- 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.