ローカルネットワークトラフィックをスイッチ経由で強制する

ローカルネットワークトラフィックをスイッチ経由で強制する

3 枚のネットワーク カードを搭載したマシンがあります。1 枚のカードは WAN に接続され、他の 2 枚のカードは同じサブネット (192.168.1.0/24) の同じスイッチに接続されています。2 枚のカード間でデータを送信したいのですが、データが Linux ネットワーク スタックの内部に留まらず、実際にスイッチを通過するようにする必要があります。

2 枚のカードを通常どおりセットアップし、一方から他方に ping を実行しようとすると、正常に動作しますが、Wireshark にはトラフィックが表示されず、ネットワークに接続されません。

スイッチへの静的ルートを設定して、すべてのトラフィックがスイッチを通過するように強制しようとしました。これを実行すると、ping はネットで応答され、他のアドレスを見つけようとする大量の未応答の ARP 要求が発生します。ただし、どちらのアドレスもサブネット上の別のマシンに ping でき、そのマシンはどちらのアドレスにも ping できます。

Linux カーネルの ARP フィルター設定を変更しようとしましたが、うまくいきませんでした。

何か提案はありますか? ありがとうございます!

また、同じことを行うために IP エイリアシングを使用して 1 つの NIC を設定すると、ボーナス ポイントが得られます。

答え1

私はここに来たばかりですが、この質問の答えを持っているかもしれません。

オペレーティングシステムは、他のネットワークカードがローカルデバイスであることを認識しようとします。開発' オプション 'IPルート' を実行して、他のネットワーク カードを強制的に削除します。

たとえば、次のような IP アドレスがあります:

45.32.160.129

このサブネットのルートはデバイスdevens3を示しています

45.32.160.0/24 dev ens3 proto kernel scope link src 45.32.160.129

しかし、別のネットワーク カード (ens4、45.32.161.4/24) があるとします。

45.32.161.0/24 dev ens4 proto kernel scope link src 45.32.161.4

' を使うことができます開発' オプション 'IPルート' を使用して、使用するデバイスを指定します。この方法では、ローカル マシンからアクセスするときに、他のネットワーク カードが ens3 (自体) を使用するのではなく、ens3 の IP に自分自身を使用するように指定できます。このための秘訣は、ポリシー ルーティングも使用する必要があることです。ネットワーク カードが自分自身にアクセスして他のカードのインターフェイスから出ようとすると、自分自身を見つけることができないためです。したがって、ポリシー/ソース ルーティングを使用して、そのカードがアクセスしようとしている場合にのみ、他のカードをホップするように指定する必要があります。ここで、ソース マッチを指定する必要があります。さらに、使用またはテストしようとしているネットワーク ソフトウェアで、正しい IP ソース アドレスにバインドしていることを確認する必要があります。これにより、スイッチを介して他のネットワーク カードにアクセスするように強制されます。もちろん、他のカードに対しても同じことを逆の順序で行います。

これで問題が解決するかもしれません。IPルート' ルートの優先順位と ' のマニュアルページ開発' パラメータ。次に、ポリシー部分を実行するためにルールのマッチングを確認します。次のようになります。

ip rule add from 45.32.161.4 lookup from1
ip rule add from 45.32.160.129 lookup from2

次に、反対のルートを追加します。

ip route add 45.32.160.129 via 45.32.161.4 dev ens4 table from1
ip route add 45.32.161.4 via 45.32.160.129 dev ens3 table from2

これらのテーブルは/etc/iproute2に作成する必要があります

関連情報