あなたが持っているもの:
- 同じ外部スイッチに接続された少なくとも 2 つの ifaces (eth0 / eth1 など) を持つ bond (bond0) インターフェイス (4 を除くすべてのモード)
- ソフトウェア ブリッジ (br0) で結合された bond0 インターフェイス
- br0 上のインターフェースを持つ仮想マシン (vm0) (例: LibVirt::LXC)
あなたが得るもの:
- vm0 は、br0 上の bond0 経由で (ほとんどの) IP アドレスに接続できません
- syslog に「bond0: 送信元アドレスとして自身のアドレスを持つパケットを受信しました」
これを取得する理由:
vm0 が外部 IP アドレスに接続する場合、ARP 要求を送信します。ソース mac が vm0 のこの L2 ブロードキャストは、(結合モードに応じて) eth0 などを通過しますが、外部スイッチを介して eth1 を介して再入力し、bond0 に再入力します。したがって、スイッチ br0 は、bond0 に接続されたポートで vm0 の MAC アドレスを学習します。結果として、ARP 応答が vm0 によって受信されることはありません。
解決するためにできること:
情報を共有するのに続いてこれを投稿する理由は、十分な解決策を見つけることができなかったからです。私が見つけたものは次のとおりです。
- vm0 で静的 ARP エントリを設定します
- bond0 mode=4 を使用しますが、外部スイッチがこれをサポートしている必要があります
- eth0/eth1 でプライベート VLAN を使用するように外部スイッチを構成しますが、一部のユースケースでのみ機能し、複雑さが増します
- ボンド ドライバを使用する代わりに、スパニング ツリーを有効にして、両方の物理インターフェイスをブリッジに追加します。
- br0 の正しいポートで vm0 の MAC を静的に構成することは、Linux ではオプションではありません (ただし、OpenBSD では機能します)。
ここでよりエレガントなソリューションを本当に望んでいます...誰ですか?
ありがとう