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