绑定 + 桥接:流量通过错误的接口

绑定 + 桥接:流量通过错误的接口

我正在使用 Ubuntu 服务器 12.04,该服务器有 6 个 NIC,分为 2 个包:

  • eth0 和 eth2 使用绑定模式 1 进行捆绑,接口名称为 bond0,IP 为 [network].8
  • eth1、eth3、eth4 和 eth5 使用绑定模式 4 (802.3ad) 进行捆绑,接口名称为 bond1

bond1 将用于将虚拟机连接到我们的网络:它通过具有 IP [网络] 的 br0 桥接。

现在,当我从我们的网络 ping [network].5 时,一切似乎正常,但我们的虚拟机无法访问网络。

经过一段时间的调查,我注意到 br0 的 IP([network].5)与 bond1 的 MAC 地址相关联,即:

arping <[network].5>

返回

Unicast reply from <[network].5> [<bond0's MAC address>]  0.710ms

另外,当我 ping [network].5 时:

tcpdump -i br0 icmp

显示无 ICMP 流量,

tcpdump -i bond1

也没有显示任何流量,但是

tcpdump -i bond0

显示我使用 ping 发送的 ICMP 数据包。

很明显,数据包被发送到了错误的管道。我的问题是:为什么会这样?我该如何解决这个问题?

这是我的 /etc/network/interfaces 文件的内容:

# bond0 part :

auto eth0
    iface eth0 inet manual
    bond-master bond0

auto eth2
    iface eth2 inet manual
    bond-master bond0

auto bond0
    iface bond0 inet static
    address [network].8
    gateway [network].254
    netmask 255.255.254.0
    # bonding mode 1 :
    bond-mode balance-rr
    bond-slaves none

auto eth1
    iface eth1 inet manual
    bond-master bond1

auto eth3
    iface eth3 inet manual
    bond-master bond1

# bond1 and br0 part :

auto eth4
    iface eth4 inet manual
    bond-master bond1

auto eth5
    iface eth5 inet manual
    bond-master bond1

auto bond1
    iface bond1 inet manual
    # bonding mode 4 :
    bond-mode 802.3ad
    bond-slaves none
    bond-miimon 100
    bond-downdelay 200
    bond-updelay 200        
    bond_xmit_hash_policy layer2
    bond_lacp_rate fast

auto br0
    iface br0 inet static
    address [network].5
    netmask 255.255.254.0
    gateway [network].254
    bridge_ports bond1
    bridge_maxwait 5
    bridge_stp off
    bridge_fd 0

请注意:

  • 交换机端已配置 802.3ad 链路聚合
  • 我们已多次验证是否连接了正确的端口
  • 同样的问题发生在两台具有完全相同硬件和软件配置的服务器上

[编辑]经过几次重启后,情况正好相反:bond0 与 bond1 的 mac 地址相关联。这似乎是随机发生的。当它发生时,网桥后面的虚拟机可以访问我们的网络和互联网。

答案1

经过进一步搜索后,我发现我的问题的根源就是这里讨论的内容:

Serverfault:arp 响应总是从单个 NIC 发出

由于这个问题更加精确,并且有多个答案,所以如果你有和我同样的问题,你应该去看看

相关内容