私はまだiptablesのマニュアルページやその他のドキュメントを読んでいて、質問とその回答を掘り下げています。
これが発生する問題です。 NATを設定するときは、次のようなPOSTROUTINGルールを使用します。
iptables -A POSTROUTING -t nat -j MASQUERADE -o eth0
パケットがこのチェーンに到達すると、内部ホストがインターネットとの接続を初期化する必要があるようです。着信トラフィックは、チェーンにぶつかることなく同じパスを経由しますか?私はこれで正しいですか?
POSTROUTINGチェーンは、ローカルで生成されたパケットも含め、システムを離れるすべてのパケットについてチェックされます(PREROUTINGを省略し、代わりにOUTPUTを使用します)。
ルールは、eth0
を介して送信されるトラフィックに制限されています。 「着信」とは、ルーティングされるすべてのトラフィックです(これをPOSTROUTINGに関連付けた場合)。あなたはおそらくインターネットからのトラフィックを意味します(eth0
)。通常、eth0
に着信するトラフィックは、eth0
を介してシステムを離れることはありません。
POSTROUTINGは、発信トラフィックのみ(および接続の最初のパケットのみ)に影響します。応答がeth0
に到着すると、SNAT接続の一部として認識され、宛先アドレス(およびポート)は自動的に元の値(MASQUERADE
ターゲットによって上書きされた値)に変換されます。
Iptablesでは、接続の最初のパケットのみがnatテーブルのチェーンにヒットします(これは他のテーブルのチェーンとは異なります)。既存の接続に関連するパケットは、最初のパケットが処理されたときに確立されたマッピングに基づいて自動的に変換されます。
既存の接続と一致せず、NATテーブルのルールと一致しない着信パケットが到着した場合、NAT(NAT $ ===)なしで処理されます。他のテーブルの宛先IPおよびiptablesルールに応じて、転送、ローカルでのプロトコルスタックの受け渡し、またはドロップが含まれる場合があります。