问题描述
Linux虚拟机,在指定网卡上创建VLAN设备配置IP地址场景下,如下图1所示,当网卡MAC地址改变且创建VLAN设备仍然使用同一个IP地址,此时可能会出现从其他VLAN的虚拟机内部无法ping通该IP的情况。图1虚拟机跨VLAN通信
如图1当虚拟机VM2网卡的MAC修改后,重新创建VLAN200的设备配置原IP,从VM1和VM3 ping
VM2的IPv4或IPv6的地址,可能存在ping不通的情况。
目前发现存在问题的操作系统列表如下,需要采用相关措施进行规避。
表1 操作系统列表
虚拟机操作系统
虚拟机位数
备注
Novell SUSE Linux Enterprise Server 11 SP2
32/64
IPv4和IPv6地址都存在此问题。
Novell SUSE Linux Enterprise Server 11 SP3
32/64
Red Hat Enterprise Linux 6系列
32/64
IPv6地址存在此问题。
CentOS 6 系列
32/64
原因
由于跨三层通信需要网关根据ARP表项(IPv4)或ND表项(IPv6)进行MAC地址替换的过程,在修改虚拟机网卡的MAC地址之后如果虚拟机未主动发送免费ARP报文或NA报文去更新交换机上对应的表项,那么此时跨三层通信就会出现IP地址对应的MAC地址错误,导致通信异常的问题。
解决方法
提供以下三种方法可解决该问题,但方法一操作方便不会引起其他副作用,建议使用。
方法一
在MAC地址改变的虚拟机内部重新创建VLAN设备时,分别ping IPv4或IPv6的网关地址,以便主动更新交换机对应的ARP或ND的表项。
方法二
登录虚拟机所在CNA节点的交换机执行以下命令:
如果是IPv4地址不通,需要清除arp表项,执行如下命令:
reset arp dynamic
如果是IPv6地址不通,需要清除vlan 200域nd表项,执行如下命令:
reset ipv6 neighbors Vlanif 200
说明:以上命令针对使用华为交换机用户,如果使用其他厂商的交换机,请参考厂商的交换机操作指导。
方法三
不做任何操作等待交换机ARP表项或ND表项自动老化。