UDP-Hole-Punching ist eine gängige Technik, die in Network Address Translation (NAT)-Anwendungen eingesetzt wird, um UDP-Paketströme ( User Datagram Protocol ) aufrechtzuerhalten, die das NAT durchlaufen. NAT-Traversal- Techniken sind typischerweise für Client-zu-Client-Netzwerkanwendungen im Internet erforderlich, die Hosts in privaten Netzwerken einbeziehen , insbesondere in Peer-to-Peer- , Direct Client-to-Client (DCC)- und Voice over Internet Protocol (VoIP)-Bereitstellungen. [ 1 ]

UDP-Hole-Punching stellt eine Verbindung zwischen zwei Hosts her, die über einen oder mehrere Network Address Translators (NAT) kommunizieren. Typischerweise werden Drittanbieter-Hosts im öffentlichen Verkehrsnetz verwendet, um UDP-Portzustände zu etablieren, die für die direkte Kommunikation zwischen den kommunizierenden Hosts genutzt werden können. Sobald ein Portzustand erfolgreich etabliert wurde und die Hosts kommunizieren, kann dieser entweder durch normalen Kommunikationsverkehr oder, bei längerem Ausfall des normalen Datenverkehrs, durch Keep-Alive- Pakete aufrechterhalten werden. Diese Keep-Alive-Pakete bestehen üblicherweise aus leeren UDP-Paketen oder Paketen mit minimalem, nicht-invasivem Inhalt.

Überblick

UDP-Hole-Punching ist eine Methode zur Herstellung bidirektionaler UDP-Verbindungen zwischen Internet- Hosts in privaten Netzwerken mithilfe von Netzwerkadressübersetzern (NAT). Diese Technik ist nicht in allen Szenarien oder mit allen NAT-Typen anwendbar, da die Betriebseigenschaften von NAT nicht standardisiert sind.

Hosts in einem privaten Netzwerk, das über ein NAT mit dem Internet verbunden ist, nutzen typischerweise die Session Traversal Utilities for NAT (STUN)-Methode oder Interactive Connectivity Establishment (ICE), um die öffentliche Adresse des NAT zu ermitteln, die ihre Kommunikationspartner benötigen. Dabei wird ein anderer Host im öffentlichen Netzwerk verwendet, um Port-Mapping und andere UDP-Port-Zustände einzurichten, die für die direkte Kommunikation zwischen den Anwendungshosts als gültig angenommen werden. Da der UDP-Zustand üblicherweise nach kurzer Zeit im Bereich von Sekunden bis wenigen Minuten abläuft [ 2 ] und der UDP-Port dabei geschlossen wird, verwendet UDP Hole Punching die Übertragung periodischer Keep-Alive- Pakete. Jedes dieser Pakete erneuert die Lebensdauerzähler in der UDP-Zustandsmaschine des NAT.

UDP-Hole-Punching funktioniert nicht mit symmetrischen NAT- Geräten (auch bekannt als bidirektionales NAT), die häufig in großen Unternehmensnetzwerken eingesetzt werden. Bei symmetrischem NAT ist die NAT-Zuordnung der Verbindung zum bekannten STUN-Server auf den Empfang von Daten von diesem Server beschränkt. Daher sind die Informationen, die der bekannte Server sieht, für den Endpunkt nicht nutzbar.

Bei einem etwas komplexeren Verfahren senden beide Hosts Pakete aneinander, wobei sie mehrere Versuche unternehmen. Bei einem Restricted Cone NAT wird das erste Paket des anderen Hosts blockiert. Anschließend speichert das NAT-Gerät den Sendevorgang und lässt alle Pakete von dieser IP-Adresse und Portnummer passieren. Diese Technik wird häufig in Peer-to-Peer -Software und VoIP- Telefonie eingesetzt. Sie kann auch zur Einrichtung virtueller privater Netzwerke (VPNs) über UDP verwendet werden. Dieselbe Technik wird mitunter auch auf TCP -Verbindungen angewendet , allerdings mit weniger Erfolg, da TCP-Verbindungsströme vom Host-Betriebssystem und nicht von der Anwendung gesteuert werden und Sequenznummern zufällig vergeben werden. Daher betrachtet jedes NAT-Gerät, das eine Sequenznummernprüfung durchführt, die Pakete nicht als zu einer bestehenden Verbindung gehörig und verwirft sie.

UDP-Lochstanzungs-Nachrichtensequenzdiagramm
Nachrichtenablaufdiagramm mit den Peers A und B, wobei Server S zur Herstellung der Kommunikation verwendet wird.

Fließen

Seien A und B die beiden Hosts mit den internen IP-Adressen iAddr A bzw. iAddr B , die sich jeweils in ihrem eigenen privaten Netzwerk befinden; N A und N B sind die beiden NAT-Geräte mit den externen IP-Adressen eAddr A bzw. eAddr B ; S ist ein öffentlicher Server mit einer bekannten IP-Adresse.

  1. A und B beginnen jeweils eine UDP-Konversation mit S; die NAT-Geräte N A und N B erstellen UDP-Übersetzungszustände und weisen temporäre externe Portnummern ePort A und ePort B zu .
  2. S untersucht die UDP-Pakete, um den Quellport zu ermitteln, der von N A und N B (den externen NAT-Ports ePort A und ePort B ) verwendet wird.
  3. S teilt B die Werte von eAddr A :ePort A mit und teilt A die Werte von eAddr B :ePort B mit .
  4. A sendet ein Paket an eAddr B : ePort B und B sendet ein Paket an eAddr A : ePort A (nicht notwendigerweise gleichzeitig oder in einer bestimmten Reihenfolge).
    • Wenn diese Pakete ihr privates Netzwerk verlassen, fügt jedes NAT-Gerät einen Eintrag zu seiner Übersetzungstabelle hinzu:
      • N A untersucht das Paket von A und stellt fest, dass bereits ein Eintrag existiert (iAddr A , iPort A , eAddr A , ePort A ), das Ziel jedoch ein anderes ist (S). N A erstellt einen neuen Eintrag mit derselben Übersetzung für Datenverkehr von A (iAddr A ) nach B (eAddr B ).
      • N B untersucht das Paket von B und stellt fest, dass bereits ein Eintrag existiert (iAddr B , iPort B , eAddr B , ePort B ), das Ziel jedoch ein anderes ist (S). N B erstellt einen neuen Eintrag mit derselben Übersetzung für Datenverkehr von B (iAddr B ) nach A (eAddr A ).
    • Abhängig vom Zustand der Übersetzungstabelle jedes NAT-Routers beim Eintreffen des Pakets des Remote-Rechners:
      • Wenn der neue Eintrag bereits vor dem Eintreffen des Pakets von B in die Übersetzungstabelle von NA aufgenommen wurde, dann leitet NA das Paket von B weiter, andernfalls verwirft es es.
      • Wenn der neue Eintrag bereits vor dem Eintreffen des Pakets von A in die Übersetzungstabelle von N B aufgenommen wurde, dann leitet N B das Paket von A weiter, andernfalls verwirft es es.
  5. Sobald beide NATs diese Tupel hinzugefügt haben, sind „Löcher“ in den NATs „gestanzt“, wodurch beide Hosts direkt miteinander kommunizieren können.
  • Wenn beide Hosts Restricted Cone NATs oder Symmetric NATs verwenden , unterscheiden sich die externen NAT-Ports von denen, die mit S verwendet werden. Bei einigen Routern werden die externen Ports sequenziell ausgewählt, sodass es möglich ist, eine Verbindung durch Erraten benachbarter Ports herzustellen.

Siehe auch

Referenzen

  1. ^ Ford, Bryan; Kegel, Dan; Srisuresh, Pyda (01.03.2008). „UDP Hole Punching, State of Peer-to-Peer (P2P) Communication across Network Address Translators (NATs)“ . ietf.org . Abgerufen am 22.06.2016 .
  2. ^ „Einfache Sicherheit in IPv6-Gateway-CPE“ . ietf.org. 1. Januar 2011. Abgerufen am 22. Juni 2016 .