在OpenStack的CentOS客户端的以太网帧中添加了Ghost“vlan 0”标签

我试图debugging涉及KVM虚拟机实例的问题,当源位于与通过Linux桥接连接的虚拟机实例所在的同一子网上的另一台物理机上时,实例不响应networking请求。

(这是在Ubuntu 12.04上的OpenStack部署Folsom版本的情况下发生的,使用nova-network为FlatDHCP模式configuration,而不是多主机。这个问题只发生在CentOS客户端,而不是Ubuntu客户端)。

当我在CentOS guest虚拟机内做了一个tcpdump时,我发现入站数据包被标记为“vlan 0”。 例如,如果我手动configuration客户端内部的10.40.0.5/16 IP地址,然后从另一台机器上执行“arping -i eth1 10.40.0.5”,使用tcpdump,我会看到“vlan 0”

# tcpdump -i eth0 -XX -vv -e 14:29:29.907212 54:78:1a:86:50:c9 (oui Unknown) > Broadcast, ethertype 802.1Q (0x8100), length 64: vlan 0, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 10.40.0.5 (Broadcast) tell 10.40.0.1, length 46 0x0000: ffff ffff ffff 5478 1a86 50c9 8100 0000 ......Tx..P..... 0x0010: 0806 0001 0800 0604 0001 5478 1a86 50c9 ..........Tx..P. 0x0020: 0a28 0001 ffff ffff ffff 0a28 0005 0000 .(.........(.... 0x0030: 0000 0000 0000 0000 0000 0000 dac7 07ed ................ 

如果我加载8021q模块,guest虚拟机将正确响应ARP请求,虽然它不会正确响应DHCP,并且生成的UDP数据包被标记为vlan 0。

如果我在与虚拟机对应的vnet1接口上的Ubuntu 12.04计算主机上执行类似的tcpdump,则看不到vlan 0标记:

 # tcpdump -i vnet1 -XX -vv -e tcpdump: WARNING: vnet1: no IPv4 address assigned tcpdump: listening on vnet1, link-type EN10MB (Ethernet), capture size 65535 bytes 15:59:34.023145 54:78:1a:86:50:c9 (oui Unknown) > Broadcast, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 10.40.0.5 (Broadcast) tell 10.40.0.1, length 46 0x0000: ffff ffff ffff 5478 1a86 50c9 0806 0001 ......Tx..P..... 0x0010: 0800 0604 0001 5478 1a86 50c9 0a28 0001 ......Tx..P..(.. 0x0020: ffff ffff ffff 0a28 0005 0000 0000 0000 .......(........ 0x0030: 0000 0000 0000 0000 dac7 07ed ............ 

两台物理机之间是Cisco Nexus 3000交换机。

编辑:交换机configuration只有一个vlan(vlan 1),这是本地VLAN。 交换机上的所有端口都处于访问模式。 以下是一个典型的端口:

 # show interface switchport Name: Ethernet1/1 Switchport: Enabled Switchport Monitor: Not enabled Operational Mode: access Access Mode VLAN: 1 (default) Trunking Native Mode VLAN: 1 (default) Trunking VLANs Enabled: 1 Administrative private-vlan primary host-association: none Administrative private-vlan secondary host-association: none Administrative private-vlan primary mapping: none Administrative private-vlan secondary mapping: none Administrative private-vlan trunk native VLAN: none Administrative private-vlan trunk encapsulation: dot1q Administrative private-vlan trunk normal VLANs: none Administrative private-vlan trunk private VLANs: none Operational private-vlan: none Unknown unicast blocked: disabled Unknown multicast blocked: disabled 

为什么会这些vlan 0标签被添加到这样的帧? 难道交换机正在添加这些标签,但Ubuntu在将帧传递给CentOS guest虚拟机时却无法看到它们? 或者可能是CentOS内核将标签添加到传入帧? 如果是这样,为什么会发生?

在今天面对类似的情况6,升级到最新的内核修复这个。