网络流量似乎没有离开主干

sys*_*138 8 networking linux bonding centos6 hp-procurve

我正在搭建一些新的虚拟化服务器,其中一部分是让一些更高带宽的管道进入它们。最终目标是将 4 个 GigE 端口绑定到一个承载 802.1q 标记流量的中继。我可以走那么远,但是我遇到了一个奇怪的问题。但首先,一张图表。

----------       ----------  1GbE trunks 
|        | 10GbE |        | ------------- --------
|  SW1   |-------|   SW2  | ------------- | VM1  |
|        |       |        | ------------- --------
----------       ----------
     |                |  1GbE  -----------
     | 1GbE           |--------| client2 |
     |                         -----------
----------
|        | 1GbE -----------
|  SW3   |------| client1 |
|        |      -----------
----------
Run Code Online (Sandbox Code Playgroud)

所有交换机都是 HP ProCurve 2910al 交换机,并且没有堆叠。上图中的 Client2 与 VM1 位于同一 VLAN 中。Client1 位于不同的 VLAN 中。对于 VM 机器 (CentOS 6),iptables 和 SELinux 都已禁用。

我的问题是,当涉及中继时,与任一客户端机器交谈时双向网络流量是不可能的。TCPDUMP 显示它们收到 ping 并发送 ECHO REPLY 数据包,但 VM 主机从未看到它们。同时,如果我尝试从客户端机器 ping 虚拟机,它也不起作用。我无法 ping 位于同一子网上的 client2 的事实表明网络层某处存在问题。

奇怪的是,我可以从 VM 主机 ping 任何交换机上的网关 IP。如果我使用单个接口,无论有没有 VLAN 标记,一切都正常。如果我只绑定一个接口并在该接口上打开 VLAN 标记,我可以去任何地方。构建一个主干,我仅限于交换结构。

树干的类型似乎并不重要。现在,它们配置为模式 0 中继 (balance-rr),但使用 LACP/802.1qa 的行为方式相同。

vlan 70 
   name "Virtualization Subnet" 
   untagged 35,36,38,40 
   tagged Trk1-Trk2,Trk5,Trk8 
   no ip address 
   jumbo 
   exit 
Run Code Online (Sandbox Code Playgroud)

那是 SW2 上的 VLAN 配置。SW1 的 VLAN 70 定义在其上定义了“ip 地址”。上面的代码片段处于完全非中继模式。当我被困时:

trunk 35-36,38,40 Trk16 trunk
vlan 70 
   name "Virtualization Subnet" 
   tagged Trk1-Trk2,Trk5,Trk8,Trk16
   no ip address 
   jumbo 
   exit 
Run Code Online (Sandbox Code Playgroud)

802.1qa/LACP 版本交换了中继定义,trunk 35-36,38,40 Trk16 lacp但正如我所说,并没有改变问题的表现。

Client2 实际上连接到 SW1,但将它放在图表中会使格式化更加棘手。在任何情况下,Interface 节中唯一的东西就是一个name指令;它被列为untaggedSW1 的 vlan 70 节中的一个端口。

我错过了什么?

sys*_*138 7

在涉及MikeyBPauskaChrisS 的聊天中进行了长时间的辩论之后,问题最终有两个方面:

  1. CentOS 6 中的一个可能错误是没有更改模块的模块选项bonding作为 的一部分service network restart,因此它没有跟踪我在 LACP 模式 (4) 和循环 (0) 之间的更改。
  2. 循环模式不喜欢与 ProCurve 交换机一起使用。

一旦我通过以下命令将绑定接口强制为 LACP/802.1qa 模式:

ifconfig bond0 down
echo "4" > /sys/class/net/bond0/bonding/mode
ifconfig bond0 up
Run Code Online (Sandbox Code Playgroud)

服务器和交换机都在说话。此时,从交换机上仅启用一个接口开始,流量开始正常工作。启用第二个、第三个和最后的第四个接口都可以保持流量正常工作。

最终,LACP 模式使一切正常。线索是当中继中只有一个启用的交换机端口时,循环模式有效。服务器在重新启动后仍然存在并以正确的模式运行。但是,aservice network restart不会使文件中的MODE="4"部分生效。如果该模式发生变化,它将保持启动时的设置(或更可能是模块的模块加载时间)。ifcfg-bond0/etc/sysconfig/network-scripts/bonding