Netzwerkkonfiguration von virtuellen Maschinen

Virtuelle Maschinen können mit virtuellen Netzwerkcontrollern konfiguriert werden, um so die virtuelle Maschine mit einem Netzwerk zu verbinden. Virtuelle Maschinen nutzen dafür tap(4)oder vmnet(4) Geräte des TwinCAT/BSD-Hosts, die wiederum unter TwinCAT/BSD mit Hilfe von ifconfig(8) verwaltet werden.

Der folgende Befehl erstellt ein neue vmnet(4) Instanz:

doas ifconfig vmnet create
vmnet0

Um die vmnet0 Instanz bereits bei einem Systemstart anzulegen kann sie in der rc-Konfiguration cloned_interfaces hinzugefügt werden:

doas sysrc cloned_interfaces+="vmnet0"

Die erstellte vmnet(4) Instanz (in diesem Fall vmnet0) kann anschließend als Ethernet Endpunkt für eine virtuelle Maschine verwendet werden, um zwischen TwinCAT/BSD-Host und der virtuellen Maschinenumgebung Ethernet Pakete auszutauschen.

Dafür wird der bhyve Aufruf um ein emuliertes virtio-net Gerät an einem PCI-Slot übergeben, welches als Endpunkt das zuvor erstellte vmnet0 Interface nutzt. Der folgende Befehl startet eine virtuelle Maschine mit einem virtuellen Netzwerkcontroller der das zuvor erstellte vmnet0 Gerät am PCI-Slot -s 20 nutzt:

doas bhyve \
-c sockets=1,cores=1,threads=1 \
-m 2G \
-l bootrom,/usr/local/share/uefi-firmware/BHYVE_BHF_UEFI.fd,fwcfg=qemu \
-s 0,hostbridge \
-s 2,fbuf,rfb=0.0.0.0:5900,w=1024,h=768 \
-s 3,xhci,tablet \
-s 20,virtio-net,vmnet0 \
-s 31,lpc \
-A -H -P \
samplevm

Die Anbindung von virtuellen Maschinen an externe Netzwerke erfolgt somit immer über tap(4) oder vmnet(4) Geräte.

Je nach Anwendungsfall kann eine virtuelle Maschine auch mit mehreren Netzwerkcontroller konfiguriert werden. Die Anbindung einer virtuellen Maschine an ein Netzwerk wird anschließend über die Konfiguration der jeweiligen tap(4) oder vmnet(4) Geräte auf dem TwinCAT/BSD-Host bestimmt. Dadurch ergeben sich unterschiedliche Möglichkeiten die Kommunikation von virtuellen Maschinen in ein Netzwerk zu realisieren:

  1. Host-Only-Netzwerk
  2. NAT-Netzwerk
  3. Bridged-Netzwerk
  4. Ethernet-Device-Passthrough