難しいLinuxルーティングの問題

難しいLinuxルーティングの問題

職場では、パケットをルーティングして反対側からポップアップし、元に戻すエンドツーエンドシステムを備えています。一般的な通信スタックだと思います。

スループットをテストするために、2 つの外部システムを使用してトラフィックをスタックに送信する iperf3 を使用していることを発見しました。このルーティングの問題を解決できず、合計3台のコンピュータを使用していましたが、この問題が以前に発生したと確信しているので、私たちが見ることができない解決策があるようです。可能であれば、1台のマシンしか使用したいと思います。

私たちの環境が次のとおりです。ここに画像の説明を入力してください。

Aがiperf3クライアントの場合、Bはパケットをイーサネットパケット(簡素化のためにブラックボックスとして保持)に転送する複数のプログラムで構成され、Cはiperf3サーバーです。

要約すると、パケットはAからB、Cに移動し、再びBに戻り、再びAに戻ります。

ここに画像の説明を入力してください。

Iperfを使用してこれを行うには、AのクライアントがCにパケットを送信する必要があります。

iperf3 -c "C"

また、以下を使用してCにサーバーを設定しました。

iperf3 -s

しかし、現在のルーティングルールがない場合、これらのパケットはBをバイパスし、AとCの間を直接移動します。これが発生しないようにするために、「Cに向かうすべてのトラフィックをBにルーティングする」などのルーティングルールを作成しました。

route add "C" netmask 255.255.255.255 gw "B"

また、サーバーがAを直接送り返さないように、反対側でも同じことを行う必要があります。

route add "A" netmask 255.255.255.255 gw "B"

まだ捕まっていない場合、AとCへのすべてのトラフィックがBへのパラドックスが発生します。つまり、Bが処理を終えてCにデータを送信しようとすると、ルーティングテーブルが指示するようにBが自分にデータを送信します*。これは逆方向にも発生します。

この問題に対する解決策を知っている人はいますか?簡単なルーティングでできるかはわかりませんが、最初からルーティングについてよくわからないので何か秘密があるのではないでしょうか?

*実際にずっと自分に送るかどうかよくわかりません(そうでないようで、送っても二度目にはどうすべきかわかりません)。しかし、それが私が望むものです。この構成には適用されません。

ベストアンサー1

これはiptablesを使用して達成できるものとほぼ同じです。 「B」には次の内容を入れることができます。

iptables -t nat -A PREROUTING -s "A" -p tcp --dport 5201 -j DNAT --to-destination C:5201

iptables -t nat -A PREROUTING -s "C" -p tcp --dport 5201 -j DNAT --to-destination A:5201

おすすめ記事