【发布时间】:2019-12-31 13:30:16
【问题描述】:
我正在使用 QEMU VM 通过 virtio-networking 测试 OVS-DPDK。但是,我还想要一个网络设备来连接到 Internet。所以我尝试使用QEMU提供的bridge helper。
我按照the video 中的说明创建网桥和虚拟机。
(1) 创建桥梁
$ sudo ip link add br0 type bridge
(2) 将物理网卡绑定到网桥
$ sudo ip addr flush dev eno2
$ sudo ip link set eno2 master br0
$ brctl show
bridge name bridge id STP enabled interfaces
br0 8000.1866daf9a071 no eno2
(3) 设置br0
根据the blog,我觉得需要设置网桥的IP地址br0。我没有配置 eno2。
$ sudo ifconfig br0 10.0.0.21/8
$ ifconfig
br0 Link encap:Ethernet HWaddr 18:66:da:f9:a0:71
inet addr:10.0.0.21 Bcast:10.255.255.255 Mask:255.0.0.0
inet6 addr: fe80::1a66:daff:fef9:a071/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:13028 errors:0 dropped:0 overruns:0 frame:0
TX packets:36 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:694896 (694.8 KB) TX bytes:2832 (2.8 KB)
eno1 Link encap:Ethernet HWaddr 18:66:da:f9:a0:70
inet addr:10.0.0.20 Bcast:10.255.255.255 Mask:255.0.0.0
inet6 addr: fe80::1a66:daff:fef9:a070/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:229486 errors:0 dropped:0 overruns:0 frame:0
TX packets:13100 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:17595899 (17.5 MB) TX bytes:1923061 (1.9 MB)
Interrupt:89
eno2 Link encap:Ethernet HWaddr 18:66:da:f9:a0:71
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:5016 errors:0 dropped:0 overruns:0 frame:0
TX packets:64 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:349069 (349.0 KB) TX bytes:5332 (5.3 KB)
Interrupt:90
注意:我有两个物理网卡。一个是eno1,用于主机网络。另一个是eno2,只针对VM,/etc/network/interfaces中没有配置。
(4) 使用桥接助手创建虚拟机
创建虚拟机
sudo qemu-system-x86_64 -enable-kvm -m 1024 -smp 2 -nographic \
-chardev socket,id=char0,path=/usr/local/var/run/openvswitch/vhost-user2 \
-netdev type=vhost-user,id=mynet1,chardev=char0,vhostforce \
-device virtio-net-pci,netdev=mynet1,mac=52:54:00:02:d9:02 \
-object memory-backend-file,id=mem,size=1024M,mem-path=/dev/hugepages,share=on \
-numa node,memdev=mem -mem-prealloc \
-net nic -net bridge,br=br0 \
$IMAGE_DIR/debian_squeeze_amd64_standard.qcow2
这里我使用来自Debian 的图像。我设置了一个vhost-user 端口,它是由OVS-DPDK 生成的。我猜这对桥没有影响。
最重要的部分是:-net nic -net bridge,br=br0。
(5) 进入虚拟机
进入VM后发现bridge helper自动在host中创建了一个tap接口:
bridge name bridge id STP enabled interfaces
br0 8000.1866daf9a071 no eno2
tap0
在VM中,我发现桥接端口(@987654338@)和vhost-user端口(@987654339@):
eth0 Link encap:Ethernet HWaddr 52:54:00:12:34:56
inet6 addr: fe80::5054:ff:fe12:3456/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:287 errors:0 dropped:0 overruns:0 frame:0
TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:17220 (16.8 KiB) TX bytes:2520 (2.4 KiB)
eth2 Link encap:Ethernet HWaddr 52:54:00:02:d9:02
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:560 (560.0 B) TX bytes:560 (560.0 B)
然后,VM 既没有连接到 Internet,也没有连接到主机。
感谢您分享这个想法。
【问题讨论】:
-
我目前也在努力解决类似的问题,我还找到了您发布的视频,这很棒。但是仍然没有任何效果...我发现您正在使用旧的
-netdev/-device和较新的-nic命令。我在这里找到了一些信息:qemu.org/2018/05/31/nic-parameter
标签: networking virtual-machine qemu