Holepunching
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.