
我正在嘗試為在 CentOS 7 上運行的 QEMU 之一設定橋接介面。
$ 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
現在,在運行 QEMU 機器之前,我運行此腳本,以便我們可以啟動並運行橋接介面。我能夠從其他主機 ping 這個介面。下面是輸出
$ 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
以下是其他主機(即 192.168.42.12)的 ping 輸出
# 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
現在下面是我為運行 QEMU 而觸發的命令
/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 "
另外,我已停止 iptables 並嘗試從 QEMU 機器(192.168.42.202)或其他主機 ping 主機,但我無法存取它。
# 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
所以有任何想法可以解決這個問題。
答案1
最後我透過OpenVPN隧道機制解決了這個問題。因此,我將解決方案作為參考。這可能是其中之一,因為可能還有更多。
- 安裝 Epel RPM,然後將 openvpn 軟體包安裝為
yum install openvpn
. - 現在修改範例橋接啟動腳本(可以在 參考資料中找到
/usr/share/doc/openvpn<version>/sample-scripts
),如下所示:
#!/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
類似的還有橋停止腳本。它可用於拆除抽頭裝置和橋。
現在使其可執行並作為 ./bridge-start 運行。運行之前啟動Qemu。
現在使用 TAP 設備啟動 Qemu
tap0
。它將能夠與其他主機和設備進行通訊。
欲了解更多信息,請查看OpenVPN 乙太網路橋接網絡