(best practice) Client to Client over WAN/NAT

max_1234

Captain
Registriert
Feb. 2012
Beiträge
3.682
Ich implementiere derzeit einige verschiedene (kleine) Lösungen um Einzelsysteme miteinander zu verbinden.
Dies mache ich derzeit alles über zentrale Server, wobei ich mich immer nach Alternativen Methoden umsehe. Mich interessiert es vor Allem wie andere das umsetzen :)

Erklärung:
Clients sollen im WAN (hinter NAT Routern) miteinander kommunizieren können. Dass ein Server hier mindestens für die Negotiation notwendig ist - ist klar. Bisher setze ich auf UDP Hole Punching, was auch ausgezeichnet funktioniert! Ich möchte allerdings noch einen Schritt weiter gehen, da es durchaus Systeme und Firewalls gibt, die Hole Punching effektiv blockieren.

Ziel:
Ziel ist es (im Endeffekt) eine direkte Verbindung zwischen beiden Clients aufzubauen und zu erhalten.

UDP HP:
Client A und Client B verbinden sich zum Server (kleines UDP Hello, Austausch genereller Informationen).
Der NAT Port bleibt offen (je nach System unterschiedlich, bis zu einer Minute). Beide sind nun mit dem Server verbunden und senden alle 5 Sekunden ein Paket, Keep Alive sozuschreiben. Nun teile ich beiden Clients die WAN IP sowie den NAT Port für die Gegenseite mit. Mit diesem Ziel können die Clients nun direkt untereinander kommunizieren, mit UDP (stateless) kein Problem.
Probleme:
- Port Randomizing
- Hartnäckige Firewalls

TCP HP:
Hab ich (noch) nicht getestet. Leider glaube ich dass es hierfür keine "gut nutzbare" Möglichkeit gibt, da nicht stateless - obwohl es einige Libs gibt die was anderes behaupten.

UPnP:
Ist leider auch nicht so weit verbreitet, wäre sonst ein optimaler Ansatz.

Was ist hierbei best practice? Evtl. ein Mix zwischen allen/mehreren Möglichkeiten? Wie beschrieben möchte ich im Endeffekt eine auf eine direkte Verbindung zurückgreifen können. Die Möglichkeiten sind mir bekannt, auch dass es weitaus mehr gibt wie beschrieben, nur was ist best practice?

mfg,
Max
 
Ähhh VPN?
 
End to End tunnel wären da denke ich die einfachste lösung, insofern Ports an den Firewalls freigeschaltet und Port-Forwarding eingerichtet werden kann.
 
@Cool Master
Ähhh nope? 14k Beiträge und nix dahinter.
1. Lesen 2. Verstehen 3. Antworten - und nicht anders herum.

@InFlame
Wenn ich Forwardings einrichten könnte, dann würde ich mir keine Gedanken machen eben dieses zu bypassen ;)
Es geht hierbei auch nicht um permanente P2PVerbindungen/Tunnel, sondern sporadischem Informationsaustausch - jedoch initial immer über den Server (Negotiation).

mfg,
Max
 
Zuletzt bearbeitet:
Du hast nach einem Standardvorgehen gefragt um 2 Clients miteinander zu verbinden. VPN ist da nun mal ziemlich der Standard. "Andere" setzen das sicher oft so um.
 
max_1234 schrieb:
@Cool Master
Ähhh nope? 14k Beiträge und nix dahinter.
1. Lesen 2. Verstehen 3. Antworten - und nicht anders herum.

Aha du hast das als Ziel angegeben:

max_1234 schrieb:
Ziel:
Ziel ist es (im Endeffekt) eine direkte Verbindung zwischen beiden Clients aufzubauen und zu erhalten.


Das ist 100% GENAU was VPN macht. Also ich verstehe deine "Kritik" nicht wirklich... Zudem, wenn du aktiv gelesen hättest habe ich "?" geschieben es war also eher fragend gedacht nach dem Motto warum kommt VPN für dich nicht in Frage...
 
Das ist 100% GENAU was VPN macht.
Nope - also nochmal für dich: 1. (mehr wie 2 Wörter) Lesen 2. Denken 3. Antworten.

@BadBigBen
Danke für den Link, den kannte ich wirklich noch nicht! Werde das heute nochmal schön durchstöbern.
Auf den ersten Blick fallen mir beim TCP Hole Punching ein paar Sachen auf die ich so noch nicht gelesen habe und mit denen ich womöglich die UDP Geschichte ad acta legen werde. Und DANN, nur DANN kann ich auch schaun ob ich hierfür einen TCP Stream inform eines Tunnels ansetzen möchte ;)

There are many jokes about UDP. But you will never get them all.

mfg,
Max
 
Zuletzt bearbeitet:
Zurück
Oben