你拥有什么:
- bond (bond0) 接口(interface)(除 4 之外的所有模式),至少有 2 个 iface(例如 eth0/eth1)连接在同一个外部交换机上
- bond0 接口(interface)连接到软件桥 (br0)
- 虚拟机 (vm0)(例如 LibVirt::LXC),其接口(interface)位于 br0
你得到什么:
- vm0 无法通过 br0 上的 bond0 连接到(大多数)IP 地址
- 系统日志中的“bond0:收到以自己的地址作为源地址的数据包”
为什么你会得到这个:
当 vm0 想要联系外部 IP 地址时,它会发出 ARP 请求。具有 vm0 的源 mac 的 L2 广播将通过(取决于绑定(bind)模式)例如 eth0 离开,但通过外部交换机通过 eth1 重新进入,从而通过 bond0 重新进入。因此,交换机 br0 将学习连接到 bond0 的端口上 vm0 的 mac 地址。因此 vm0 永远不会收到 ARP 回复。
您可以采取什么措施来解决:
除了分享信息之外,我发布此内容的原因是我无法找到足够好的解决方案。我找到的有:
- 在 vm0 上设置静态 ARP 条目
- 使用 bond0 mode=4,但您的外部交换机必须支持此
- 将外部 siwtch 配置为在 eth0/eth1 上使用专用 VLAN,但仅适用于某些用例并会增加复杂性
- 将两个物理接口(interface)添加到启用生成树的网桥,而不是使用绑定(bind)驱动程序
- 在 Linux 上无法在正确的 br0 端口上静态配置 vm0 的 MAC(但可以在 OpenBSD 上运行)
我真的希望这里有一个更优雅的解决方案......有人吗?
谢谢
最佳答案
我也遇到了同样的问题,我也做出了同样的分析。 我发现的唯一非侵入/可扩展的解决方案是使用主动/备份绑定(bind)(模式 1)。代价是您失去了聚合。
IMO,最好的解决方案是使用 802.3ad,但我不能总是使用它,因为我的大多数交换机上的端口 channel 数都有限。
关于linux - 关于软件桥连接问题的债券,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11206910/