Network Address Translation (NAT) ist in Rechnernetzen der Sammelbegriff für Verfahren, die automatisiert Adressinformationen in Datenpaketen durch andere ersetzen, um verschiedene Netze zu verbinden. Daher kommen sie typischerweise auf Routern zum Einsatz.
NAT-Typen
NAT wird in Source-NAT (SNAT) und Destination-NAT (DNAT) unterteilt. Während beim Source-NAT die Adresse des Computers umgeschrieben wird, der die Verbindung aufbaut, wird beim Destination-NAT die Adresse des angesprochenen Computers verändert.
Verwendung von NAT
Verwendung von Source-NAT
Große Verbreitung fand Source-NAT durch die Knappheit öffentlicher IPv4-Adressen und die Tendenz private Subnetze mit dem Internet zu verbinden. Die einfachste Lösung dieses Problems war oft die durch NAT mögliche Verwendung mehrerer privater IP-Adressen mit nur einer öffentlichen IP-Adresse, wobei die Abbildung auf diese aufgrund der 16 Bit breiten Portnummern auf etwa 65.000 Sitzungen (Port-Address-Translation Einträge) beschränkt bleibt (siehe Nachteile).
Gerade in privaten oder möglichst preisgünstig ausgeführten Netzinstallationen wird Source-NAT als eine Art Sicherheitsmerkmal und zur Trennung von internen und externen Netzen eingesetzt. Während eine NAT-Installation oberflächlich tatsächlich diese gewünschte Wirkung erzielt, kann sie weder Sicherheitsinfrastruktur noch wirksame Maßnahmen zur Trennung von Netzen ersetzen. So wird die Source-NAT-Funktion eines Routers im professionellen Bereich oft durch ein zusätzlich betriebenes Application Layer Gateway (ALG) unterstützt.
Verwendung von Destination-NAT
Destination-NAT wird beispielsweise verwendet, um mehrere, unterschiedliche Serverdienste, die auf verschiedenen Computern betrieben werden, unter einer einzigen IP-Adresse anzubieten.
Auch wird es manchmal bei Hot Spots benutzt, um Zugriffe auf Webseiten vor der Anmeldung auf den Rechner umzuleiten, der die Anmeldung anbietet.
Funktionsweise
NAT-Router, NAT-Session und NAT-Table
Ein System mit NAT-Funktion ist zustandsbehaftet und wird auch als NAT-Router bezeichnet. Für jede Verbindung, die ein NAT-Router aufbaut, startet er eine NAT-Session. Die zugehörigen Verbindungsinformationen (IP-Adressen, Ports und Timeouts) speichert er in seiner NAT-Table. Anhand der gespeicherten Informationen kann der NAT-Router das jeweilige Antwort-Datenpaket dem jeweiligen Client korrekt zuordnen. Nach Ablauf einer NAT-Session wird ihr Eintrag aus der NAT-Table gelöscht. Die Anzahl der Sessions, die ein NAT-Router gleichzeitig offen halten kann, ist durch die Leistungsfähigkeit der jeweils im NAT-Router eingesetzten Hard- und Software begrenzt.
Source NAT
Bei jedem Verbindungsaufbau durch einen internen Client wird die interne Quell-IP-Adresse durch die öffentliche IP-Adresse des Routers ersetzt. Außerdem wird der Quellport des internen Clients durch einen freien Port des Routers ersetzt, der dadurch belegt wird. Diese Zuordnung wird in der NAT-Table des Routers gespeichert. Der Vorgang wird als PAT (Port and Address Translation) bezeichnet.
lokales Netz (LAN) | öffentliches Netz (WAN) | |||
Quelle | Ziel | Router ===== = =====> NAT |
Quelle | Ziel |
---|---|---|---|---|
192.168.0.2:4701 | 170.0.0.1:80 | 205.0.0.2:6787 | 170.0.0.1:80 | |
192.168.0.3:5387 | 170.0.0.1:80 | 205.0.0.2:8709 | 170.0.0.1:80 | |
192.168.0.4:1001 | 170.0.0.1:23 | 205.0.0.2:4806 | 170.0.0.1:23 |
Source-NAT und IP-Routing am Beispiel
In diesem Beispiel nutzt das private Netz die IP-Adressen 192.168.0.0/24. Zwischen diesem Netz und dem öffentlichen Internet befindet sich ein Source-NAT-Router mit der öffentlichen Adresse 205.0.0.2/32.
Allgemein ist immer dann ein Routing erforderlich, wenn Absender und Empfänger in verschiedenen Netzen liegen. Möchte eine über einen Source-NAT-Router angebundene Station ein Paket an einen Empfänger außerhalb ihres privaten Netzes senden, beispielsweise an einen Telnet-Server irgendwo entfernt im Internet, so funktioniert der Kommunikationsprozess (vereinfacht dargestellt) wie folgt: Zuerst ermittelt die Station den für das gewünschte Ziel nächstgelegenen Router (siehe Routingtabelle), das sei hier der Source-NAT-Router, dann ermittelt die Station per ARP dessen MAC-Adresse und baut ein Paket wie folgt zusammen: Es erhält als Ziel-MAC-Adresse die MAC-Adresse des Source-NAT-Routers, die Ziel-IP-Adresse des Empfängers (hier 170.0.0.1), die Ziel-Portadresse 23 für den Telnet-Server sowie die MAC- und IP-Adresse des Absenders (hier 192.168.0.4) und einen Absenderport (irgendein gerade freier Port, hier 1001) für die gerade anfragende Telnet-Sitzung sowie andere Daten. Der Source-NAT-Router empfängt und verarbeitet das Paket, weil es an seine MAC-Adresse gerichtet ist. Bei der Verarbeitung im Router wird das Paket in abgeänderter Form weitergeleitet: der Router ermittelt anhand der Empfänger-IP-Adresse den nächsten Router, ermittelt per ARP dessen MAC-Adresse und baut das Paket wie folgt um: Es erhält nun abweichend die MAC-Adresse des nächsten Routers, die Ziel-IP-Adresse des Empfängers (170.0.0.1), Ziel-Port 23 sowie die öffentliche MAC- und IP-Adresse des Source-NAT-Routers (205.0.0.2), einen gerade freien Absender-Port aus dem Reservoir des Routers (hier 4806) und die Nutzdaten, die gleich bleiben. Diese Zuordnung der ursprünglichen Absenderadresse und des Ports (192.168.0.4:1001) zum jetzt enthaltenen Adress-Tupel (205.0.0.2:4806) wird im Router solange gespeichert, bis die Telnet-Sitzung abläuft oder beendet wird. Bei NAT wird das Paket auf Schicht 3 (IP) also deutlich verändert.
Bei der Bearbeitung in nachfolgenden IP-Routern wird das Paket lediglich auf Schicht 2 verändert: Der Router ermittelt den nächsten Router, ermittelt per ARP dessen MAC-Adresse und baut das Paket wie folgt um: Es erhält nun abweichend als Ziel-MAC-Adresse die MAC-Adresse des nächsten Routers und die Absender-MAC-Adresse wird gegen die eigene ausgetauscht. Die IP-Adresse des Empfängers (170.0.0.1), Ziel-Port 23 sowie die Absender-IP-Adresse des Source-NAT-Routers (205.0.0.2), dessen Absender-Port 4806 und die Nutzdaten bleiben erhalten. Das bedeutet: Auf Schicht 3 (IP) wird das Paket hier nicht verändert. Dieser Vorgang wiederholt sich, bis ein letzter Router die Zielstation in einem direkt angeschlossenen Netz findet; dann setzt sich das Paket wie folgt zusammen: Es erhält als Absender-MAC-Adresse die des letzten Routers, als Ziel die MAC-Adresse der Zielstation, die IP-Adresse des Empfängers (= Zielstation, 170.0.0.1), Ziel-Port 23 sowie die IP-Adresse des Absender-Source-NAT-Routers (205.0.0.2), dessen Absender-Port 4806 und natürlich Nutzdaten.
Nach erfolgreicher Verarbeitung durch den Telnet-Server wird die Antwort dann wie folgt zusammengestellt: MAC-Adresse des für den Rückweg zuständigen Routers (wobei Hin- und Rückroute nicht unbedingt identisch sein müssen), die IP-Adresse des anfragenden Source-NAT-Routers (205.0.0.2), die Ziel-Portadresse 4806 sowie die MAC- und IP-Adresse des Telnet-Servers (170.0.0.1) und dessen Absenderport, sowie Antwort-Daten. Nachdem alle Router durchlaufen wurden, wird daraus schließlich im Source-NAT-Router (205.0.0.2): MAC-Adresse und IP-Adresse des anfragenden Rechners (hier 192.168.0.4), und dessen Portadresse 1001 sowie die MAC des Source-NAT-Routers und IP-Adresse des Telnet-Servers (170.0.0.1) und dessen Absenderport, sowie Antwort-Daten. Wird diese Telnet-Sitzung beendet, wird auch Port 1001 wieder freigegeben.
Destination NAT
Bei jedem Verbindungsaufbau durch den Client wird die Ziel-IP-Adresse durch die des eigentlichen Empfängers im LAN ersetzt. Außerdem wird der Zielport durch einen freien Port des Routers ersetzt, der dadurch belegt wird. Diese Zuordnung wird in der NAT-Table des Routers gespeichert.
öffentliches Netz (WAN) | lokales Netz (LAN) | |||
Quelle | Ziel | Router ===== = =====> NAT |
Quelle | Ziel |
---|---|---|---|---|
170.0.0.1:1001 | 171.4.2.1:80 | 170.0.0.1:1001 | 192.168.0.2:80 | |
170.0.0.1:1001 | 171.4.2.1:22 | 170.0.0.1:1001 | 192.168.0.3:22 | |
170.0.0.1:1001 | 171.4.2.1:81 | 170.0.0.1:1001 | 192.168.0.3:81 |
Kategorisierung
RFC 3489, der das Protokoll STUN zur Traversierung von NAT-Gateways beschreibt, ordnete diese in vier verschiedene Klassen ein, die auch außerhalb des Kontexts von STUN gerne zur Klassifizierung verwendet werden:
Diese prototypischen Grundszenarien bilden in modernen NAT-Systemen allerdings oft nur noch Anhaltspunkte zur Klassifizierung punktuellen Verhaltens der Gateways. Diese benutzen teilweise Mischformen der klassischen Ansätze zur Adressumsetzung oder wechseln dynamisch zwischen zwei oder mehreren Verhaltensmustern. RFC 3489 ist durch RFC 5389 ersetzt worden, der diese Kategorisierung nicht mehr versucht.
Vorteile
- IP-Adressen eines Netzes können vor einem anderen Netz verborgen werden. Somit kann NAT zur Verbesserung der Netzwerksicherheit eingesetzt werden.
Nachteile
- NAT wird oft nur als eine Notlösung betrachtet, um bei nicht dauerhaft verbundenen Netzinstallationen das Problem der knappen IPv4-Adressen zu umgehen.
- Das größte Problem an NAT ist, dass die saubere Zuordnung „1 Host mit eindeutiger IP-Adresse“ nicht eingehalten wird. Durch die Umschreibung von Protokoll-Headern, die einem Man-in-the-middle-Angriff ähnelt, haben so insbesondere ältere Protokolle und Verschlüsselungsverfahren auf Netzwerk- und Transportebene durch diesen Designbruch Probleme (z. B. IPsec-AH). Protokollkomplikationen durch NAT werden in RFC 3027 beschrieben.
- Ebenso leiden insbesondere Netzwerkdienste, die Out-of-Band-Signalisierung und Rückkanäle einsetzen, etwa IP-Telefonie-Protokolle, unter Komplikationen durch NAT-Gateways.
- NAT-Gateways heben die strenge Trennung des OSI-Schichtenmodells auf.
- Ende-zu-Ende-Konnektivität wird gebrochen, da die NAT-Übergabestelle das Ziel eingehender Verbindungen nicht automatisch ermitteln kann.
NAT-Traversal
NAT-Traversal (z. T. als NAT-Durchdringung übersetzt) bezeichnet nich den Techniken zum Aufbau und Halten von Verbindungen über NAT-Übergabestellen hinweg. Network Address Translation bricht die Ende-zu-Ende-Konnektivität. Daher benötigen typischerweise Anwendungen, die von Client zu Client verbinden (zum Beispiel bei Peer-to-Peer- und IP-Telefonie-Anwendungen oder Netzwerkspiele) NAT-Durchdringungstechniken. Es existieren mehrere Techniken, von denen keine universell anwendbar ist, da das Verhalten von NAT nicht standardisiert ist. Viele Techniken benötigen die Hilfe eines für beide Parteien direkt öffentlich zugänglichen Servers. Manche Methoden nutzen einen solchen Server nur für den Verbindungsaufbau, andere leiten allen Verkehr der Verbindung über diesen Hilfs-Server, was die Kosten der Datenübertragung sowie die Latenz erhöht und somit für Echtzeit-Anwendungen nachteilig ist.
Die meisten verhaltensbasierten Methoden umgehen Unternehmens-Sicherheitsrichtlinien. Daher werden in Unternehmensnetzwerken Techniken bevorzugt, die sich ausdrücklich kooperativ mit NAT und Firewalls integrieren und administrative Eingriffe an der NAT-Übergabestelle erlauben. Deshalb sind die vielversprechendsten Standards Realm-Specific IP[1] und Middlebox Communication (MIDCOM).[2]
SOCKS, das älteste Protokoll zur NAT-Durchdringung, ist weiterhin weit verbreitet. In der Heimanwendung oder bei kleinen Büros wird von den meisten NAT-Übergabestellen Universal Plug and Play (UPnP) unterstützt. NAT-T ist gebräuchlich bei IPsec-VPN-Clients, um Encapsulating-Security-Payload-Pakete durch die NAT zu bringen.
Ein Beispiel für ein NAT-Traversal-Protokoll ist STUN.
Siehe auch
- Network Address Translation in Firewalls
- Portweiterleitung
- Windows-Internetverbindungsfreigabe
- NAT64, Übersetzung zwischen zwei Protokollfamilien
Quellen
Spezifikationen
- RFC 2663 IP Network Address Translator (NAT) Terminology and Considerations (englisch)
- RFC 2766 Network Address Translation - Protocol Translation (NAT-PT) (englisch)
- RFC 3022 Traditional IP Network Address Translator (Traditional NAT) (englisch)
Weblinks
- Tunnel durch NAT-Gateways ohne Notwendigkeit zur Anpassung der beteiligten Router (englisch)
- Einrichtung NAT unter Windows 2003 (englisch)
- Skriptum zu NAT und Masquerading
- NAT-Traversal Test
- Peer-to-Peer Communication Across Network Address Translators (englisch)