“br0: reveived packet on eth0 with own address as source address”问题解决方法

在做KVM的nested virtualization(嵌套虚拟化)测试时,在L1 guest中遇到了“br0: reveived packet on eth0 with own address as source address”错误(在dmesg中可以看到),它明确地提示了br0这个Bridge收到了一些数据包,而这些数据包的源MAC地址与eth0具有相同MAC地址。(另外,此时br0的MAC地址也是与eth0一样的,它们是桥接的嘛)这说明至少在局域网中,至少存在一个与L1 guest中eth0有相同MAC地址的Ethernet interface,而且它还在与L1中的br0/eth0进行通信。
其实,在看到这个“br0: reveived packet on eth0 with own address as source address”错误时,这时有L2 guest在L1中运行,是通过Bridge方式给网络给L2的,不过L2中的网络interface(eth0)也没有能通过DHCP得到IP地址,L2中的网络其实是不通的。仔细一看才发现,原来L2中eth0的MAC地址与L1中eth0的MAC地址相同的,都为“52:54:00:12:34:56”,而Bridge方式给guest网络,L2 guest中网卡是需要与L1中与bridge绑定的eth0通信的,所以就出现了前面的错误信息。

在明白原因之后,解决这个问题就比较简单了,只需要修改L2 guest中的MAC地址使其不与局域网(特别是L1 guest)中其他MAC地址重复即可。如下命令,可修改MAC地址。

可以将这设置MAC地址的命令加到/etc/rc.local中让其启动时自动设置,也可以在/etc/sysconfig/network-scripts/ifcfg-eth0(Redhat系的Linux是用这个文件)中设置“MACADDR=52:54:00:66:66:66”,并注释掉“#HWADDR=xx”这一行也可以。

其实,在这次遇到的问题中,同时出现相同的MAC地址并非巧合,因为在Nested Virtualization中,我使用了QEMU分别创建了第一级L1 guest和第二级L2 guest,都使用了Bridge的网络配置方式,其实应该在QEMU命令行启动客户机时就指定其MAC地址,而不是让QEMU自己分配,它按照自己的一套规则产生MAC地址,确实很可能是重复的。 在QEMU命令行中使用Bridge网络并指定MAC地址(用-net nic,macaddr=xx参数),命令如下所示:
qemu-system-x86_64 rhel6u3.img -net nic,macaddr=52:54:00:12:34:01 -net tap -smp 2 -m 1024

master

Stay hungry, stay foolish.

发表评论

电子邮件地址不会被公开。 必填项已用*标注