Netzwerk und Samba von einem Quest-Betriebssystem, das auf QEMU läuft

Netzwerk und Samba von einem Quest-Betriebssystem, das auf QEMU läuft

Ich versuche, einige Software auf einem Big-Endian-System zu testen, um die Kompatibilität sicherzustellen. Mein Plan ist, QEMU auf Ubuntu 12.04 zu verwenden, um ein MIPS-System zu emulieren. Bisher konnte ich das Quest-System erfolgreich erstellen, aber ich konnte es nicht mit dem Hostsystem vernetzen. Ich kann vom Gastsystem aus auf die Außenwelt zugreifen (z. B. wget oder apt-get), aber meine Versuche, Samba einzurichten, sind fehlgeschlagen.

EntsprechendDas, in QEmu 1.1 und neuer kann der Netzwerkbrücken-Helfer tun/tap für Sie einrichten, ohne dass zusätzliche Skripte erforderlich sind. Ich versuche, das zu verwenden, da ich verschiedene Versionen der Skripte gesehen habe. Im Moment qemu-system-mips -versionwird Folgendes gemeldet:

QEMU emulator version 1.0.50 (Debian 1.0.50-2012.03-0ubuntu2.1), Copyright (c) 2003-2008 Fabrice Bellard

Ich habe aus der 1.4.1-Quelle kompiliert und die Version von verwendet apt-get. Beide melden dasselbe. Ich gehe davon aus, dass ich Version 1.1 oder höher habe, egal, was -versionmir gesagt wird. Die nächste Anweisung bestand jedenfalls darin, das Setuid-Attribut für den Standard-Netzwerkhelfer zu aktivieren:

sudo chmod u+s /usr/local/libexec/qemu-bridge-helper

Als nächstes habe ich eine bridge.confDatei in /etc/qemu/und /usr/local/etc/qemumit -rw-r--r--für Berechtigungen erstellt. Der Inhalt der Datei ist:

allow br0

Wenn ich QEmu mit dem folgenden Befehl starte:

qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda disk.img -append "root=/dev/sda1 console=ttyS0" -nographic -net nic -net bridge,br=br0 -smb /home/uli/samba

oder mit

qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda disk.img -append "root=/dev/sda1 console=ttyS0" -nographic -netdev bridge,id=hn0 -device virtio-net-pci,netdev=hn0,id=nic1

oder mit

qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda disk.img -append "root=/dev/sda1 console=ttyS0" -nographic  -netdev tap,helper=/usr/local/libexec/qemu-bridge-helper,id=hn0 -device virtio-net-pci,netdev=hn0,id=nic1

Ich erhalte die folgende Fehlermeldung:

failed to get mtu of bridge `br0': No such device
failed to launch bridge helper
qemu-system-mips: -net bridge,br=br0: Device 'bridge' could not be initialized

Okay, ich habe die br0-Brücke nicht erstellt. Ich habe versucht, eine mit einem Skript zu erstellen, das ich nicht verstehe, aber dann stellt mein Quest MIPS QEmu-System keine Verbindung mehr zu irgendetwas her. Es sieht br0, bekommt aber keine IP-Adresse. Offensichtlich mache ich hier etwas falsch:

ifconfig br0 down
brctl delbr br0

ifconfig eth2 0.0.0.0 promisc up

brctl addbr br0
brctl setfd br0 0
brctl addif br0 eth2

echo 1 > /proc/sys/net/ipv4/conf/br0/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/eth2/proxy_arp
echo 1 > /proc/sys/net/ipv4/ip_forward

dhclient br0
ifconfig br0 up

Gibt es eine einfachere Möglichkeit, dies zu tun? Persönlich wäre es für mich ausreichend, einfach den SMB-Server auf \10.0.2.4\qemu zu verwenden, der beschrieben istHier, aber das hat bei mir auch nicht funktioniert (115 Fehler beim Versuch, die Freigabe zu mounten, vermutlich wegen Netzwerkproblemen).

Aktualisieren

Sobald ich die Brücke erstellt habe, sehe ich die folgende Ausgabe von ifconfig auf dem Hostcomputer:

br0       Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX  
          inet addr:10.2.32.101  Bcast:10.2.32.255  Mask:255.255.255.0          
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:85 errors:0 dropped:0 overruns:0 frame:0
          TX packets:51 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:8235 (8.2 KB)  TX bytes:9227 (9.2 KB)

eth2      Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX  
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
          RX packets:196581 errors:0 dropped:0 overruns:0 frame:0
          TX packets:44205 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:139517339 (139.5 MB)  TX bytes:3365206 (3.3 MB)

Beim Überprüfen der brctl showAusgabe sehe ich Folgendes:

bridge name     bridge id           STP enabled     interfaces
br0             8000.XXXXXXXXXXXX       no              eth2

Nun starte ich das Questsystem in QEmu. Wenn ich ifconfig ausführe, sehe ich folgendes:

eth0      Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:536 errors:1 dropped:51 overruns:0 frame:0
          TX packets:13 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:55083 (53.7 KiB)  TX bytes:2862 (2.7 KiB)
          Interrupt:10 Base address:0x1020

Und so sieht die Brücke aus:

bridge name     bridge id           STP enabled     interfaces
br0             8000.XXXXXXXXXXXX   no      eth2
                                                        tap0

Leider hat das Quest-System mit dieser Konfiguration die eingeschränkte Netzwerkfähigkeit im „Benutzermodus“ verloren, die es einmal hatte (d. h. wget und apt-get funktionieren nicht mehr). Die einzige IP-Adresse, die ich sehe, ist die der Bridge, daher bin ich mir nicht sicher, wie die Quest im Netzwerk erscheinen wird. Der Host erscheint immer noch unter derselben IP-Adresse wie br0.

Aktualisieren

Hier ist die Ausgabe von iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination   

Antwort1

Wenn Sie eine Bridge betreiben, sollte den Mitgliedern der Bridge (eth2) keine IP-Adresse mehr zugewiesen sein. br0 sollte jetzt die IP erhalten.

Beispiel

Dies ist die Ausgabe eines Systems, das KVM verwendet. Es verwendet im Hintergrund qemu-kvm, daher sollte die Konfiguration dem ähneln, was Sie versuchen.

$ ifconfig -a
br0       Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX
          inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2929289877 errors:0 dropped:0 overruns:0 frame:0
          TX packets:842023980 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1992305504701 (1.8 TiB)  TX bytes:3609403664141 (3.2 TiB)

eth0      Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3737819958 errors:0 dropped:168 overruns:0 frame:0
          TX packets:1233468235 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2735097151685 (2.4 TiB)  TX bytes:4313257594064 (3.9 TiB)
          Interrupt:177 

Sehen Sie, dass eth0 keine IP-Adresse hat? Und so sieht mein br0-Gerät aus:

$ brctl show
bridge name bridge id               STP enabled     interfaces
br0         8000.XXXXXXXXXXXX       no              vnet2
                                                    vnet1
                                                    vnet0
                                                    eth0

Ich habe 3 VMs, die auf dem br0-Gerät sitzen, sodass sie wie ein echtes physisches System vollständig an meinem Netzwerk teilnehmen können. Das heißt, sie können Dienste wie Samba ausführen usw. bereitstellen. Ich glaube nicht, dass Sie Samba hinter dem NAT-Netzwerk bereitstellen können.

verwandte Informationen