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 -version
wird 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 -version
mir 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.conf
Datei in /etc/qemu/
und /usr/local/etc/qemu
mit -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 show
Ausgabe 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.