你有什么:
- 绑定(bond0)接口(除 4 之外的所有模式),至少有 2 个 iface(比如 eth0 / eth1)连接在同一个外部交换机上
- bond0 接口加入了软件桥 (br0)
- 虚拟机 (vm0)(例如 LibVirt::LXC)在 br0 上有一个接口
你得到什么:
- vm0 无法通过 bond0 over br0 连接到(大多数)IP 地址
- 系统日志中的“bond0:接收到的以自己的地址作为源地址的数据包”
为什么你会得到这个:
当 vm0 想要联系外部 IP 地址时,它会发送一个 ARP 请求。这个带有 vm0 源 mac 的 L2 广播将通过(取决于绑定模式)例如 eth0,但通过外部交换机,通过 eth1 重新进入,从而通过bond0。因此,交换机 br0 将获知连接到bond0 的端口上的vm0 的mac 地址。因此,vm0 永远不会收到 ARP 回复。
你能做些什么来解决:
除了分享信息之外,我发布此内容的原因是我无法找到一个足够好的解决方案。我确实找到的是:
- 在 vm0 上设置静态 ARP 条目
- 使用 bond0 mode=4 但你的外部交换机必须支持这个
- 将您的外部 siwtch 配置为在 eth0/eth1 上使用专用 VLAN,但仅适用于某些用例并增加了复杂性
- 将两个物理接口添加到启用了生成树的网桥,而不是使用绑定驱动程序
- 在 br0 的正确端口上静态配置 vm0 的 MAC 在 Linux 上不是一个选项(尽管适用于 OpenBSD)
我真的希望在这里有一个更优雅的解决方案......有人吗?
谢谢