2

你有什么:

  1. 绑定(bond0)接口(除 4 之外的所有模式),至少有 2 个 iface(比如 eth0 / eth1)连接在同一个外部交换机上
  2. bond0 接口加入了软件桥 (br0)
  3. 虚拟机 (vm0)(例如 LibVirt::LXC)在 br0 上有一个接口

你得到什么:

  1. vm0 无法通过 bond0 over br0 连接到(大多数)IP 地址
  2. 系统日志中的“bond0:接收到的以自己的地址作为源地址的数据包”

为什么你会得到这个:

当 vm0 想要联系外部 IP 地址时,它会发送一个 ARP 请求。这个带有 vm0 源 mac 的 L2 广播将通过(取决于绑定模式)例如 eth0,但通过外部交换机,通过 eth1 重新进入,从而通过bond0。因此,交换机 br0 将获知连接到bond0 的端口上的vm0 的mac 地址。因此,vm0 永远不会收到 ARP 回复。

你能做些什么来解决:

除了分享信息之外,我发布此内容的原因是我无法找到一个足够好的解决方案。我确实找到的是:

  1. 在 vm0 上设置静态 ARP 条目
  2. 使用 bond0 mode=4 但你的外部交换机必须支持这个
  3. 将您的外部 siwtch 配置为在 eth0/eth1 上使用专用 VLAN,但仅适用于某些用例并增加了复杂性
  4. 将两个物理接口添加到启用了生成树的网桥,而不是使用绑定驱动程序
  5. 在 br0 的正确端口上静态配置 vm0 的 MAC 在 Linux 上不是一个选项(尽管适用于 OpenBSD)

我真的希望在这里有一个更优雅的解决方案......有人吗?

谢谢

4

2 回答 2

3

我有同样的问题,我想出了同样的分析。我发现的唯一非侵入性/可扩展解决方案是使用主动/备份绑定(模式 1)。权衡是您松散了聚合。

IMO 最好的解决方案是使用 802.3ad,但我不能总是使用它,因为我的大多数交换机都受限于 6 个端口通道。

于 2012-10-08T09:09:06.743 回答
0

在桥接器中尝试这些选项:

brigde_fd 0
bridge_stp off # switch on with more system like this
bridge_maxage 0
bridge_ageing 0
bridge_maxwait 0

取自这个线程: kvm bridge也在proxmox中

于 2014-10-16T12:24:03.760 回答