Hole Punching

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

Was ist das?

  • Hole Punching ist ein Prozess, der in Netzwerken verwendet wird, um Direktverbindungen zwischen zwei Hosts herzustellen, die sich jeweils hinter einem NAT befinden.
  • Das Verfahren nutzt die Tatsache aus, dass die meisten Firewalls und NATs Antworten auf ausgehende Verbindungen zulassen, auch wenn sie keine eingehenden Verbindungen zulassen.

UDP Hole Punching

  • Beide Endpunkte (Peer A und Peer B) stellen eine Verbindung zu einem öffentlich zugänglichen Server (oft ein STUN-Server) her. *Dieser Server ist nicht hinter einem NAT und ist von beiden Peers erreichbar.
  • Wenn Peer A und Peer B sich mit dem STUN-Server verbinden, registriert der Server ihre öffentlichen IP-Adressen und Ports, die vom NAT für diese Verbindungen zugeteilt wurden.
  • Der STUN-Server teilt Peer A die öffentliche IP-Adresse und den Port von Peer B mit und umgekehrt.
  • Peer A und Peer B senden nun jeweils ein UDP-Paket an die Adresse und den Port des jeweils anderen.
  • Da die NAT-Geräte diese Verbindung als Antwort auf eine ausgehende Verbindung betrachten, lassen sie die Pakete passieren und "stanzen" sozusagen ein "Loch" in der Firewall.
  • Jetzt können Peer A und Peer B direkt miteinander kommunizieren, da ihre NAT-Geräte die Verbindung akzeptieren.

TCP Hole Punching

  • TCP Hole Punching ist komplexer als UDP Hole Punching, da TCP eine verbindungsorientierte Übertragung ist, die einen Handshake erfordert, um eine Verbindung herzustellen.
  • Wie im UDP-Verfahren stellen beide Peers eine Verbindung zu einem öffentlichen Server her und erhalten die öffentlichen Adressen und Ports des jeweils anderen.
  • Beide Peers versuchen gleichzeitig, eine TCP-Verbindung zum anderen herzustellen.
  • Das führt dazu, dass die NAT-Geräte die SYN-Pakete (Verbindungsanforderung) weiterleiten, aber die SYN-ACK-Pakete (Verbindungsbestätigung) schlagen fehl, da noch keine eingehende Verbindung akzeptiert wurde.
  • Da beide Peers versucht haben, eine Verbindung aufzubauen, lassen die NAT-Geräte nun die nachfolgenden SYN-ACK-Pakete passieren, da sie diese als Antworten auf die initialen SYN-Pakete betrachten.
  • Nun kann eine normale TCP-Verbindung zwischen den Peers hergestellt werden.
  • In beiden Fällen (UDP und TCP) erlaubt das Hole Punching den Peers, direkt miteinander zu kommunizieren, auch wenn sie sich hinter NAT-Geräten oder Firewalls befinden.