我在 13.10 主机上有一个在 qemu-kvm 下运行的虚拟机。我使用 virt-manager 来定义机器,并使用新的 macvtap 驱动程序添加了虚拟 NIC。我有以下定义:
<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 没有进入混杂模式,我找不到类似device eth0 entered promiscuous mode
dmesg 输出的消息。所以我强制 eth0 进入混杂模式,问题就消失了。
这是我做的:
- 强制 eth0 进入混杂模式: sudo ifconfig eth0 promisc
- 使用 virt-manager 启动虚拟机
ifconfig -a
然后在外面 ping 一下,看看它是否有效。
我不知道为什么 libvirt 不将 eth0 置于混杂模式,也许是它的一个错误。