Holepunching

Aus xinux.net
Zur Navigation springen Zur Suche springen

Hole Punching (Rechnernetz)

  • Hole Punching ist eine Technik, mit der eine UDP-Verbindung zwischen zwei Rechnern hergestellt werden kann, auch wenn beide sich hinter restriktiven Firewalls befinden.
  • Es handelt sich um einen Spezialfall des Tunneling.

Nutzung

  • Genutzt wird diese Technik für Anwendungen wie Online-Spiele, Peer-to-peer-Netzwerke und IP-Telefonie.
  • Beide Clients bauen eine Verbindung mit einem offenen dritten Rechner auf, der dadurch die IP-Adressen und Port-Nummern beider Clients kennt.
  • Diese Informationen gibt der Server dem jeweils anderen Client weiter.
  • Beide Clients senden nun jeweils ein UDP-Paket an den anderen Client.
  • Wesentlich dabei ist, dass die eigene Stateful-Paket-Inspection-Firewall des Senders dadurch eine Regel erzeugt, die im weiteren Verlauf den Empfang von 'Antworten' des Adressaten zulässt.
  • Der Inhalt des Pakets ist dagegen unerheblich und wird – so das Paket überhaupt die Firewall des Zielrechners passiert – vom Zielrechner ignoriert.
  • Nach diesem initialen Handshake können beide Clients direkt via UDP miteinander kommunizieren.
  • Ist ein verbindungsorientiertes Protokoll notwendig, so kann keine TCP -Kommunikation erfolgen, da die Firewall diese überwacht und unbeantwortete Verbindungsversuche sofort schließt.
  • Soll eine Übertragung der Pakete sichergestellt sein, so muss die Anwendung ein eigenes Protokoll, welches den UDP-Stack zur Kommunikation nutzt, implementieren.

Beispiel

  • Alice möchte Dateien direkt an Bob verschicken.
  • Hierfür nutzen sie einen Client mit Serverinfrastruktur.
  • Die Serverinfrastruktur hält einen Anmeldeserver, erreichbar unter der Adresse 1.2.3.4 bereit.
  • Alice und Bob sind beide an diesem Server angemeldet.
  • Alice schickt eine Austauschanfrage mit dem Inhalt Ihrer IP-Adresse und Wunschport (IP 2.2.2.2, Port 49000) für Bob an den Server 1.2.3.4.
  • Da Bob an dem Server ebenfalls angemeldet ist und eine Verbindung zu diesem hält, kann der Server Bobs Client erreichen.
  • Bobs Client schickt nun ein UDP Paket von seiner IP(1.1.1.1) mit dem ausgehenden Port 50000 an Alice (2.2.2.2:49000).
  • Dadurch wartet er auf eine Antwort an seinem ausgehenden Port.
  • Seine Firewall muss den Port für eine gewisse Zeit offen halten, da sie aufgrund der Eigenschaften des UDP-Protokolls nicht genau wissen kann, wann die Verbindung zu Ende ist.
  • Das Paket wird allerdings zunächst von Alice Firewall geblockt.
  • Deshalb schickt Bob an den Server 1.2.3.4 nun die Aussage, dass er Port 50.000 bei sich geöffnet hat.
  • Daraufhin erhält Alice Client die Nachricht ein UDP-Paket von Port 49.000 an Bobs IP(1.1.1.1, Port 50000) zu schicken.
  • Alice Client erledigt dies und wartet nun ebenfalls auf eine Antwort, hier allerdings von Bobs IP-Adresse 2.2.2.2 von Port 50000.
  • Diese kann nun kommen und wird nicht mehr von seiner Firewall verworfen, dank des vorher geschlagenen Lochs.
  • Bobs Antworten an Alice zu Port 49.000 kommen ebenfalls an und Alice kann Ihre Dateien nun direkt an Bob schicken und Bob den Empfang direkt bestätigen.