web-dev-qa-db-ja.com

NATおよびNATテーブル

NATテーブルとNATテーブルがどのように機能するかを理解しようとしていますが、オンラインで回答が見つからないようです。 NATに関していくつか質問があります。 TCP接続が確立されたと想定します。

ルーターにWAN 201.22.14.15があると仮定します

1)IP 192.168.1.1のデバイスが、IP137.132.1.15のサーバーに接続したいとします。デバイスは最初に、送信元IPが192.168.1.1、宛先IPが137.132.1.15のIPデータグラムにデータをカプセル化します。

2)その後、データグラムはNATが発生するルーターに送信されます。これがプライベートネットワークで送信される最初のパケットであると仮定すると、NATテーブルは最初は空ですか?

3)これで、192.168.1.1:1234を201.22.14.15:2345にマップするエントリがテーブルにあります。 ?

192.168.1.1:1234 -> 201.22.14.15:2345

IPデータグラムは、送信される前に、対応するルーターアドレス(201.22.14.15)とポート番号2345で再パッケージ化されます。ルーターからサーバーへの個別のTCP接続はありますか?または、エントリは割り当てられた仮想ポート番号だけですか?

4)データはサーバー137.132.1.15からdst IP 201.22.14.15およびdestポート2345で返されます。ルーターはテーブルルックアップを実行し、201.22.14.15:2345が192.168.1.1:1234にマップされていることを検出します。したがって、IPデータグラムをsrcアドレス137.132.1.15:80およびdstアドレス192.168.1.1:1234で再パッケージ化します。

強調表示した手順が正しいかどうかはわかりません。

6
calveeen

説明は簡単にしようと思います。主に2種類のNATがあります。

  • ソースNAT:通常は「マスカレード」と呼ばれ、ローカルIPアドレスを彼のアドレスでマスクして、ローカルネットワークへのルートを知らないネットワーク内のホストと通信できるようにします。
  • 宛先NAT:通常は「ポート転送」と呼ばれ、宛先ネットワークアドレスを外部ネットワークのローカルアドレスに変換します。

あなたが説明しているのはソースNAT、つまりローカルネットワークからインターネット上のサーバーへの通信だと思います。そして何が起こるかはあなたが言った通りですが、少し言い換えさせてください:

  1. ローカルネットからインターネットへの接続を生成します:192.168.1.1 -> 137.132.1.15:PORT、送信元ポートはランダムです。
  2. ルーティングテーブルに基づいて、IP 192.168.1.1のローカルホストで、パケットはネクストホップ(通常はインターネット宛先のデフォルトゲートウェイ)に送られます。
  3. 送信元NATが設定されているデバイスにパケットが到着すると、送信元アドレスが変換され、パケットの送信元がマスカレードされて201.22.14.15 -> 137.132.1.15:PORTに変換されます。また、この接続はローカルIP192.168.1.1からのものであることが記憶されます。
  4. ほとんどの場合、137.132.1.15は、外部ローカルネットワーク(たとえば10.0.0.1)への宛先ポートPORTをNATするファイアウォールであり、それがWebサーバーなので、パケットを201.22.14.15 -> 10.0.0.1:80として変換します。
  5. 10.0.0.1のサーバーは、201.22.14.15からの要求を受信し、戻ると、ルーティングテーブルに基づいて、逆に同じことが起こり、201.22.14.15に戻ります。
  6. ルーター/ファイアウォールは、パケットアドレスを137.132.1.15 -> 201.22.14.15に変更して、逆にマスカレードする必要があります。
  7. 201.22.14.15のルーターはパケットを受信し、192.168.1.1によって生成されたストリームに関連するパケットを検出して、応答を返します。 10.0.0.1がマスカレードされているため、192.168.1.1には137.132.1.15からのパケットが表示されます。

それが助けになり、それ以上の混乱が生じないことを願っています。

サイドノート

TCP接続はデータグラムで編成されておらず、ストリームです。データグラムはUDPです。

3
Jorge Valentini

以下はLinuxカーネル用ですが、MacOSとWindowsは同じように機能すると思います。

「NATテーブル」と呼ばれるものは、接続トラッカーまたは略してconntrackと呼ばれます。このテーブルを検査するために使用できるツールがあります。

1)はい。

2)はい。正確には、接続追跡テーブルにはこの接続のエントリがないため、空である必要はありません。接続は、送信元アドレス、送信元ポート、宛先アドレス、および宛先ポートによって特徴付けられます。ネイトされるポート番号は追加のエントリです。

3a)はい、2345はまだ使用されていないポートです。 IIRCは、デフォルトで元の送信元ポートになります。 SNAT(ソースNAT)ターゲットを持つiptablesルールがあるため、接続トラッカーエントリが作成されます。

b)いいえ、この接続は通常のTCP接続として追跡されません。netfilter接続トラッカーとTCP接続状態テーブルは完全に異なります。

4)はい。逆のiptablesルールは必要ないことに注意してください。これは多くの人々を混乱させます。

1
dirkt