Hole Punching (auch UDP- oder TCP-Hole-Punching) ist eine Netzwerktechnik, die zwei Rechnern hinter verschiedenen NAT-Routern eine direkte Peer-to-Peer-Verbindung ermöglicht. Ohne Hole Punching müsste der Datenverkehr immer über einen Relay-Server laufen.

So funktioniert es

Beide Teilnehmer verbinden sich zunächst mit einem Koordinations-Server, häufig einem STUN-Server. Dieser teilt jedem mit, welche öffentliche IP-Adresse und welchen Port sein NAT für die Verbindung vergeben hat. Danach senden beide gleichzeitig Pakete an den öffentlichen Endpunkt des jeweils anderen. Die NAT-Router interpretieren diese eingehenden Pakete als Antwort auf die ausgehende Verbindung und öffnen so eine temporäre Zuordnung – das „Loch“ im NAT.

Grenzen

Hole Punching scheitert an symmetrischen NATs, weil diese für jedes Ziel eine neue Port-Zuordnung vergeben. Dann helfen Port Prediction oder ein TURN-Relay. TCP-Hole-Punching nutzt dieselbe Grundidee, hat aber wegen des SYN-Handshakes geringere Erfolgsaussichten. RFC 5128 beschreibt Hole Punching als effizienteste Methode für direkte P2P-Kommunikation. Befinden sich beide Teilnehmer im selben internen Netz, wird Hairpin NAT relevant.

Verwandte Grundlagen: ICE, WebRTC.