Ich verwende einen Modem-Router und befinde mich in bestimmten Fällen auch hinter einem ISP-NAT. Wie funktioniert ein NAT (das NAT des Routers) hinter einem NAT (dem NAT des ISPs)?
Soweit ich weiß, funktioniert ein NAT folgendermaßen: Die Computer A und B erhalten interne IPs internal1
und internal2
. Dann weist ihnen das NAT Ports mit derselben IP zu, so dass sie sich in der Öffentlichkeit hinter someIP:1
und befinden someIP:2
.
Wenn dies jedoch der Router tut und der ISP es anschließend erneut tut, hätten die IPs die Form someIP:1:100
, someIP:2:101
was jedoch unmöglich ist, da Ports keine Ports der zweiten Ebene haben.
Wie funktioniert das?
Antwort1
Versuchen wir es mit einem einfachen Beispiel.
In einem „normalen“ NAT-Heimnetzwerk 192.168.1.2:11223
wird es dem „öffentlichen“ Adress-Port-Paar zugeordnet 203.0.113.5:22334
. Der endgültige Zielhost denkt also, er habe ein Paket von diesem empfangen 203.0.113.5:22334
und weiß nichts von dem „privaten“ Netzwerk dahinter.
Erweitern wir das jetzt zu einem Doppel-NAT-Netzwerk mit zwei NAT-Ebenen.
Auf dem Router, der dem Host am nächsten ist, 192.168.1.2:11223
wird es dem „öffentlichen“ Adress-Port-Paar zugeordnet 10.0.0.8:22334
. 10.0.0.8
Es ist immer noch eine private Adresse, nur in einem anderen Netzwerk. Für diesen Router ist seine Aufgabe erledigt.
Auf dem nächsten Router, der als Gateway für das LAN dient, in dem sich der erste Router befindet, 10.0.0.8:22334
wird ein anderes Adresse:Port-Paar auf seiner eigenen öffentlichen Schnittstelle zugeordnet 203.0.113.5:12345
.
Der endgültige Zielhost glaubt, dass er ein Paket von erhalten hat 203.0.113.5:12345
. Er und das öffentliche Internet als Ganzes haben keine Kenntnis von den hier beteiligten 10.0.0.0/8
oder 192.168.0.0/16
Subnetzen. Er sendet eine Antwort an diese Adresse zurück, die von jedem Router nacheinander zurückübersetzt werden muss.
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“) funktioniert ganz ähnlich. Der einzige Unterschied besteht darin, dass es seinen internen Hosts keine private RFC1918-Adresse zuweist, da dies zu Konflikten mit Unternehmensnetzwerken führen kann. Stattdessen 100.64.0.0/10
wird von „Router 2“ im obigen Diagramm eine Adresse aus dem Bereich (RFC6598) verteilt. Soweit der eigene Router des Kunden sieht, stammt seine „öffentliche“ Adresse aus diesem Bereich – ist aber im öffentlichen Internet nicht erreichbar!
Antwort2
Soweit ich weiß, funktioniert ein NAT folgendermaßen: Die Computer A und B erhalten die internen IP-Adressen internal1 und internal2. Dann weist ihnen das NAT Ports mit derselben IP-Adresse zu, sodass sie für die Öffentlichkeit hinter someIP:1 und someIP:2 liegen.
Anzahl Anschlüssesind nichtTeil der Hostadresse – es gibt keine Ports auf der IP-Ebene, egal ob NAT verwendet wird oder nicht. Die IP-Adresse eines Hosts ist immerNurdie Adresse; es hat keine Ports der "zweiten Ebene" und es hat auch keine Ports der "ersten Ebene". [1]
Stattdessen gehören die Ports zu jedem einzelnen TCP/UDPVerbindungdie der Host zusätzlich zur IP-Adresse erstellt. (Genau genommen sind sie Teil jedes Pakets und alle Pakete in derselben Verbindung verwenden dieselben Ports.)
Wenn Sie also eine Adresse sehen, die als geschrieben ist 12.34.56.78:123
, ist das Ganzenichtdie IP-Adresse des Hosts – das ist ein TCP-Verbindungsendpunkt für Port 123beiein Host, dessen IP-Adresse immer noch einfach ist 12.34.56.78
.
Diese Häfenwerden nicht hinzugefügtdurch NAT – sie waren schon immer da; jedes TCP- oder UDP-Paket hat genau zwei Ports (einen Quell-Port und einen Ziel-Port). Ein Router, der NAT durchführt, übersetzt sie lediglich in unterschiedliche Werte. Egal, wie viele NAT-Ebenen Sie haben, dieses Paket wird immer noch zwei Ports haben.
[1] Das bedeutet, dass wenn Sie zwei Hosts hinter einer einzigen öffentlichen Adresse per NAT verbunden haben, diese für die IP-Schicht tatsächlich nicht unterscheidbar sind – wenn ein IP-Paket von außen an someIP
diese gesendet wird, hat diese keine Möglichkeit anzugeben, welchen Host sie erreichen möchte; der NAT-Router muss dies aus der TCP-Schicht ableiten. Aus diesem Grund müssen Sie „Portweiterleitungs“-Regeln konfigurieren, um eingehende Verbindungen zu empfangen.