MASQUERADEとSNAT / DNATに関するいくつかの質問

MASQUERADEとSNAT / DNATに関するいくつかの質問

私はSNATとDNATが何を意味するのかを知っています。インターネットサービスを開くようにローカルWebサーバーを構成するには、以下を使用する必要があることに注意してください。

  • SNATは、ローカルネットワークサーバーからルーターアドレスに着信パケットを変更するのに役立ちます。
  • DNATは、インターネットからサーバーのローカルネットワークIPに着信パケットを変更するのに役立ちます。

ただし、MASQUERADE共有ネットワークを使用するときは、インターネットからのこれらのパケットに対してDNATを構成する必要はありません。一部の記事では、MASQUERADEがルータの外部IPを自動的に照会する点を除いて、SNATと同じであると述べています。しかし、なぜMASQUERADEにDNAT構成が必要ないのですか? MASUQERADEがこれらのタスクを実行できると仮定すると、DNATを設定するときにiptablesが自動的にSNATを設定しないのはなぜですか?

編集する

新しい質問があります。ローカルネットワークの2人のユーザーが同じWebページを閲覧していて、それらが開くクライアントポートが同じであるとします。 Webサーバーがルーターへのデータパケットで応答すると、ルーターはこれらのデータパケットがどのユーザーに属しているかをどうやって知ることができますか?

答え1

conntrackSNATとDNATはどちらも、カーネルの接続追跡()機能を使用して、着信および発信パケットのアドレス変換を実行します。したがって、カーネルが逆方向パケットがNAT接続に属していることを検出すると、特別な規則なしで自動的に逆変換を実行します。

そのため、たとえば単一のSNATルールで十分です(他の方向のDNATルールがあっても問題にはなりませんが)。

はい、MASQUERADEはデフォルトでインターフェイスから取得したアドレスを持つSNATです。引用するにはman iptables-extensions

マスカレーディングは、パケットが開始されたインターフェイスのIPアドレスへのマッピングを指定するのと同じですが、インターフェイスがダウンした場合に接続を忘れることもあります。

ところで、SNAT =ソースNAT(パケットのソースアドレスの変更)とDNAT =ターゲットNAT(パケットのターゲットアドレスの変更)を覚えておくのは簡単です。

編集する

(通常、新しい質問は別の質問で質問する必要があります。)

netstatローカルコンピュータで実行されているアプリケーションと他のホスト間の接続のみが表示されます。カーネル接続トレースは表示されません。これに関する情報は、/proc(例えば)およびパッケージの他のユーティリティにあります。/proc/net/nf_conntrackconntrack

ネットワーク層は「ユーザー」について何も知りません。接続は、送信元アドレス、送信元ポート、宛先アドレス、宛先ポートで構成されます。これがネットワーク層が知っているすべてです。ポートがすでに使用されている場合は、送信元/宛先アドレスと宛先/送信元(ローカル)ポート番号を別の番号に置き換えてネットワークアドレス変換(NAT)を実行します。

したがって、異なるホストで同じポート(自分のコンピュータ)を持っているがNATが適用されていない2人のユーザーは、NATが適用されたホストで異なるポートを持つことになります。同じシステム上の2人のユーザーは最初は常に別のローカルポートを使用するため、これは問題ではありません。ユーザーが同時に2つの接続を開く場合も同様です。

関連情報