Hole punching: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Die Seite wurde neu angelegt: „{{drawio:hole-punching-1}}“ |
Keine Bearbeitungszusammenfassung |
||
| (6 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
{{drawio:hole-punching-1}} | =Grundsätzliches= | ||
*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 Tunnelling. | |||
*Technik wird genutzt für Anwendungen wie Online-Spiele, Peer-to-peer-Netzwerke und IP-Telefonie. | |||
*Beide Clients bauen eine Verbindung mit einem offenen dritten Rechner auf | |||
*Dieser kennt 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 | |||
*Im weiteren Verlauf den Empfang von 'Antworten' des Adressaten zulässt. | |||
*Nach diesem initialen Handshake können beide Clients direkt via UDP miteinander kommunizieren. | |||
=Beispiel= | |||
*Alice möchte Dateien direkt an Bob verschicken. | |||
*Hierfür nutzen sie einen Client mit Serverinfrastruktur. | |||
*Die Serverinfrastruktur hält einen Anmeldeserver Ziggy, 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 öffentlichen IP-Adresse und Wunschport (IP 2.2.2.2, Port 49000) für Bob an den Server Ziggy. | |||
*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 öffentlichen 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 öffentliche 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. | |||
=Idealfall keine Randomizes NAT= | |||
{{#drawio:hole-punching-1}} | |||
=Eine Seite macht Randomizes NAT= | |||
{{#drawio:hole-punching-2}} | |||
Aktuelle Version vom 12. April 2022, 09:00 Uhr
Grundsätzliches
- 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 Tunnelling.
- Technik wird genutzt für Anwendungen wie Online-Spiele, Peer-to-peer-Netzwerke und IP-Telefonie.
- Beide Clients bauen eine Verbindung mit einem offenen dritten Rechner auf
- Dieser kennt 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
- Im weiteren Verlauf den Empfang von 'Antworten' des Adressaten zulässt.
- Nach diesem initialen Handshake können beide Clients direkt via UDP miteinander kommunizieren.
Beispiel
- Alice möchte Dateien direkt an Bob verschicken.
- Hierfür nutzen sie einen Client mit Serverinfrastruktur.
- Die Serverinfrastruktur hält einen Anmeldeserver Ziggy, 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 öffentlichen IP-Adresse und Wunschport (IP 2.2.2.2, Port 49000) für Bob an den Server Ziggy.
- 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 öffentlichen 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 öffentliche 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.

