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で再パッケージ化します。
強調表示した手順が正しいかどうかはわかりません。
説明は簡単にしようと思います。主に2種類のNATがあります。
あなたが説明しているのはソースNAT、つまりローカルネットワークからインターネット上のサーバーへの通信だと思います。そして何が起こるかはあなたが言った通りですが、少し言い換えさせてください:
192.168.1.1 -> 137.132.1.15:PORT
、送信元ポートはランダムです。201.22.14.15 -> 137.132.1.15:PORT
に変換されます。また、この接続はローカルIP192.168.1.1からのものであることが記憶されます。201.22.14.15 -> 10.0.0.1:80
として変換します。137.132.1.15 -> 201.22.14.15
に変更して、逆にマスカレードする必要があります。それが助けになり、それ以上の混乱が生じないことを願っています。
TCP接続はデータグラムで編成されておらず、ストリームです。データグラムはUDPです。
以下はLinuxカーネル用ですが、MacOSとWindowsは同じように機能すると思います。
「NATテーブル」と呼ばれるものは、接続トラッカーまたは略してconntrack
と呼ばれます。このテーブルを検査するために使用できるツールがあります。
1)はい。
2)はい。正確には、接続追跡テーブルにはこの接続のエントリがないため、空である必要はありません。接続は、送信元アドレス、送信元ポート、宛先アドレス、および宛先ポートによって特徴付けられます。ネイトされるポート番号は追加のエントリです。
3a)はい、2345はまだ使用されていないポートです。 IIRCは、デフォルトで元の送信元ポートになります。 SNAT(ソースNAT)ターゲットを持つiptables
ルールがあるため、接続トラッカーエントリが作成されます。
b)いいえ、この接続は通常のTCP接続として追跡されません。netfilter接続トラッカーとTCP接続状態テーブルは完全に異なります。
4)はい。逆のiptables
ルールは必要ないことに注意してください。これは多くの人々を混乱させます。