我正在为CentOS 7上运行的一个QEMU设置一个网桥接口。我有以下脚本来运行TAP接口
$ 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
所以任何想法来解决这个问题。
最后我通过OpenVPN隧道机制解决了这个问题。 所以为了参考,我正在把解决scheme。 这可能是其中之一,因为可能会有更多。
yum install openvpn 。 现在修改示例bridge-start脚本(可以在/ usr / share / doc / openvpn / sample-scripts中find,如下所示
//!/斌/庆典
//定义桥接口br =“br0”
//定义要桥接的TAP接口列表,//例如tap =“tap0 tap1 tap2”。 轻按= “tap0中”
/ /定义物理以太网接口桥接/ /上面的TAP接口(S)。 eth =“eth0”<==用你的物理的以太网设备改变它。
eth_ip =“192.168.8.4”<==用你想使用的地址更新。
eth_netmask =“255.255.255.0”eth_broadcast =“192.168.8.255”<==类似更新这个。
为$ t轻敲; 做openvpn –mktun –dev $ t完成
brctl addbr $ br brctl addif $ br $ eth
为$ t轻敲; 做brctl addif $ br $ t完成
为$ t轻敲; 做ifconfig $ t 0.0.0.0 promisc完成
ifconfig $ eth 0.0.0.0 promisc了
ifconfig $ br $ eth_ipnetworking掩码$ eth_netmask广播$ eth_broadcast
PS请用#replace//作为查找问题来设置字体。
模拟有桥停脚本。 它可以用来删除水龙头设备和桥梁。
现在使其可执行并以./bridge-start运行。 在启动Qemu之前。
现在用TAP设备启动Qemu,即tap0。 它将能够与其他主机和设备进行通信。
有关更多信息,请参阅OpenVPN以太网网桥