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