QEMu / KVM:错误:无法添加桥接 tap0 端口 vnet0:不支持操作

QEMu / KVM:错误:无法添加桥接 tap0 端口 vnet0:不支持操作

为了全面了解 QEMU/KVM 软件虚拟化环境中网络部分的工作原理,我决定尝试手动设置网络部分,或多或少模拟一下它的作用libvirt

我使用的是 Arch,所以没有ifupdown。但无论如何,我首先使用 nmcli 在主机中创建了一个 tun/tap 接口。当我检查ip link和时ip a,tap0 接口就在那里。到目前为止:

主机(tap0)

然后我使用dnsmasq该接口(打算稍后为虚拟机提供 DHCP)。到目前为止:

主机(tap0)[DHCP]

然后我把这个接口添加到了libvirt。我觉得我应该使用现有的主机桥选项,因为我的接口已经准备好了。libvirt 的 xml 是:

# cat /etc/libvirt/qemu/networks/tap0.xml
<network>
  <name>tap0</name>
  <forward mode='bridge'/>
  <bridge name='tap0'/>
</network>

然后我使用 virsh# net-define /etc/libvirt/qemu/networks/tap0.xml启动了网络 tap0。到目前为止:

主机(tap0)[DHCP] --> libvirt(tap0)

我认为现在我可以将此接口添加到虚拟机中,并且虚拟机至少会从dnsmasq我在主机上运行的 IP 地址中获取 IP 地址。我尝试通过编辑虚拟机并将virsh edit domain以下行添加到机器来将接口添加到虚拟机中

<interface type='bridge'>
      <mac address='52:54:00:55:ed:bf'/>
      <source bridge='tap0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface>

我也试过

<interface type='network'>
      <mac address='52:54:00:55:ed:bf'/>
      <source network='tap0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface>

,我以为此时情况会是这样的:

主机(tap0)[DHCP] --> libvirt(tap0)<-- VM(eth0)

但是当我尝试启动我的虚拟机时,它给出了这个错误:

virsh # start VM

错误:无法启动域架构错误:无法添加桥接 tap0 端口 vnet0:不支持操作

我的最终目标是iptables在我的虚拟机能够正确获取 IP 地址后,对其进行进出流量的 natting。

那么,我遗漏了什么?

相关内容