Wie funktioniert NAT / PortForwarding / TCP / IP?

11

Ich habe kürzlich einen Artikel mit dem Titel Funktionsweise von NAT gelesen . Einige Dinge bleiben mir noch unklar. Ich wäre dankbar, wenn jemand erklären könnte.

Im Folgenden finden Sie den verwirrendsten Teil des Artikels zu DynamicNAT:

Ein Computer in der Stub-Domäne versucht, eine Verbindung zu einem Computer außerhalb des Netzwerks herzustellen, z. B. einem Webserver.

Der Router empfängt das Paket vom Computer in der Stub-Domäne. Der Router speichert die nicht routbare IP-Adresse des Computers in einer Adressübersetzungstabelle. Der Router ersetzt die nicht routbare IP-Adresse des sendenden Computers durch die erste verfügbare IP-Adresse außerhalb des Bereichs eindeutiger IP-Adressen. Die Übersetzungstabelle enthält jetzt eine Zuordnung der nicht routbaren IP-Adresse des Computers, die mit der einer der eindeutigen IP-Adressen übereinstimmt.

Wenn ein Paket vom Zielcomputer zurückkommt, überprüft der Router die Zieladresse auf dem Paket. Anschließend wird in der Adressübersetzungstabelle geprüft, zu welchem ​​Computer in der Stubdomäne das Paket gehört.

1) Woher weiß NAT, dass das Paket zum Zielcomputer "zurückkommt"?

2) Was ist, wenn andere Computer im LAN mit demselben Server verbunden sind? Woher weiß der NAT, welches Paket wo "zurückkommen" soll?

3) Ermöglicht die Änderung des Paket-Headers die Durchführung eines Internetangriffs, bei dem die "Quell-IP" durch die IP des Opfers ersetzt wird und der antwortende Server das Opfer mit unerwünschten Paketen überflutet?

Ich denke, mehrere Angreifer müssten beteiligt sein ...

4) Entspricht StaticNAT der PortForwarding aller Ports?

user2449761
quelle

Antworten:

10

Es gibt ein allgemeines Missverständnis zwischen NAT (Network Address Translation) und PAT (Port Address Translation), das wir hauptsächlich in unseren Heimroutern verwenden.

NAT
Nehmen wir an, wir haben ein Netzwerk mit der folgenden Topologie:

Private_Network <-------> Router <-------> The_Internet

Die Schnittstelle des Routers , der mit dem Private_Network verbunden ist, hat eine private IP-Adresse , dh eine, die in The_Internet nicht eindeutig ist . Auf der anderen Seite, im Fall von NAT , Router verfügt über mehrere Schnittstellen verbunden The_Internet . Jede Schnittstelle hat eine eindeutige IP-Adresse in The_Internet . Nehmen wir nun an, dass sich Host_A und Host_B im Private_Network befinden und beide gleichzeitig auf Website_X in The_Internet zugreifen möchten . Die IPs und die Ports von Host_ADas Paket lautet:

Quell-IP: Host_As privater IP- Quellport
: Ein Port auf Host_A
Ziel-IP: Website_Xs öffentlicher / eindeutiger IP- Zielport
: Ein Port, an dem der Server von Website_X empfangsbereit ist

und auf die gleiche Weise für ein Paket, das von Host_B kommt .
Wenn die Quell-IP unverändert bleibt , antwortet Website_X auf eine IP-Adresse, die privat, dh nicht eindeutig ist, und daher kann das Paket niemals den Weg zurück finden. Um dieses Problem zu lösen, prüft der Router , ob eine seiner mit The_Internet verbundenen eindeutigen IP-Adressen nicht verwendet wird. In diesem Fall wird die folgende Zuordnung vorgenommen:

Host_A ‚s private IP ======= Router's_unique_IP_K

und jetzt hat das Paket, das von Host_A gestartet wurde und zu Website_X geht und jetzt die Schnittstelle des mit The_Internet verbundenen Routers verlässt, die folgende Form:

Quell-IP: Router's_unique_IP_K
Quell-Port: Ein Port auf Host_A
Ziel-IP: Der öffentliche / eindeutige IP-
Ziel-Port von Website_X : Ein Port, an dem der Server von Website_X empfangsbereit ist

Somit können Sie verstehen, dass es eine Eins-zu-Eins-Zuordnung von privaten IPs zu öffentlichen IPs gibt. Wenn ein Paket von Website_X zum Router gelangt , wird diese Zuordnung überprüft und die Ziel-IP-Adresse wird wieder in die private Adresse geändert und erfolgreich an den richtigen Host übermittelt .
Wie Sie sehen können, ist diese Methode recht einfach, hat jedoch einen großen Nachteil: Für jeden privaten Host muss eine eindeutige IP-Adresse reserviert sein, was teuer ist. Daher wählen wir weniger eindeutige IP-Adressen als Hosts im privaten Netzwerk. Wenn daher alle privaten Hosts gleichzeitig versuchen, auf The_Internet zuzugreifen , entspricht nur eine Teilmenge davon der Anzahl der verfügbaren öffentlichen IP-Adressen, die der Router hathat, wird Zugriff haben und der Rest wird verweigert.
Um dem entgegenzuwirken, haben wir PAT erstellt .

PAT
PAT wird von der überwiegenden Mehrheit unserer Heimrouter verwendet. Die grundlegende Einschränkung besteht darin, dass der Router über eine einzige eindeutige IP-Adresse verfügt, mit der er eine Verbindung zu The_Internet herstellt . Wir möchten jedoch weiterhin zulassen, dass mehrere Hosts aus dem privaten Netzwerk gleichzeitig auf The_Internet zugreifen .
Die Art und Weise, wie wir dies tun, ist "ähnlich" wie NAT , mit einem wesentlichen Unterschied: Anstatt dass der Router einen Pool von IP-Adressen enthält, enthält er einen Pool von Portnummern. Genauer gesagt, ein Paket, das von Host_A im Private_Network , das für Website_X in bestimmt ist, am Router ankommtThe_Internet hat das folgende Format:

Quell-IP: Host_As privater IP- Quellport
: Ein Port auf Host_A
Ziel-IP: Website_Xs öffentlicher / eindeutiger IP- Zielport
: Ein Port, an dem der Server von Website_X empfangsbereit ist

Jetzt erledigt der Router zwei Aufgaben:

  1. Dadurch wird die Quell-IP in die eindeutige öffentliche IP UND des Routers geändert
  2. Der Quellport wird in einen Port aus einem Pool geändert, den der Router verwaltet und der noch nicht verwendet wird, z. B. Port_Z

und jetzt hat das Paket, das von Host_A gestartet wurde und zu Website_X geht und jetzt die Schnittstelle des mit The_Internet verbundenen Routers verlässt, die folgende Form:

Quell-IP: Router's_unique_IP_K
Quell-Port: Port_Z
Ziel-IP: Website_Xs öffentliche / eindeutige IP
Ziel-Port: Ein Port, an dem der Server von Website_X empfangsbereit ist

und der Router behält die folgende Zuordnung bei:

Host_A ‚s private IP und ein Port auf Host_A ======= Port_Z

Warum funktioniert das?
Wenn nun ein Paket zurückkommt, überprüft der Router einfach die Zielportnummer und ändert die Ziel-IP-Adresse und die Zielportnummer gemäß der oben genannten Zuordnung, und das Paket wird erfolgreich zugestellt.

Was ist, wenn ich mehrere Anwendungen auf demselben Host ausführe?
Unterschiedliche Anwendungen haben per Definition unterschiedliche Ports, sodass sie einem anderen Port als dem Router zugeordnet werden .

Was ist, wenn mehrere Hosts gleichzeitig versuchen, auf The_Internet zuzugreifen, und alle dieselbe Anwendung verwenden?
Verschiedene Hosts haben per Definition unterschiedliche private IP-Adressen, sodass sie einem anderen Port als dem Router zugeordnet werden .

PAT balanciert gefährlich in einem grauen Raum der Kreuzschicht. Portnummern sind Teil des Transportprotokolls, während Router bis zum Internetprotokoll arbeiten dürfen. Technisch gesehen ist dies also etwas, was von den Protokollen nicht zugelassen wird. Daher gibt es zumindest theoretisch potenzielle Gefahren: Der Portpool ist begrenzt. Wenn mein privates Netzwerk aus 1000 Hosts besteht und auf jedem Port_pool / 10-Anwendungen ausgeführt werden, gehen der Zuordnungstabelle auf dem Router die verfügbaren Einträge aus und der Zugriff auf Anwendungen wird verweigert.

Diese Antwort hat meine beabsichtigte Länge bei weitem überschritten, aber ich hoffe, es war hilfreich.

George
quelle
2
Ein paar Anmerkungen: Zunächst verwenden Sie den Begriff "NAT", um auf das zu verweisen, was die RFCs als "Basic NAT" bezeichnen, und "PAT", um auf das zu verweisen, was die RFCs als "NAPT" bezeichnen. Die RFCs verwenden im Allgemeinen "NAT" als Überbegriff für "Basic NAT" und "NAPT". Zweitens muss sogar "Basic NAT" den TCP / UDP-Header ändern, da der TCP / UDP-Header eine Prüfsumme enthält, die die IP-Adressen abdeckt.
Peter Green
@ PeterGreen, aber ist der Kern der Antwort korrekt?
lpydawa
6

Der Router weiß, wohin Pakete gehören, da er sich The router saves ... an address translation table.merkt, welche Adressübersetzungen von innen nach außen vorgenommen wurden. Daher entspricht eine interne Adresse einer externen Adresse, und das Ziel außerhalb des Internets ist irrelevant. Dies ignoriert natürlich die Firewall, die in praktisch jedem NAT-Router vorhanden ist und die vollständige Verbindungen verfolgt:

(inside) src:ip+port,dst:ip+port <-> (outside) src:ip+port,dst:ip+port

NAT kann eine beliebige Kombination aus IP und / oder Port ändern.

# 3 ist ein ganz anderes Thema: Spoofing

# 4 "Static NAT" oder "1-zu-1" ist eine Nur-Adresse-Karte. Port (und sogar Protokoll: tcp, udp, gre usw.) ist also irrelevant.

Ricky Beam
quelle
2) Was ist, wenn andere Computer im LAN mit demselben Server verbunden sind? Woher weiß der NAT, welches Paket wo "zurückkommen" soll?
user2449761
1 & 2 sind die gleiche Antwort: weil es Verbindungen / Übersetzungen verfolgt. Zwei interne Hosts werden nicht derselben externen Adresse zugeordnet. Jedes Paket, das an einer zugeordneten externen Adresse ankommt, hat automatisch nur ein internes Ziel. Wenn Sie nur eine externe (öffentliche) Adresse haben, dann ist es nicht "NAT", sondern PAT (Port-Übersetzung)
Ricky Beam