|
|
Zeile 58: |
Zeile 58: |
|
| |
|
| = TMP = | | = TMP = |
| == Beschreibung ==
| |
| * In Rechnernetzen der Sammelbegriff bei Änderungen von Adressen im IP-Header von IP-Paketen (Layer-3 des OSI-Modells)
| |
| * NAT (genauer SNAT) ermöglicht die gleichzeitige Verwendung einer öffentlichen Adresse durch mehrere Hosts.
| |
| * Üblicherweise übernimmt der Router im Netzwerk die SNAT, der die Verbindung zum Internet herstellt.
| |
| * Oft ist dieser Router das Default-Gateway eines Hosts.
| |
|
| |
| === NAT-Typen ===
| |
| * NAT wird in Source-NAT (SNAT; dt.: „''Quellen-NAT''“) und Destination-NAT(DNAT; dt.: „''Ziel-NAT''“) unterschieden.
| |
| * Beim Source-NAT wird die Adresse des verbindungsaufbauenden Computers (Quelle) umgeschrieben.
| |
| * Beim Destination-NAT wird die Adresse des angesprochenen Computers (Ziel) umgeschrieben.
| |
|
| |
| == Verwendung von NAT ==
| |
| === Verwendung von Source-NAT ===
| |
| * Source-NAT findet Anwendung aufgrund der Knappheit öffentlicher IPv4-Adressen.
| |
| * Eine spezielle Form der SNAT wird auch '''Masquerading''' bzw. '''Masquerade'''[https://de.wikipedia.org/wiki/Port_Address_Translation] oder
| |
| * '''Port and Address Translation''' (PAT) oder '''Network Address Port Translation''' (NAPT) genannt.
| |
| * Wird vor allem bei Einwahlverbindungen [http://www.hh.schule.de/ak/nt/einwahlv.htm] genutzt.
| |
| * Beim Maskieren wird automatisch durch einen Algorithmus die Absender-Adresse des Pakets in die IP-Adresse des Interfaces geändert, auf dem das Paket den Router verlässt.
| |
| * Beim SNAT muss die (neue) Quell-Adresse explizit angegeben werden.
| |
| * In privaten oder möglichst preisgünstigen Netzinstallationen wird Source-NAT als eine Art Sicherheitsmerkmal und zur Trennung von internen und externen Netzen eingesetzt
| |
| * Durch das Maskieren der Quell-IP-Adresse können die internen Rechner nicht mehr von außen direkt angesprochen werden.
| |
|
| |
| === Verwendung von Destination-NAT ===
| |
| * Destination-NAT wird verwendet, um das Ziel eines IP-Pakets zu ändern.
| |
| * Meist findet DNAT Verwendung beim Ändern der öffentlichen IP-Adresse eines Internet-Anschlusses in die private IP-Adresse eines Servers im privaten Subnetz.
| |
| * Diese Methode ist als „Port-Forwarding“ in Verbindung mit UDP / TCP - Verbindungen bekannt.
| |
| * DNAT kann daher auch dazu genutzt werden, um mehrere, unterschiedliche Serverdienste, die auf verschiedenen Computern betrieben werden, unter einer einzigen (öffentlichen) IP-Adresse anzubieten(s. Abgrenzung von DNAT auch NAT-Traversal bzw. NAT-T).
| |
|
| |
| == Funktionsweise ==
| |
| === NAT-Router, NAT-Session und NAT-Table ===
| |
| [[Datei:SNAT.png|frame|Grundfunktion]]
| |
| * Ein moderner Router mit NAT-Funktion ist zustandsbehaftet (''stateful'').
| |
| * Beim ''stateful firewalling'' werden für jede seitens eines Clients angefragte Verbindung die zugehörigen Verbindungsinformationen (unter anderem IP-Adressen, Protokoll / Ports und Timeouts) in einer Session-Table gespeichert.
| |
| * Anhand der gespeicherten Informationen kann der NAT-Router dann das jeweilige Antwort-Datenpaket dem richtigen Client wieder zuordnen.
| |
| * Nach Ablauf einer Session wird ihr Eintrag aus der Session-Table gelöscht.
| |
| * Die Anzahl der Sessions, die ein NAT-Router gleichzeitig offen halten kann, ist durch seinen Arbeitsspeicher begrenzt.
| |
| * 10.000 Sessions belegen etwa 3 MB Speicherplatz
| |
|
| |
| === Source NAT (SNAT) ===
| |
| * Bei jedem Verbindungsaufbau durch einen internen Client wird die interne Quell-IP-Adresse durch die öffentliche IP-Adresse des Routers ersetzt.
| |
| * Ist der Ursprungsport belegt wird der Quellport des internen Clients durch einen freien Port des Routers ersetzt.
| |
| * Diese Zuordnung wird in der Session-Table (NAT-Table) des Routers gespeichert.
| |
| * Anhand der gespeicherten Informationen kann der NAT-Router dann das jeweilige Antwort-Datenpaket dem richtigen Client wieder zuordnen.
| |
| * Der Vorgang wird als Port Address Translation (PAT) bezeichnet.
| |
|
| |
| {| cellpadding="4" cellspacing="0" style="margin: 1em 1em 1em 0; background: #F9F9F9; border-collapse: collapse; font-size: 95%;"
| |
| |align="center" colspan="2" style="background: white;"|lokales Netz (Local Area Network/LAN)
| |
| |style="background: white;"|
| |
| |align="center" colspan="2" style="background: white;"|öffentliches Netz (Wide Area Network/WAN)
| |
| |-
| |
| ! width="20%" align="center" style="border:1px #AAAAAA solid;"|Quelle
| |
| ! width="20%" align="center" style="border:1px #AAAAAA solid;"|Ziel
| |
| ! rowspan="4" align="center" style="background:white;"|Router<br />===== = =====><br />NAT
| |
| ! width="20%" align="center" style="border:1px #AAAAAA solid;"|Quelle
| |
| ! width="20%" align="center" style="border:1px #AAAAAA solid;"|Ziel
| |
| |-
| |
| |align="center" style="border: 1px #aaa solid;"|'''192.168.0.2:49701'''
| |
| |align="center" style="border: 1px #aaa solid;"|170.0.0.1:80
| |
| |align="center" style="border: 1px #aaa solid;"|'''205.0.0.2:49701'''
| |
| |align="center" style="border: 1px #aaa solid;"|170.0.0.1:80
| |
| |-
| |
| |align="center" style="border: 1px #aaa solid;"|'''192.168.0.3:50387'''
| |
| |align="center" style="border: 1px #aaa solid;"|170.0.0.1:80
| |
| |align="center" style="border: 1px #aaa solid;"|'''205.0.0.2:50387'''
| |
| |align="center" style="border: 1px #aaa solid;"|170.0.0.1:80
| |
| |-
| |
| |align="center" style="border: 1px #aaa solid;"|'''192.168.0.4:49152'''
| |
| |align="center" style="border: 1px #aaa solid;"|170.0.0.1:23
| |
| |align="center" style="border: 1px #aaa solid;"|'''205.0.0.2:49152'''
| |
| |align="center" style="border: 1px #aaa solid;"|170.0.0.1:23
| |
| |}
| |
|
| |
| === Beispiel Source-NAT und IP-Routing ===
| |
| * 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.
| |
| * Ein Routing ist 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 seines (privaten) Netzes senden, so funktioniert der Kommunikationsprozess (vereinfacht dargestellt) wie folgt:
| |
|
| |
| ====Ermittlungen====
| |
| * Zuerst ermittelt die Station über DNS die Ziel-IP des Servers, und über die Routing-Tabelle den für das gewünschte Ziel nächstgelegenen Router, das sei hier der ''Source-NAT-Router''.
| |
| * Dann ermittelt die Station per Address Resolution Protocol (ARP) dessen MAC-Adresse und baut ein Paket wie folgt zusammen:
| |
| **Es enthä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 für den Server.
| |
| # Die MAC- und IP-Adresse des Absenders (hier 192.168.0.4).
| |
| # Einen Absenderport (irgendeinen freien Port (high dynamic Port)) für die gerade anfragende Sitzung.
| |
| # Sowie andere (Nutz)Daten.
| |
|
| |
| ====Empfang====
| |
| * 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''.
| |
| ** Er 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
| |
| *** 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 49152) und die Nutzdaten, die gleich bleiben.
| |
|
| |
| ====Verarbeitung====
| |
| * Diese Zuordnung der ursprünglichen Absenderadresse und des Ports (192.168.0.4:49152) zum jetzt enthaltenen Adress-Tupel[https://de.ryte.com/wiki/Tupel](205.0.0.2:49152) wird im Router solange gespeichert, bis die Sitzung abläuft oder beendet wird.
| |
| ** '''Durch NAT wird das Paket auf Schicht 3 also wesentlich 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''
| |
| ** Die Absender-MAC-Adresse wird gegen die eigene ausgetauscht.
| |
| ** Die IP-Adresse des Empfängers (170.0.0.1), Ziel-Port sowie die Absender-IP-Adresse des Source-NAT-Routers (205.0.0.2), dessen Absender-Port 49152 und die Nutzdaten bleiben erhalten.
| |
| * Das bedeutet: Auf Schicht 3 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 (170.0.0.1), Ziel-Port sowie die IP-Adresse des ''Absender-Source-NAT-Routers'' (205.0.0.2), dessen Absender-Port 49152 und natürlich Nutzdaten.
| |
|
| |
| ====Abschluss====
| |
| * Nach erfolgreicher Verarbeitung durch den 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 49152 sowie die MAC- und IP-Adresse des Servers (170.0.0.1) und dessen Absenderport , sowie Antwort-Daten (Payload).
| |
| * 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 49152 sowie die MAC des Source-NAT-Routers und IP-Adresse des Servers (170.0.0.1) und dessen Absenderport, sowie Antwort-Daten.
| |
| * Wird diese Sitzung beendet, wird auch Port 49152 wieder freigegeben.
| |
|
| |
| ==== Destination NAT (DNAT) ====
| |
| * 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.
| |
|
| |
| {| cellpadding="4" cellspacing="0" style="margin: 1em 1em 1em 0; background: #F9F9F9; border-collapse: collapse; font-size: 95%;"
| |
| |align="center" colspan="2" style="background: white;"|öffentliches Netz (WAN)
| |
| |style="background: white;"|
| |
| |align="center" colspan="2" style="background: white;"|lokales Netz (LAN)
| |
| |-
| |
| ! width="20%" align="center" style="border:1px #AAAAAA solid;"|Quelle
| |
| ! width="20%" align="center" style="border:1px #AAAAAA solid;"|Ziel
| |
| ! rowspan="4" align="center" style="background:white;"| Router<br />===== = =====><br />NAT
| |
| ! width="20%" align="center" style="border:1px #AAAAAA solid;"|Quelle
| |
| ! width="20%" align="center" style="border:1px #AAAAAA solid;"|Ziel
| |
| |-
| |
| |align="center" style="border: 1px #aaa solid;"|170.0.0.1:1001
| |
| |align="center" style="border: 1px #aaa solid;"|'''171.4.2.1:80'''
| |
| |align="center" style="border: 1px #aaa solid;"|170.0.0.1:1001
| |
| |align="center" style="border: 1px #aaa solid;"|'''192.168.0.2:80'''
| |
| |-
| |
| |align="center" style="border: 1px #aaa solid;"|170.0.0.1:1001
| |
| |align="center" style="border: 1px #aaa solid;"|'''171.4.2.1:22'''
| |
| |align="center" style="border: 1px #aaa solid;"|170.0.0.1:1001
| |
| |align="center" style="border: 1px #aaa solid;"|'''192.168.0.3:22'''
| |
| |-
| |
| |align="center" style="border: 1px #aaa solid;"|170.0.0.1:1001
| |
| |align="center" style="border: 1px #aaa solid;"|'''171.4.2.1:81'''
| |
| |align="center" style="border: 1px #aaa solid;"|170.0.0.1:1001
| |
| |align="center" style="border: 1px #aaa solid;"|'''192.168.0.3:81'''
| |
| |}
| |
|
| |
| == Kategorisierung ==
| |
| RFC 3489, der das Protokoll '''STUN''' zur Traversierung von NAT-Gateways beschreibt, ordnet diese in vier verschiedene Klassen ein:
| |
|
| |
| ===Full Cone NAT ===
| |
| [[Datei:Full Cone NAT.svg|500px]]
| |
| * Im ''Full Cone NAT''-Szenario setzt ein Gateway interne Adressen und Ports nach einem statischen Muster in eine externe Adresse und deren Ports um.
| |
| * Externe Hosts bauen über die externen Adressen des NAT-Gateways Verbindungen zu internen Hosts auf.
| |
| * Full Cone NAT ist auch unter der Bezeichnung '''EnS port forwarding''' bekannt.
| |
|
| |
| ===Restricted Cone NAT===
| |
| [[Datei:Restricted Cone NAT.svg|500px]]
| |
| *Im ''Restricted Cone NAT''-Szenario erlaubt das Gateway die Kontaktaufnahme eines externen mit einem internen Host.
| |
| * Dem Verbindungsversuch muss eine Kontaktaufnahme des internen Hosts mit dem externen Host vorausgehen.
| |
| * Es wird dabei der gleiche Zielport verwendet.
| |
|
| |
| === Port Restricted Cone NAT ===
| |
| [[Datei:Port Restricted Cone NAT.svg|500px]]
| |
| * Im ''Port Restricted Cone NAT''-Szenario erlaubt das Gateway die Kontaktaufnahme eines externen mit einem internen Host.
| |
| * Dem Verbindungsversuch muss eine Kontaktaufnahme des internen Hosts mit dem externen Host vorausgehen.
| |
| * Es wird dabei der gleiche Zielport und der gleiche Quellport verwendet.
| |
|
| |
| === Symmetric-NAT ===
| |
| [[Datei:Symmetric NAT.svg|500px]]
| |
| * Im ''Symmetric-NAT''-Szenario wird jede einzelne Verbindung mit einem unterschiedlichen Quellport ausgeführt.
| |
| * Die Beschränkungen sind wie bei ''Restricted Cone NAT''-Szenario.
| |
| * Jeder Verbindung wird ein eigener Quellport zugewiesen.
| |
| * Eine Initiierung von Verbindungen durch externe Hosts nach Intern ist nicht möglich.
| |
|
| |
| Diese prototypischen Grundszenarien bilden in modernen NAT-Systemen allerdings oft nur Anhaltspunkte zur Klassifizierung punktuellen Verhaltens der Gateways.
| |
| * Diese benutzen teilweise Mischformen der klassischen Ansätze zur Adressumsetzung.
| |
| * Oder sie wechseln dynamisch zwischen zwei oder mehreren Verhaltensmustern.
| |
| * RFC 3489 ist durch RFC 5389 ersetzt worden, der diese Kategorisierung nicht mehr versucht.
| |
|
| |
| == Vorteile ==
| |
| * NAT hilft die Verknappung der IPv4 Adressen zu entschleunigen.
| |
| * Dies geschieht durch die Ersetzung mehrerer Adressen für mehrere Endsysteme durch eine einzige IP-Adresse.
| |
| * IP-Adressen eines Netzes können vor einem anderen Netz verborgen werden.
| |
| * Somit kann NAT zur Verbesserung der Privatsphäre eingesetzt werden.
| |
| * Dieselben IP-Adressbereiche können von mehreren abgeschlossenen privaten Netzwerken verwendet werden.
| |
| * Es kommt zu keinen Adresskollisionen, da nach außen nur die IP-Adresse des NAT-Routers sichtbar ist.
| |
|
| |
| == Nachteile ==
| |
| * Ein Problem an NAT ist, dass die saubere Zuordnung „1 Host mit eindeutiger IP-Adresse“ nicht eingehalten wird.
| |
| * Durch das Umschreiben von Protoko
| |
| * Ein Problem an NAT ist, dass die sall-Headern, was einem Man-in-the-middle-Angriff (MITM-Angriff[https://de.wikipedia.org/wiki/Man-in-the-Middle-Angriff#]) ähnelt, haben insbesondere ältere Protokolle und Verschlüsselungsverfahren auf Netzwerk- und Transportebene durch diesen Designbruch Probleme.
| |
| * Ebenso leiden insbesondere Netzwerkdienste, die Out-of-Band-Signalisierung (Telekommunikationssignalisierung) und Rückkanäle einsetzen, etwa IP-Telefonie-Protokolle, unter Komplikationen durch NAT-Gateways.
| |
| * Das Ende-zu-Ende Prinzip (Direktverbindung) wird verletzt, indem der NAT-Router das IP-Paket bzw. TCP-Segment verändert, ohne dass er selbst der verschickende Host ist.
| |
|
| |
| == NAT-Traversal ==
| |
| * '''IPsec''' mit '''NAT-Traversal''', oft nur als '''NAT-Traversal''' oder '''NAT-T''' bezeichnet, ist ein Verfahren zum Beheben von Problemen mit IPsec und Network Address Translation (NAT)[https://www.ip-insider.de/was-ist-nat-traversal-nat-t-a-921138/].
| |
| * '''NAT-T''' findet Gebrauch bei IPsec-VPN, wenn IPsec (Encapsulating Security Payload) ESP-Pakete an Internet-Anschlüssen mit NATend Routern nutzt.
| |
| * Dabei werden die ESP-Pakete in UDP/4500 Pakete gepackt.
| |
| * ''Network Address Translation'' bricht das Gebot der Ende-zu-Ende-Konnektivität.
| |
|
| |
| ====Techniken====
| |
| * Anwendungen, die sich typischerweise von Host zu Host verbinden (z. B. bei Peer-to-Peer- und IP-Telefonie-Anwendungen oder VPN-Verbindungen) benötigen NAT-Durchdringungstechniken.
| |
| * '''Es gibt keine universell anwendbarenTechniken'''
| |
| * 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.
| |
| * Die meisten Methoden umgehen damit oft Unternehmens-Sicherheitsrichtlinien.
| |
| * Deswegen werden in Unternehmensnetzwerken Techniken bevorzugt, die sich ausdrücklich kooperativ mit NAT und Firewalls verhalten.
| |
| * Sie müssen administrative Eingriffe an der NAT-Übergabestelle erlauben.
| |
|
| |
| ===Protokolle===
| |
| *'''SOCKS''', das älteste Protokoll zur NAT-Durchdringung, ist weit verbreitet, findet aber wenig Anwendung.
| |
| * Bei SOCKS baut der Client eine Verbindung zum SOCKS-Gateway auf (dieser ist meistens direkt mit dem Internet verbunden).
| |
| * Die Kommunikation wirkt für den Kommunikationspartner so, als würde sie direkt vom SOCKS-Gateway stammen.
| |
| * Bei Heimanwendungen wird '''Universal Plug and Play''' (UPnP) genutzt, was eine dynamische Konfiguration eines port-forwardings durch den Client selbst ermöglicht.
| |
| * Einige Router unterstützen auch '''ESP-pass-through'''[https://de.wikipedia.org/wiki/IPsec#Encapsulating_Security_Payload_(ESP)].
| |
| * Dabei werden die ESP-Pakete direkt an das VPN-Gateway durchgereicht und auf NAT-T wird verzichtet.
| |
| * Ein weiteres Beispiel für ein NAT-Traversal-Protokoll ist '''STUN'''[https://de.wikipedia.org/wiki/Session_Traversal_Utilities_for_NAT], das eine hohe Bedeutung bei VoIP hat.
| |
|
| |
|
| ==Links== | | ==Links== |