POSTROUTINGチェーンでSNATが発生し、PREROUTINGチェーンでDNATが発生するのはなぜですか?

POSTROUTINGチェーンでSNATが発生し、PREROUTINGチェーンでDNATが発生するのはなぜですか?

なぜSNAT(ソースIPおよび/またはポート変更)natテーブルチェーンでPOSTROUTING、つまりルーティング後に発生するのですか?チェーンDNATで(ターゲットIPまたはポートの修正)がなぜ発生するのですか?PREROUTING私は、後者が異なるプライベートネットワークを持つPCに複数のNICを持つ可能性があり、ターゲットIPアドレスがまだパブリックにルーティング可能なアドレスである場合、PCがパケットをルーティングする方法がわからないためだと思います。しかし、SNATこれが起こり得ない理由がないからですPREROUTING

答え1

PREROUTING私は図に示すように、ローカルコンピュータから出てくるすべてがテーブルを通過しないと確信しています。この素晴らしいASCII番号から

答え2

一般に、SNATの主な基準は、「与えられたインターフェイス外のトラフィック」(例:)-o eth0です。パケットが送信されるインターフェイスはルーティングによって決定されるため、標準を適用するにはPOSTROUTINGコンテキストで実行する必要があります。

DNAT はパケットの宛先アドレスを書き換えます。これはパケットの宛先に影響を与えることを意味します。たとえば、ゲートウェイに向かうように見えるパケットが最終的に書き換えられ、ネットワーク上のコンピュータに向けられます。パケットが実際に必要な場所に移動することを決定するときに、パスが書き換えられた宛先を考慮できるようにしたいので、DNATはコンテキストで実行する必要がありますPREROUTING

答え3

チェーン名が示すように、PREROUTINGパケットが受信されると最初に完了するため、パケットが行く場所(目的地)に基づいてルーティングされます。他のすべてのルーティングルールが適用された後、POSTROUTINGチェーンはソース(ソース)に基づいてどこに行くかを決定します。

たとえば、私のサーバーで転送される(NATed)受信ポートはすべてチェーンで定義PREROUTINGされてDNATおり、NATedインターフェイスのすべてのパケットはチェーンを通過するため(この場合)、フィルタチェーンを通過します。POSTROUTINGSNATFORWARD

答え4

Linuxでパケット操作を実行する場合、チェーンの観点から一般的なパスは、パケットパスの最初のチェーンPREROUTINGと最後のチェーンPOSTROUTINGです。ルータには、特定のフローに対するIPsec VPNトンネルの選択など、いくつかの変換を含む多くの設定があることがよくあります。一般に、SNATの目的は、パブリックネットワークに接続されているホストが接続できるアドレスにパケットを送信することです。これらの変更は、IP アドレスの混在を防ぐために、OUTPUT より前の POSTROUTING レベルでルータを離れようとすると、パケットに適用されます。同様に、反対方向でルーターが最初に期待するのは、パケットがスタックを通過するときに構成に基づいて決定を適用するために実際のフローを確認することです。これは、最も早い段階、つまりPREROUTINGでDNATを実行する場合にのみ達成できます。

関連情報