Montag Juli 30, 2007

QEMU: Netzwerkanbindung

Nachdem ich kürzlich beschrieben habe, wie man Qemu mit Hardwarevirtualisierung unter Gentoo zum Laufen bringt, geht's dieses Mal um die Netzwerkanbindung von Qemu. Grundsätzlich ist das für eine Qemu-Instanz kein Problem. Man startet die VM einfach mit der Option -net nic -net user (was aber sowieso Default ist). Der Nachteil an der ganzen Sache hier ist allerdings, das nur TCP/IP-Verbindungen funktionieren. Ein ping z.B. funktioniert nicht. Wenn man allerdings eine vollständige Netzanbindung haben möchte, muss man etwas mehr tun. Grundsätzlich gibt es mehrere Möglichkeiten. Ich beschreibe hier die Möglichkeit über TAP und VDE (Virtual Distributed Ethernet). Diese erscheint mir recht sinnvoll und relativ schnell einzurichten. VDE stellt eine Art virtuellen Switch zur Verfügung, an dem mal einfach eine oder mehrere virtuelle Maschinen an

Zunächst brauchen wir TUN/TAP-Unterstützung im Kernel. Ich schätze, das dürfte so ziemlich jeder schon haben. Wenn man's nicht im Kernel einkompiliert hat (dann weiss man sicherlich, das man das gemacht hat ;-) ), kann man einfach mal

modprobe tun

eingeben. Wenn keine Fehlermeldung kommt, ist das Modul geladen (prüfen mit lsmod). Wenn das nicht klappt, muss man in die Kernelsources guggen und das TUN/TAP-Modul aktivieren. Dazu wechselt man nach /usr/src/linux und tippt make menuconfig ein. Unter

Device Drivers -> Network device support

aktiviert man Universal TUN/TAP device driver support als Kernelmodul. Als nächstes installieren wir VDE:

emerge -av vde

Dann erzeugen wir uns ein TAP-Device:

cd /etc/init.d/
ln -s net.lo net.tap0

Unter /etc/conf.d/net fügen wir Folgendes ein (eventl. passt man noch die IP-Adresse an):

config_tap0=( "10.0.2.1 netmask 255.255.255.0 " )

Um das Interface zu starten, gibt man Folgendes ein:

/etc/init.d/vde start
/etc/init.d/net.tap0 start

Damit VDE beim Start des Rechners automatisch startet, aktivieren wir das Start-Skript entsprechend:

rc-update add vde default

Mit ifconfig müsste man jetzt das tap0 Device sehen. Nun können wir die verschiedenen Qemu-Instanzen starten. Wichtig ist, das man jeder Qemu-VM eine eigene MAC-Adresse zuteilt. Qemu vergibt per Default immer die gleiche MAC-Adresse. So können sich die verschiedenen Qemu-Instanzen aber nicht über den virtuellen Switch unterhalten.

Nun kann man eine Qemu-Instanz starten. Ich habe Qemu unter /opt/kvm installiert. Das sieht dann so aus:

vdeq /opt/kvm/bin/qemu-system-x86_64 -net vde,vlan=0,sock=/var/run/vde.ctl -net nic,vlan=0,macaddr 52:54:00:00:AA:02 -hda disk.img -m 128 -localtime

vdeq ist ein Wrapper der Qemu startet und das Qemu-Gastsystem mit dem VDE Switch verbindet. Wenn man keine grafische Ausgabe möchte, weil das System z.B. auf einem Server läuft, gibt man einfach noch zusätzlich z.B. noch -vnc :2 an. Dann kann man sich mit dem vncclient mit dem Qemu-Gast verbinden. Was man nicht tun sollte, so logisch es klingen mag, -nographic anzugeben. Da geht bei mir die CPU Last ganz mächtig nach oben. Wieso ist mir allerdings etwas schleierhaft und das ist vielleicht auch nicht überall so.

Noch ein Tipp: Wenn ihr meint, ihr habt alles richtig gemacht, startet Qemu und setzt dann einen einfachen ping ab und es kommt die Meldung bad file descriptor, dann stoppt die VM, beendet VDE, stoppt das TAP-Device, löscht alles was irgendwie nach vde klinkt unter /var/run raus, startet das TAP-Device wieder, konfiguriert es (IP, Netmask, usw.), startet VDE wieder und  anschließend Qemu. Bei mir hat's geholfen ;-) Hat mich auch blos 10 Jahre meines Lebens gekostet...

Ein paar Links:
Qemu - How to use Network
VDE Basic Networking
Using VDE with QEMU HOWTO
Gentoo HowTo: Qemu
Qemu / KVM - Ein grosses HowTo
Gentoo Wiki - KVM
OS on QEMU
Ubuntu - The Kernel Virtual Machine
QEMU Notes
QEMU - Debian - Linux - TUN/TAP - network bridge
QEMU, VDE and Dnsmasq
VDE, Dnsmasq SystemV Init-Skript
QEMU host <-> guest network bridging

Technorati Tags: , , , , , , , , ,

Kommentare:

Senden Sie einen Kommentar:
  • HTML Syntax: Ausgeschaltet