在 OpenStack 下的 CentOS 客户机中,将 Ghost“vlan 0”标签添加到以太网帧中

在 OpenStack 下的 CentOS 客户机中,将 Ghost“vlan 0”标签添加到以太网帧中

我正在尝试调试一个涉及 KVM 虚拟机实例的问题,当源位于另一台物理机器上时,该实例不会响应网络请求,该物理机器与通过 Linux 桥接连接的虚拟机实例位于同一子网。

(这是在 Ubuntu 12.04 上的 OpenStack 部署(Folsom 版本)的背景下发生的,使用 nova-network 配置为 FlatDHCP 模式,而不是多主机。此问题仅发生在 CentOS 客户机上,而不是 Ubuntu 客户机上)。

当我在 CentOS 客户机内执行 tcpdump 时,我发现入站数据包被标记为“vlan 0”。例如,如果我在客户机内手动配置 IP 地址 10.40.0.5/16,然后从另一台机器执行“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 模块,客户机将正确响应 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 交换机。

编辑:交换机仅配置了一个 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 客户机时却看不到它们?或者可能是 CentOS 内核将标签添加到传入帧中?如果是这样,为什么会发生这种情况?

答案1

今天在 centos 6 上遇到了类似的情况,升级到最新内核解决了这个问题。

相关内容