私はモデム ルーターを使用しており、場合によっては ISP NAT の背後にもいます。NAT (ISP の NAT) の背後にある NAT (ルーターの NAT) はどのように機能しますか?
私の知る限り、NAT は次のように動作します。コンピュータ A と B は内部 IPinternal1
とを取得しますinternal2
。次に、NAT はそれらに同じ IP 上のポートを割り当てます。そのため、公開側ではそれらはおよびの背後にありsomeIP:1
ますsomeIP:2
。
しかし、ルータがこれを実行し、その後 ISP が再度これを実行すると、IP は の形式になりますがsomeIP:1:100
、someIP:2:101
ポートには第 2 レベルのポートがないため、これは不可能です。
それで、これはどのように機能するのでしょうか?
答え1
簡単な例を試してみましょう。
「通常の」NAT されたホーム ネットワークでは、192.168.1.2:11223
「パブリック」アドレス:ポートのペアにマップされます203.0.113.5:22334
。そのため、最終的な宛先ホストは、パケットを受信したと認識します203.0.113.5:22334
が、その背後にある「プライベート」ネットワークについては認識しません。
ここで、これを 2 つのレベルの NAT を持つダブル NAT ネットワークに拡張してみましょう。
ホストに最も近いルーターでは、は192.168.1.2:11223
「パブリック」アドレス:ポートのペアにマップされます10.0.0.8:22334
。この時点では、10.0.0.8
異なるネットワーク内にあるだけで、依然としてプライベート アドレスです。このルーターに関する限り、その役割は完了です。
最初のルータが接続されている LAN のゲートウェイとして機能する次のルータでは、10.0.0.8:22334
独自のパブリック インターフェイス上の別のアドレス:ポート ペアにマッピングされます203.0.113.5:12345
。
最終的な宛先ホストは、 からパケットを受信したと考えます203.0.113.5:12345
。そのホスト、およびパブリック インターネット全体は、ここで関係する10.0.0.0/8
または192.168.0.0/16
サブネットのいずれについても認識していません。そのアドレスに応答が返されますが、各ルータはこれを順番に変換する必要があります。
Different address:port pairs for
thesame endpoint in one connection!
+------------------------+ -----------------------------------
|Host |
|192.168.1.2 |
+------------------------+ 192.168.1.2:11223 <--- Host sees
this pair
+------------------------+ 192.168.1.2:11223 <--- Router 1 sees
|Router 1 | req from this
|internal 192.168.1.1/24 |
|external 10.0.0.8 |
+------------------------+ 10.0.0.8:22334 <------ Router 1 sends
req from this
+------------------------+ 10.0.0.8:22334 <------ Router 2 sees
|Router 2 | req from this
|internal 10.0.0.1/24 |
|external 203.0.113.5 |
+------------------------+ 203.0.113.5:12345 <--- Router 2 sends
req from this
+------------------------+ 203.0.113.5:12345 <--- Public internet
|Public internet | sees this pair
+------------------------+
CGN (「ISP NAT」) もほぼ同じように動作します。唯一の違いは、ビジネス ネットワークと衝突する可能性があるため、内部ホストに RFC1918 プライベート アドレスを与えないことです。代わりに、範囲100.64.0.0/10
(RFC6598) のアドレスが、上の図の「ルーター 2」によって配布されます。顧客自身のルーターから見ると、その「パブリック」アドレスはその範囲からのものですが、実際にはパブリック インターネット上では到達できません。
答え2
私の知る限り、NAT は次のように動作します。コンピュータ A と B は内部 IP として internal1 と internal2 を取得します。次に、NAT はそれらに同じ IP のポートを割り当て、公開側では someIP:1 と someIP:2 の背後に位置するようにします。
ポート番号ないホストアドレスの一部です。NATが使用されているかどうかに関係なく、IP層にはポートというものは存在しません。ホストのIPアドレスは常にただアドレスには「第2レベル」のポートはなく、「第1レベル」のポートもありません。[1]
代わりに、ポートは個々のTCP/UDPに属します。繋がりホストが IP に加えて作成するポートです (厳密に言えば、これらは各パケットの一部であり、同じ接続内のすべてのパケットは同じポートを使用します)。
住所が と書かれている場合12.34.56.78:123
、その内容はないホストのIPアドレス - これはポート123のTCP接続エンドポイントですでIP アドレスがまだ単に であるホスト12.34.56.78
。
これらのポート追加されないNAT によって – これらは常に存在していました。すべての TCP または UDP パケットには、正確に 2 つのポート (1 つの「送信元」ポートと 1 つの「宛先」ポート) があります。NAT を実行するルーターは、それらを異なる値に変換するだけです。NAT のレベルがいくつあっても、そのパケットには 2 つのポートが存在します。
[1]つまり、1 つのパブリック アドレスの背後に NAT された 2 つのホストがある場合、IP 層では実際には区別がつきません。外部から IP パケットが送信されたときに、someIP
どのホストに送るかを指定する方法がなく、NAT ルーターは TCP 層からこれを推測する必要があります。そのため、着信接続を受信するには、「ポート転送」ルールを設定する必要があります。