職場では、パケットをルーティングして反対側からポップアップし、元に戻すエンドツーエンドシステムを備えています。一般的な通信スタックだと思います。
スループットをテストするために、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
答え2
(透明な)プロキシが必要なようです。確認してみてください。
でも本当に使いたいならルーティングこれら2つのクライアントのみが影響を受けるため、まずBで一種のルーティング機能を設定する必要があります。(または少なくとも一種のIP転送)。その後、ホストにこのようなパスを追加する必要があります。
Aへ
route add C netmask 255.255.255.255 gw B
Cから
route add A netmask 255.255.255.255 gw B
たとえば、CのネクストホップはデフォルトゲートウェイではなくBボックスであるとAに通知します。 4つのオクテットすべてで255が必要で、このIPのみを表します。したがって、これは、宛先CのすべてのトラフィックがBに移動するという意味ではなく、すべてのトラフィックがBをゲートウェイとして使用してデフォルトゲートウェイの代わりにCに移動することを意味する。したがって、Bボックスに何も設定しない限り、パラドックスはありません。もちろん、Box Bはパッケージを落とし、おそらく「一体なぜ私にこれを送ったの?」という表情であなたを眺めるでしょう。
別のオプションは、管理対象スイッチがある場合は、ホストの1つのポートをミラーリングして、そのLANポートから送受信されるすべてのパケットをそのミラーリングポートのBボックスに移動させることです。
これら2つのクライアントと3番目のクライアントとの間の通信を中断する他の多くのオプションがあります。しかし、提供された説明によると、実際には要件はありません。だから何でも試してみてください。