
Ich versuche, eine Bridge-Schnittstelle für eines meiner QEMUs einzurichten, das unter CentOS 7 läuft. Ich habe unten Skripte für die TAP-Schnittstelle, die ausgeführt wird
$ cat /etc/qemu-ifup
ifconfig ens192 down
ifconfig ens192 0.0.0.0 promisc up
openvpn --mktun --dev tap0
ifconfig tap0 0.0.0.0 up
brctl addbr br0
brctl addif br0 ens192
brctl addif br0 tap0
brctl stp br0 off
ifconfig br0 192.168.42.201 netmask 255.255.255.0
Bevor ich nun die QEMU-Maschine starte, führe ich dieses Skript aus, damit wir die überbrückte Schnittstelle zum Laufen bringen können. Ich kann diese Schnittstelle von einem anderen Host aus anpingen. Unten ist die Ausgabe
$ ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.42.201 netmask 255.255.255.0 broadcast 192.168.42.255
inet6 fe80::646a:f6ff:fe1e:42ce prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:1f:e0:db txqueuelen 0 (Ethernet)
RX packets 314 bytes 15522 (15.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 38 bytes 4803 (4.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens192: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST> mtu 1500
ether 00:0c:29:1f:e0:db txqueuelen 1000 (Ethernet)
RX packets 258 bytes 16020 (15.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 92 bytes 8269 (8.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 0 (Local Loopback)
RX packets 7404 bytes 108578604 (103.5 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 7404 bytes 108578604 (103.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
tap0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::e8d9:3ff:fedf:85d3 prefixlen 64 scopeid 0x20<link>
ether ea:d9:03:df:85:d3 txqueuelen 100 (Ethernet)
RX packets 69 bytes 4722 (4.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 193 bytes 12111 (11.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 02:a1:9f:a4:81:bc txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1 bytes 90 (90.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Unten sehen Sie die Ping-Ausgabe von einem anderen Host, z. B. 192.168.42.12
# ping 192.168.42.201
PING 192.168.42.201 (192.168.42.201) 56(84) bytes of data.
64 bytes from 192.168.42.201: icmp_seq=1 ttl=64 time=1.19 ms
64 bytes from 192.168.42.201: icmp_seq=2 ttl=64 time=0.369 ms
Nachfolgend finden Sie den Befehl, den ich zum Ausführen von QEMU ausgelöst habe.
/home/test/yocto/poky/build/tmp/sysroots/x86_64-linux/usr/bin/qemu-system-arm -kernel /home/test/yocto/poky/build/tmp/deploy/images/qemuarm/zImage-qemuarm.bin -net nic,vlan=0 -net tap,vlan=0,ifname=tap0,script=no,downscript=no -M versatilepb -hda /home/test/yocto/poky/build/tmp/deploy/images/qemuarm/core-image-minimal-dev-qemuarm-20141124054625.rootfs.ext3 -no-reboot -show-cursor -usb -usbdevice wacom-tablet -no-reboot -m 128 --append "root=/dev/sda rw console=ttyAMA0,115200 console=tty mem=128M highres=off "
Außerdem habe ich iptables gestoppt und versucht, den Host vom QEMU-Rechner (192.168.42.202) oder einem anderen Host anzupingen, aber ich kann ihn nicht erreichen.
# ping 192.168.42.202
PING 192.168.42.202 (192.168.42.202) 56(84) bytes of data.
^C
--- 192.168.42.202 ping statistics ---
670 packets transmitted, 0 received, 100% packet loss, time 669735ms
Also, gibt es irgendwelche Ideen, um dieses Problem zu beheben?
Antwort1
Schließlich konnte ich dieses Problem durch den OpenVPN-Tunnelmechanismus lösen. Als Referenz stelle ich die Lösung hier zur Verfügung. Dies könnte eine davon sein, es könnte aber noch mehr geben.
- Installieren Sie Epel RPM und dann das OpenVPN-Paket als
yum install openvpn
. - Ändern Sie nun das Beispielskript „Bridge-Start“ (zu finden unter
/usr/share/doc/openvpn<version>/sample-scripts
) wie folgt:
#!/bin/bash
# Define Bridge Interface
br="br0"
# Define list of TAP interfaces to be bridged,
# for example tap="tap0 tap1 tap2".
tap="tap0"
# Define physical ethernet interface to be bridged
# with TAP interface(s) above.
eth="eth0" #<== Change it with your physical ethernet device.
eth_ip="192.168.8.4/24" #<== Update this with the address which you want to use it.
# create the bridge interface, assign the ip address for it, and enable
ip link add name $br type bridge
ip address add $eth_ip dev $br
ip link set dev $br up
# add eth interface into the bridge
ip link set dev $eth master $br
ip link set dev $eth up
# create the tap interfaces and add they into the bridge
for t in $tap; do
openvpn --mktun --dev $t
ip link set dev $t master $br
ip link set dev $t up
done
exit 0
Ähnlich verhält es sich mit dem Bridge-Stop-Skript. Es kann zum Entfernen von Tap-Geräten und Bridges verwendet werden.
Machen Sie es nun ausführbar und führen Sie es als ./bridge-start aus. Starten Sie vor dem Ausführen Qemu.
Starten Sie nun Qemu mit einem TAP-Gerät
tap0
. Es kann dann mit anderen Hosts und Geräten kommunizieren.
Weitere Informationen finden Sie unterOpenVPN Ethernet Bridge-Netzwerk