如何在KVM/Virt-Manager中解决Macvtap网络问题

我正在运行在13.10主机下的qemu-kvm虚拟机。

我正在使用virt-manager定义这台机器,并添加了一个虚拟NIC,使用新的macvtap驱动程序。我的定义如下:

<interface type='direct'>
  <mac address='52:54:00:1f:dd:c4'/>
  <source dev='eth0' mode='bridge'/>
  <model type='virtio'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>

在主机上,我可以看到已创建了tap接口。
$ip link

5: macvtap0@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT qlen 500
    link/ether 52:54:00:1f:dd:c4 brd ff:ff:ff:ff:ff:ff

$ls /dev/tap5 
/dev/tap5

但是在虚拟机中,eth0接口无法访问网络。dhcp失败。静态配置显然有效,但是我无法ping任何东西。
我没有iptables规则,无论是在主机上还是在虚拟机中。
那么,我该如何解决这个问题呢?
1个回答

我和Ubuntu 13.10有同样的问题,我也尝试更新到14.04的开发分支,但仍然无法解决。
我不知道如何进行良好的调试,对于我的问题,我发现eth0没有进入混杂模式,在dmesg输出中找不到类似“device eth0 entered promiscuous mode”的消息。所以我强制将eth0设置为混杂模式,问题就消失了。
以下是我所做的操作:
1. 强制将eth0设置为混杂模式: sudo ifconfig eth0 promisc 2. 使用virt-manager启动虚拟机 3. 运行ifconfig -a并ping外部网络,看看是否正常工作
我不知道为什么libvirt没有将eth0设置为混杂模式,可能是它的一个bug。

我在CentOS 7作为KVM主机上遇到了同样的问题。客户操作系统没有学习到任何MAC地址。将主机上的物理接口手动设置为混杂模式解决了这个问题。实际上,macvtap需要混杂模式吗? - sdaffa23fdsf