Linuxサーバーには2つのアクティブなネットワークインターフェイスがあります。
IF:eth1 IP:192.168.1.1/24 MAC:11:11:11:11:11:11 (1GbE)
IF:eth2 IP:192.168.1.2/24 MAC:22:22:22:22:22:22 (10GbE)
10GbEインターフェイス(eth2)は、ネットワーク上のホストと通信するための主要なインターフェイスであるという考え方です。 2番目の1GbEインターフェイス(eth1)をフェイルセーフとして残しておきたい。 10GbEインターフェイスがダウンした場合:私はまだ簡単な方法があり、ホストが接続できるようにDNSを更新できます。
インターフェイスの統計を観察していると、ネットワーク上のすべてのホストがこのインターフェイスをアドレス指定しているにもかかわらず、すべてのトラフィックがeth2ではなくeth1で送受信されていることに気付きました。 DNSAレコードが正しいインターフェイスのIPを指していることを確認しました。さらに、FQDNではなくIPでインターフェイスをアドレス指定しても同じ結果が得られることを確認しました。
マシンのARPキャッシュをクリアし、IPアドレスでeth1インターフェイスにpingを実行しました。 ARPテーブルを調べて、eth1のMACアドレスを見つけます。 ARPキャッシュを再度クリアし、IPアドレスでeth2インターフェイスにpingを実行しました。ここでも、ARPテーブルを調べて、(eth2ではなく)eth1のMACアドレスを見つけます。
Eth1を停止するか、インターフェイスを物理的に切断するか、別の論理ネットワークに配置すると、期待どおりの動作が得られ、トラフィックはeth2インターフェイスを通過します。
私の質問:なぜこれが起こるのですか? 「ホストモデルが弱い」ため、これがLinuxカーネルで予想される動作であるという証拠がいくつか見られます。
同じネットワーク上で両方のインターフェイスを維持し、期待どおりに機能させるにはどうすればよいですか。
Linuxは、任意のインターフェイスでARP要求に応答するように設計されています。ホストは特定のインターフェースではなくIPアドレスを所有していると想定されています。あなたが見ているものはARPフラックスと呼ばれています。
Sysctrlを使用してこの動作を変更できます
arp_ignore-INTEGER
ローカルターゲットIPアドレスを解決する受信ARP要求に応答して応答を送信するためのさまざまなモードを定義します。
0---(デフォルト):任意のインターフェイスで構成された任意のローカルターゲットIPアドレスに応答します
1-ターゲットIPアドレスが着信インターフェイスで構成されたローカルアドレスである場合にのみ応答します
2-ターゲットIPアドレスが着信インターフェイスで構成されたローカルアドレスであり、送信者のIPアドレスを持つ両方がこのインターフェイスの同じサブネットの一部である場合にのみ応答します
3-スコープホストで構成されたローカルアドレスには応答せず、グローバルアドレスとリンクアドレスの解決のみが応答されます
スイッチがそれをサポートしている場合、フェイルオーバーを提供するために802.1adリンクアグリゲーションを使用します。
この機能を使用すると、2つのインターフェイスを結合し、1つをアクティブインターフェイスとして、もう1つをパッシブインターフェイスとして設定できます。 IPアドレスはボンディングインターフェイスに存在するため、1つのNICが失敗しても、IPアドレスは変更されません。