Systemvoraussetzungen
Hier zunächst eine kurze Beschreibung der zugrundeliegenden Software:
| Host | ||
| Hardware | x86, Notebook, 768M RAM, 30G HDD, 1600MHz wenn der powerd will. | |
| Host-Betriebssystem | FreeBSD salz 7.0-CURRENT FreeBSD 7.0-CURRENT #0: Sun Nov 19 21:42:36 CET 2006 | |
| Gast | ||
| "Hardware" | x86, 128M RAM, 2G HDD, und das, was qemu so an Takt hergeben kann. | |
| Gast-Betriebssystem | Microsoft Windows 2000 Professional |
Das Problem
Vor einem halben Jahr habe ich qemu das letzte Mal benutzt. Damals funktionierte das User-Mode-Netzwerk noch wunderbar. Dabei emuliert qemu einfach an der virtuellen Netzwerkkarte einen Router und leitet anfragen von sich selbst aus weiter, einzig pings wreden verschluckt.
Dies wollte nun aber partout nicht mehr funktionieren. Keine Chance, das Netz war tot. Ich musste also in den säuerlichen Apfel beissen und ein getunneltes Device basteln.
Leider förderte meine Internetrecherche nur Dokumente zutage, die beschreiben, wie man dies mit älteren FreeBSDs löst. Die Anleitungen verwendeten noch das Modul "bridge.ko" -- welches mittlerweile aber durch "if_bridge.ko" abgelöst wurde. Und dies wird nicht mehr mittels sysctl konfiguriert sondern via ifconfig.
Die Lösung
Also hier nun ein Rezept, wie man qemu mit Bridge betrieben bekommt:Schritt 1: Kernelmodule laden
Es werden die Kernelmodule "if_bridge.ko", "bridgestp.ko" sowie fuer qemu "aio.ko" benötigt.Schritt 2: Bridge-Device aufsetzen
Als nächstes wird das eigentliche Bridge-Device angelegt. Dazu wird "ifconfig" wie folgt eingesetzt:
sudo ifconfig bridge0 create
Schritt 3: Die Brückenpfeiler setzen
Was nützt eine Brücke, die nichts verbinden soll (Ausnahmen, siehe Zahnarzt, ausgenommen)? Also müßen der Brücke ein- oder mehrere Devices hinzugefuegt werden. Dazu wird auch wieder "ifconfig" eingesetzt:
sudo ifconfig bridge0 addm bge0
wobei hier bge0 mein Device nach draussen in das grosse böse Internet ist. Nun muss noch fuer qemu ein Skript angelegt werden, damit es sich ein "tap"-Device erstellen und aktivieren kann... dies steht bei mir in "/etc/qemu-ifup" und enthält nur sehr wenig:
#!/bin/sh
/sbin/ifconfig $1
und ist nicht mehr als ein hauchdünner Wrapper um ifconfig.
Schritt 4: qemu starten
Man kann nun qemu die Drecksarbeit erledigen und das tap-device anlegen lassen :)Also qemu mit entsprechenden optionen gestartet... also z.B.
/usr/local/bin/qemu -boot d -m 128 -cdrom '/usr/home/ad001/tmp/current.iso' -net nic,vlan=0 -net tap,vlan=0,ifname= -localtime
Als Reaktion darauf sollte ein Netzwerkdevice tap0 erstellt werden, dass nun ebenfalls mit ifconfig der bridge0 zugeschlagen wird...
sudo ifconfig bridge0 addm tap0
ausserdem erscheint es langsam zweckmäßig, die Bridge mal einzuschalten und mitzuteilen, wer denn die Quelle der Daten werden soll...
sudo ifconfig bridge0 -learn bge0
sudo ifconfig bridge0 up