virtuele machine
Je maakt een virtuele machine aan om meerdere besturingssystemen op één fysieke machine te draaien, geïsoleerd, beveiligd en efficiënt — dit is hoe je het doet op een moderne Linux-host met KVM, libvirt en virt-manager.
---
Vereisten
Je hebt een 64-bit Linux-systeem nodig met ondersteuning voor hardwarevirtualisatie (Intel VT-x of AMD-V). Controleer of je CPU die ondersteunt:```bash egrep -c '(vmx|svm)' /proc/cpuinfo ```
Als het resultaat 1 of hoger is, zit je goed. Je moet ook toegang hebben tot `sudo` of root-rechten. Dit artikel is getest op Ubuntu 22.04 LTS en Debian 12, met libvirt 8.0.0, QEMU 7.2, en virt-manager 4.0.0. Werk je op een minimale server? Dan kun je `virt-manager` gebruiken via SSH met X11-forwarding of kies voor `virsh`-opdrachten.
---
Stappen
1. Activeer virtualisatie in de kernel en installeer de basiscomponentenVirtualisatie in Linux draait om KVM (Kernel-based Virtual Machine), een kernelmodule die hardwarevirtualisatie gebruikt. Die is standaard aanwezig in moderne kernels, maar moet wel geladen zijn. Controleer:
```bash lsmod | grep kvm ```
Als er niets terugkomt, laad de module:
```bash sudo modprobe kvm sudo modprobe kvm_intel # Voor Intel
of
sudo modprobe kvm_amd # Voor AMD ```Zet de modules automatisch aan bij opstarten:
```bash echo 'kvm' | sudo tee /etc/modules-load.d/kvm.conf echo 'kvm_intel' | sudo tee -a /etc/modules-load.d/kvm.conf # Intel
of
echo 'kvm_amd' | sudo tee -a /etc/modules-load.d/kvm.conf # AMD ```Daarna installeer je de virtualisatie-stack:
```bash sudo apt update sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager ```
`qemu-kvm` emuleert de hardware. `libvirt` is de API die alles beheert. `virt-manager` is de GUI. `bridge-utils` is nodig als je netwerkbridging wilt.
Waarom deze pakketten? Zonder `libvirt-daemon-system` start de `libvirtd`-service niet automatisch. Zonder `qemu-kvm` valt KVM terug op software-emulatie — traag en nutteloos. Je kunt het doen zonder `virt-manager`, maar dan werk je met `virsh`, de CLI-tool. Dat is efficiënter voor geautomatiseerde omgevingen, maar minder toegankelijk voor beginners.
2. Voeg je gebruiker toe aan de libvirt-groep
Anders moet je altijd `sudo` gebruiken in `virt-manager` of `virsh`, wat onhandig is:
```bash sudo usermod -aG libvirt $(whoami) sudo usermod -aG kvm $(whoami) ```
Log uit en weer in. Of start opnieuw op. Anders werkt de groepstoegang niet.
3. Start en enable de libvirtd-service
```bash sudo systemctl enable --now libvirtd ```
Controleer of de service draait:
```bash sudo systemctl status libvirtd ```
Als het `active (running)` is, ben je klaar. Als er een foutmelding komt over `Failed to initialize module`, controleer dan of de `kvm`-modules geladen zijn.
4. Controleer of alles werkt met virsh
`virsh` is de command-line interface voor libvirt. Test de installatie:
```bash virsh list --all ```
Je ziet een lege lijst — logisch, je hebt nog geen VMs. Maar als je geen toegangsproblemen krijgt, werkt de setup.
Toon de beschikbare storage-pools:
```bash virsh pool-list --all ```
Standaard is er één: `default`, die `/var/lib/libvirt/images` gebruikt.
5. Maak een nieuwe virtuele machine met virt-manager
Open `virt-manager` vanuit het menu of via terminal:
```bash virt-manager ```
Klik op File > New Virtual Machine.
Kies in de wizard:
- Local install media (ISO image or CDROM) → Next
- Use ISO image: klik op Browse, dan Browse Local, en selecteer je ISO (bijv. `ubuntu-22.04.iso`)
- OS type: Linux, Version: Ubuntu 22.04 → Next
- Memory: 2048 MB, CPUs: 2 → Next
- Enable storage for this virtual machine: 20 GB, Select or create custom storage → Manage… → + → New Volume
- Naam: `ubuntu2204.qcow2`, Formaat: `qcow2`, Grootte: 20 GiB → Add
- Finish
Waarom qcow2? Het is het native QEMU-formaat. Het ondersteunt snapshots, thin provisioning en encryptie. Je kunt ook `raw` gebruiken — sneller, maar geen extra functies. `qcow2` kost wat CPU, maar wint op flexibiliteit.
6. Configureer netwerkbridging (optioneel, maar aanbevolen voor servers)
Standaard gebruikt libvirt NAT via `virbr0`. Dat is eenvoudig, maar de VM krijgt een privé-IP en is niet direct bereikbaar vanaf andere machines.
Wil je dat wel? Maak dan een bridge aan.
Eerst: zet je huidige netwerkinterface om naar een bridge. Vervang `enp3s0` door jouw interface (`ip a`):
```bash sudo nmcli con add type bridge ifname br0 sudo nmcli con add type bridge-slave ifname enp3s0 master br0 sudo nmcli con modify br0 ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns "8.8.8.8" ipv4.method manual sudo nmcli con delete enp3s0 # Alleen als die automatisch was sudo nmcli con up br0 ```
In `virt-manager`: rechtsklik op de VM → Open → Show virtual hardware details → NIC: zet Network source op Bridge br0.
De VM krijgt nu een IP van je router en is direct bereikbaar.
Waarom bridging? NAT is veilig, maar beperkend. Bridging is nodig voor servers, containers, of als je meerdere VMs met statische IP’s nodig hebt. Het kost je isolatie, maar wint je bereikbaarheid.
7. Zet SPICE of VNC aan voor externe toegang
`virt-manager` gebruikt standaard SPICE voor grafische toegang. SPICE is beter dan VNC: ondersteunt audio, meerdere schermen, clipboard-sharing.
Zorg dat SPICE geselecteerd is:
- In `virt-manager`, selecteer de VM → Show virtual hardware details → Display
- Zet Type op Spice server
- Vink Listen on all public interfaces aan (alleen binnen vertrouwde netwerken!)
- Zet Secure channels op `all` voor TLS-versleuteling
```bash
In de VM (Linux)
sudo apt install -y spice-vdagent spice-webdavd ```Voor Windows: download `virtio-win.iso` van [https://fedorapeople.org](https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/) en mount hem in de VM.
Waarom SPICE? VNC is lichtgewicht, maar traag bij grafische belasting. SPICE is geoptimaliseerd voor desktopgebruik. Als je alleen CLI gebruikt, maakt het niet uit — dan kun je SSH gebruiken.
8. Maak een snapshot voor veiligheid
Voordat je wijzigingen doorvoert, zet je een snapshot op:
```bash virsh snapshot-create-as ubuntu2204 clean-install "Clean Ubuntu install" --atomic ```
Vervang `ubuntu2204` door de naam van je VM (`virsh list --all`).
Later kun je terug:
```bash virsh snapshot-revert ubuntu2204 clean-install ```
Snapshots zijn gemaakt met `qcow2`. Werken niet met `raw`. Ze nemen extra ruimte, maar redden je uit een slechte update of mislukte installatie.
---
Verificatie
Controleer of de VM draait en herkend wordt:```bash virsh list --all ```
Je ziet je VM met status `running`.
Controleer de netwerkconfiguratie:
```bash virsh domifaddr ubuntu2204 ```
Je ziet het IP-adres van de VM.
Test SSH-toegang (als je openssh-server geïnstalleerd hebt):
```bash ssh gebruiker@ip-van-vm ```
Als dat lukt, is alles goed verbonden.
---
Veelgestelde problemen
1. “Error: Unable to connect to libvirt”- Zorg dat `libvirtd` draait: `sudo systemctl status libvirtd`
- Controleer of je in de `libvirt`- en `kvm`-groep zit: `groups`
- Log opnieuw in of reboot
- Controleer of de ISO leesbaar is: `file /pad/naar/iso`
- Zet in `virt-manager` bij Storage de bus op `SATA` of `VirtIO`, niet `IDE` (oud en traag)
- Voor snellere schijf: gebruik `VirtIO`-drivers (via `virtio-win.iso` bij Windows)
- Controleer of `libvirt-daemon-system` draait
- Bij bridging: zit de fysieke interface in de bridge? `ip a show br0`
- Bij NAT: controleer of `virbr0` bestaat: `ip a | grep virbr0`
- Herstart de `libvirtd`-service na netwerkveranderingen
Een virtuele machine is geen illusie — het is een volwaardige computer, gevangen in een proces, met toegang tot CPU, geheugen en netwerk, maar zonder dat je een nieuwe kast moet kopen. Je betaalt met CPU-overhead en complexiteit, maar wint ruimte, snelheid en controle. Virtualisatie begon als een manier om duur hardware te delen. Nu is het de basis van elk cloudplatform, elk CI/CD-pijpje, elke testomgeving. En als je VM op zondagavond crasht, ben je niet de klant die wacht op ondersteuning. Dan ben je de enige die de power button kan indrukken — virtueel of niet.