ポート転送 - iptablesにPOSTROUTINGルールが必要なのはなぜですか?

ポート転送 - iptablesにPOSTROUTINGルールが必要なのはなぜですか?

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アドレスを取得し、それを返されたパケットヘッダーに戻し、次にパケットを送信します。第二
  • パケットを送信するホストはその違いをまったく知りません。

おすすめ記事