23.3 Fortgeschrittene Netzwerkeinrichtung 

KVM als Standardeinstellung erlaubt es Zugriffen von außen nicht, sich mit Ihren virtuellen Maschinen zu verbinden. Andere komplexere Installationswege werden im Folgenden beschrieben. Wenn das Folgende Ihren Erfordernissen nicht entspricht, sollte die bestehende QEMU-Dokumentation für KVM ebenso relevant sein.
23.3.1 Terminologie 

Ein VLAN ist ein virtuelles Netzwerksegment. Sie können es als einen virtuellen Switch abbilden. Sie verbinden virtuelle Netzwerkkarten mit VLANs, verkabeln VLANs miteinander und erstellen letztlich eine Switch-Struktur, die einer realen Installationen ziemlich nahe kommt.
Wenn Sie keine Netzwerkoptionen spezifizieren, konstruiert KVM standardmäßig eine Netzwerkkarte, die mit einem nichtöffentlichen VLAN verbunden ist. Auf diesem VLAN wird auch ein einzelner Host emuliert, der als DHCP-Server und standardmäßiger Router fungiert. Sämtliche Verbindungen, die vom Gast initiiert worden sind, werden durch den nichtöffentlichen Stack von KVM gesteuert und erscheinen auf dem Host-Rechner als Anfragen von Sockets, die von dem KVM-Prozess auf 127.0.0.1 kommen.
Zwei Adressen
Die Netzwerke des Benutzer-Modus von KVM enthalten üblicherweise nur zwei Adressen: 10.0.2.2 (virtueller Host) und 10.0.2.15 (Gast). In der Sprache von KVM dargestellt, sieht das so aus:
kvm -net nic -net user ...
Mit anderen Worten: Fügen Sie eine Netzwerkkarte hinzu, und verbinden Sie sie mit vlan 1. Fügen Sie auch einen virtuellen Host hinzu, der mit vlan 1 verbunden ist. Der virtuelle Host verbindet das VLAN über NAT mit dem physischen Host. Da das Netzwerk im Benutzermodus über das Slirp-Protokoll (Slirp is eine Software, die über einen Shell-Zugang eine Verbindung zum Internet emuliert) implementiert wird, wird UDP nicht unterstützt. Sollten Sie UDP-Pakete zum Host oder nach außen transportieren müssen, müssen Sie eine andere Technik einsetzen.
Standard
Bei der Installation der Gäste haben wir bisher keinen großen Aufwand betrieben und die Standardeinstellungen bei der Netzwerkkonfiguration übernommen. Dies hat zur Folge, dass die Gäste per NAT die Einstellungen des Wirts übernehmen. Damit ist es selbstverständlich nicht möglich, von außerhalb auf die virtuellen Maschinen zuzugreifen, da der ankommende Datenverkehr nicht zu einem bestimmten Gast gelenkt werden kann. Um dies zu ermöglichen, ist das sogenannte Bridging notwendig, das den Datenverkehr quasi mit Hilfe einer Brücke über den Wirt leitet.
23.3.2 Bridging 

Um das Bridging einzurichten, sind zwei Schritte notwendig. Als Erstes muss die Brücke auf dem Wirt erstellt werden, bevor Sie dem Gast mitteilen, dass er diese Brücke für sein Netzwerk nutzen soll. Die Brücke ist eine virtuelle Schnittstelle, die von außerhalb wie eine reale physikalische Schnittstelle angesprochen werden kann. Dies hat bequemerweise zur Folge, dass sie wie normale Hosts dem restlichen Netzwerk zur Verfügung steht.
Eine Brücke auf dem Wirt erstellen
Die Brücke erstellen Sie wie jede andere Netzwerkschnittstelle, indem Sie die Datei /etc/network/interfaces editieren. Ersetzen Sie die bestehenden Angaben, oder kommentieren Sie sie aus. Fügen Sie folgende Angaben hinzu:
auto lo iface lo inet loopback auto br0 iface br0 inet static address 192.168.0.10 network 192.168.0.0 netmask 255.255.255.0 broadcast 192.168.0.255 gateway 192.168.0.1 bridge_ports eth0 bridge_fd 9 bridge_hello 2 bridge_maxage 12 bridge_stp off
Starten Sie nun das Netzwerk neu, und Ihre virtuellen Maschinen werden während der Laufzeit als ganz normale Hosts in Ihrem Netzwerk erscheinen:
sudo /etc/init.d/networking restart
Den Gast einrichten
Wir müssen an dieser Stelle selbstverständlich der virtuellen Maschine noch mitteilen, welche Schnittstelle zum Netzwerk sie ab sofort zu verwenden hat.
Bei einer Neuinstallation einer virtuellen Maschine gelingt dies, indem Sie beispielsweise die Option ebenfalls angeben:
virt-install --name=hardyjeos --ram=256 --file-size=2 \ --bridge=br0 --vnc --connect=qemu:///system --accelerate \ -c hardy-jeos-i386.iso
Alternativ können Sie selbstverständlich auch bei der grafischen Abfrage des Virtual Machine Managers das richtige Netzwerk auswählen.
Um die geänderten Netzwerkbedingungen einer bereits vorhandenen virtuellen Maschine mitzuteilen, genügt es, die XML-Datei im Ordner /etc/libvirt/qemu/ zu bearbeiten. Achten Sie darauf, dass Sie die MAC-Adresse beim Editieren nicht ändern.
<interface type='network'> <mac address='00:11:22:33:44:55'/> <source network='default'/> </interface>
Eine Änderung in dieser Datei könnte folgendermaßen aussehen:
<interface type='bridge'> <mac address='00:11:22:33:44:55'/> <source bridge='br0'/> </interface>
Damit diese Konfiguration übernommen werden kann, müssen Sie alle virtuellen Maschinen herunterfahren und libvirtd neu starten:
sudo /etc/init.d/libvirtd restart
23.3.3 Mehrere virtuelle Netzwerke 

Wenn Sie eine virtuelle Maschine mit mehreren Netzwerken aufbauen möchten, müssen Sie mehrere VLANs erstellen, an die die Netzwerke angeschlossen werden können. Um mehr als ein VLAN zu erstellen, ordnen Sie jedem VLAN eine ID zu. Der folgende Befehl beispielsweise erstellt zwei Netzwerke und zwei VLANs:
kvm -net nic,vlan=0 -net socket,listen=:8010,vlan=0 -net nic,vlan=1 \ -net user,vlan=1 ...
Socket-Connections
Mit den Socket-Connections können Sie Ihre virtuellen Maschinen mit nichtöffentlichen VLANs verbinden. Die Verwendung von TCP-Sockets ist hier sicher die einfachste Methode. Ein VLAN stellt den Empfänger dar:
kvm -net nic -net socket,listen=:8010 ...
Der andere hingegen ist der Initiator:
kvm -net nic -net socket,connect=127.0.0.1:8010 ...
Sollten Sie keine Adresse festlegen, wird der Empfänger alle verbundenen Interfaces empfangen. Um nur einen localhost zu empfangen, legen Sie bitte Folgendes fest:
kvm -net nic -net socket,listen=127.0.0.1:8010 ...
Selbstverständlich können auch virtuelle LANs, die auf anderen Hosts laufen, miteinander verbunden werden.
Möchten Sie mehrere Initiatoren mit einem einzelnen Empfänger verbinden, sollten Sie einen Multicast-Socket verwenden:
kvm -net nic -net socket,mcast=230.0.0.1:1234 ... kvm -net nic -net socket,mcast=230.0.0.1:1234 ... kvm -net nic -net socket,mcast=230.0.0.1:1234 ...
Damit werden drei VLANs am selben Punkt miteinander verbunden. Frames, die an eines der VLANs gesendet werden, werden von allen drei VLANs empfangen. Es können aber auch mehrere VLANs mit einem einzelnen VDE (Virtual Distributed Ethernet, unterstützt den Aufbau virtueller Netzwerkverbindungen) verbunden werden.
VLANs mit dem Host verbinden
Nachdem Sie sich nun mit einer Vielzahl von virtuellen Strukturen verbinden können, möchte ich Ihnen im Folgenden zeigen, wie Sie VLANs mit bestehenden, echten Netzwerken verbinden können.
Fast alle Verbindungen von virtuellen zu physischen Maschinen werden durch ein Tap-Device erzeugt. Tap-Devices sind regelmäßige Schnittstellen, ähnlich eth0, eth1, lo etc. Ein Ende des Taps wird mit dem VLAN verbunden, das andere mit normalen Netzwerkprogrammen konfiguriert(ifconfig, route etc.):
kvm -net nic -net tap ...
Dieser Befehl hat ein neues einzelnes Tap-ethernet-device erstellt (tap0, tap1 etc). Das Skript /etc/qemu-ifup wird dafür genutzt, das neue Netzwerkgerät einzurichten. Die Standardeinstellung in /etc/qemu-ifup ordnet dem neuen Interface die IP-Adresse 172.20.0.1 zu. Mit Hilfe von ifname=IF können Sie dem Ganzen einen Netzwerknamen zuweisen, und mit script=SCRIPT starten Sie ein anderes Skript:
kvm -net nic -net tap,ifname=qtap0,script=/var/vm/vm0.ifup
Taps lösen das Netzwerkproblem für eine einzelne virtuelle Maschine. Allerdings benötigt jeder Gast sein eigenes Tap-Device. Wie Sie sich vorstellen können, führt das zu einigen Verlangsamungen im System.
Tipp 279: Virtuelle VMware-Maschinen unter KVM nutzen
KVM ist in der Lage, virtuelle Maschinen zu betreiben, die von VMware erstellt wurden. Sie können somit Ihre aufwendig erzeugten Snapshots von VMware-Gästen weiterverwenden. Die einzige Einschränkung besteht darin, dass diese VMware-Gäste in einer einzigen Datei abgespeichert sind. Die Möglichkeit einer direkten Nutzung von gesplitteten Gästen, die VMware ebenfalls erstellen kann, unterstützt KVM (noch) nicht. Damit der Virtual Machine Manager die .vmx-Dateien von VMware lesen kann, müssen sie in eine XML-Datei umgewandelt werden, mit der libvirt umgehen kann. Für diesen Zweck gibt es ein kleines Werkzeug unter http://people.ubuntu.com/~soren/vmware2libvirt/. Rufen Sie dieses Skript folgendermaßen auf: vmware2libvirt -f ./file.vmx > file.xml virsh -c qemu:///system define file.xml Das erste Kommando konvertiert die VMware-Datei file.vmx in eine mit libvirt kompatible Datei file.xml. Das zweite Kommando importiert die neu erstellte XML-Datei in libvirt. Die importierten XML-Dateien finden Sie im Ordner /etc/libvirt/qemu. Bitte behalten Sie im Auge, dass Sie die Original-.vmx-Datei bei dieser Aktion verändern und Sie diese danach nicht mehr in VMware verwenden können. Falls Sie das dennoch wünschen, verwenden Sie ein Backup dieser Datei. |