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.
Terminologie
Ein VLAN ist ein virtuelles Netzwerksegment. Man kann es als einen virtuellen Switch abbilden. Sie verbinden virtuelle Netzwerkkarten mit VLANs, verkabeln VLANs miteinander und erstellen letztlich eine Switch-Struktur, die realen Installationen ziemlich nahe kommen.
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 Netzwerkarte 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 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 mithilfe einer Brücke über den Wirt leitet.
23.3.1 Bridging 

Um das Bridging einzurichten, sind zwei Schritte notwendig. Als Erstes muss die Brücke auf dem Wirt erstellt werden, bevor man dem Gast mitteilt, 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 diese wie normale Hosts dem restlichen Netzwerk zur Verfügung stehen.
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 offStarten 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 Netzwerk-Bedingungen 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 livirtd neu starten:
sudo /etc/init.d/libvirtd restart
23.3.2 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 besipielsweise 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 ...
während der andere der Initiator ist:
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.
Multicast-Sockets
Möchten Sie mehrere Initiatoren mit einem einzelnen Empfänger verbinden, sollten Sie einen Multicast-Sockel 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 einen der VLANs gesendet werden, werden von allen drei VLANs empfangen. Es können aber auch mehrere VLANs mit einem einzelnen VDE 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. Mithilfe von ifname=IF können Sie dem Ganzen einen Netzwerknamen zuordnen, 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.
| 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 erstellten 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 für 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 dies dennoch wünschen, verwenden Sie ein Backup dieser Datei. |




Jetzt bestellen







