【问题标题】:Connect QEMU VM to Internet with bridge helper使用桥接助手将 QEMU VM 连接到 Internet
【发布时间】: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中,我发现桥接端口(@98​​7654338@)和vhost-user端口(@98​​7654339@):

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


【解决方案1】:

我部署了 2 种方法,无需使用额外的网桥即可实现所需的连接。

  1. 用于 Internet 访问 -net user,hostfwd=tcp::10023-:22 -net nic 和 DPDK 端口为 `-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 .

  2. 另一种选择是允许NAT 与 HOST 接口并运行 DHCP 以获取来宾中的 IP 地址。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    • 2013-10-27
    • 2021-05-31
    相关资源
    最近更新 更多