为什么 qemu 无法通过 nmcli 创建的桥接网络?

为什么 qemu 无法通过 nmcli 创建的桥接网络?

我正在尝试通过 nmcli 创建一个永久桥接设备:

$ BRIDGE="virbr0"
$ NETWORK_SEGMENT="192.168.122"
$ MASK=24
$ nmcli connection add type bridge con-name $BRIDGE ifname $BRIDGE autoconnect yes
$ nmcli connection modify $BRIDGE ipv4.address "$NETWORK_SEGMENT.1/$MASK"
$ nmcli connection modify $BRIDGE bridge.stp on
$ nmcli connection up $BRIDGE
$ ip a
...
16: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 7e:7c:cb:a2:00:a2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global noprefixroute virbr0
       valid_lft forever preferred_lft forever

之后我使用这个桥接器来连接 qemu 虚拟机:

$ qemu-system-x86_64 \
...
    -netdev "bridge,br=$BRIDGE,id=kvm0" -device 'virtio-net,netdev=kvm0' \
...

发现qemu虚拟机无法连接网络。

我在虚拟机中的网络配置,以及主机的NAT配置都是完全正确的,因为我发现我使用brctl和ip创建的桥接,qemu可以通过它连接到互联网:

$ sudo brctl addbr $BRIDGE
$ sudo ip addr add "$NETWORK_SEGMENT.1/$MASK" dev $BRIDGE
$ sudo ip link set dev $BRIDGE up
$ sudo brctl stp $BRIDGE on
$ ip a
...
17: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 7e:7c:cb:a2:00:a2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 scope global virbr0
       valid_lft forever preferred_lft forever

这两种建桥方式除了所建桥brctl不能永远存在外,还有什么区别吗?

如何创建可与 qemu 一起使用的持久桥?

相关内容