2つのサーバーがあるとしましょう。
-->サーバーAのIPはXXX.XXX.XXX.XXXです。
-->サーバーBのIPアドレスはYYY.YYY.YYY.YYYです。
私が望むのは、サーバーA(ポート80)からサーバーB(ポート80)にトラフィックをリダイレクトすることです。
簡単なアプローチは、サーバーAにiptablesに次のルールを適用することです。
iptables -t nat -A PREROUTING -p tcp --dport port -j DNAT --to-destination server B:80
ただし、この単純なルールは機能しません。次のルールを追加する必要があります。
iptables -t nat -A POSTROUTING -j MASQUERADE
なぜこれですか? POSTROUTINGルールを追加するのはなぜですか? PREROUTING後、パケットは自動的にサーバーBに移動する必要があります。そうですか?
ベストアンサー1
*私はiptablesやLinuxネットワークスケジューリングの専門家ではありませんが、私たちを助けたいと思います!
説明によるとナット(ネットワークアドレスの解釈)テーブル、iptables のマニュアルページ:
このテーブルは、新しい接続を作成するパケットが見つかったときに参照されます。これは、3つの組み込み機能で構成されています。に使用されます)))POSTROUTING(パケットを転送しようとしたときに変更するため)」。
POSTROUTING チェーンは、パケットが送信される前にパケットを変更します。
以下にMASQUERADEの説明があります。Linux文書化プロジェクト私もあなたのメッセージを意味のあるものにします。
- 私は機械に言います。第二私のPPPまたはイーサネットで接続されたLinuxボックスㅏその玄関口だ。
- パケットがLinuxボックスに入るときㅏ~から第二、パケットに新しいTCP / IP送信元ポート番号を割り当て、パケットヘッダに独自のIPアドレスを挿入します。オリジナルを保存。その後、マスカレードサーバーは変更されたパケットをPPP / ETHインターフェイスを介してインターネットに送信します。
- パケットがインターネットからLinuxボックスに戻るときㅏ、Linuxは、ポート番号が上記の割り当てられたポートの1つであることを確認します。その場合、マスカレードサーバーは元のポートとIPアドレスを取得し、それを返されたパケットヘッダーに戻し、次にパケットを送信します。第二。
- パケットを送信するホストはその違いをまったく知りません。