P2P Anwendung NAT-Problem

Hallo zusammen,

ich habe ein Problem bei der Programmierung einer Peer-to-Peer-Anwendung. Und zwar möchte ich zwischen jeweils 2 Computern Daten austauschen. Die Anzahl der verschiedenen Computer kann dabei groß werden und es können auch viele Anwender unterstützt werden. Ich möchte solche Verbindungen mittels UDP- oder TCP-Sockets aufbauen. Das Problem dabei: können 2 Rechner nur über Internet kommunizieren, muss ein ggf. dazwischen befindlicher Router so eingestellt werden, dass er Verbindungen auf einem bestimmten Port zu einem bestimmten PC in seinem verwalteten Netzwerk weiterleitet (Port forwarding). Dies habe ich mittels der COM-Bibliothek NAT UPnP 1.0, die im .net-Framework enthalten ist, bereits umgesetzt.
In mehreren Tests auf verschiedenen Systemen mit verschiedenen Routern habe ich allerdings festgestellt, dass alle Router im Auslieferungszustand UPnP deaktiviert haben, womit man normalerweise eine Port-Forwarding-Regel erstellen kann oder sogar keine Möglichkeit bieten, so etwas einzustellen. Gleichzeitig funktionieren andere P2P-Anwendungen wie Skype oder BitTorrent oder ähnliches tadellos.
Meine Frage lautet daher: Kann man dieses Adressierungsproblem bei Kommunikation über das Internet auch anders lösen und vor allem, wie?
Ich hoffe, mir kann jemand helfen, weil ich schon lange nach einer solchen Möglichkeit suche und einfach nichts finde. Schon das mit dem UPnP war ne harte Nuss…
Mit freundlichen Grüßen,
Bluesky787

Hallo!
Verstehe ich das richtig, dass Du nach einer Möglichkeit suchst, im Router das Port-Forwarding über Deine Anwendung selbst einzustellen?
Wenn ja, dann kannst Du das gepflegt vergessen.
Deine Anwendung kann nichts anderes machen als lokal ein Socket zu öffnen und abzuwarten, ob was kommt. Wenn nichts ankommt, kann das viele Gründe haben, von denen ein nicht vorhandenes Port-Forwarding nur einer ist.

Ich weiß zwar nicht, welche Protokolle und Ports skype und bittorrent verwenden, aber wenn die Firewall in einem Router von Haus aus so eingestellt ist, dass sie den entsprechenden Traffic nicht durchlässt, dann funktionieren auch diese Anwendungen nicht.
Es ist jedoch - je nach Routerhersteller unterschiedlich - sicherlich so, dass im Auslieferungszustand bei manchen Routern die entsprechenden Ausnahmen schon eingetragen sind, damit solche bekannten Programme wie skype/bittorrent/… laufen, ohne dass der Benutzer explizit den Router verstellen muss, aber davon kannst Du nicht allgemein ausgehen.

Wenn Du in Deiner Anwendung daher feststellst, dass keine Daten auf dem betreffenden Socket empfangen werden (obwohl eigentlich etwas kommen müsste), hast Du nur die Chance, den Anwender zu informieren und zu bitten, dass er die benötigten Ports in seiner Firewall freischaltet bzw. die entsprechenden Portweiterleitungs-Regeln konfiguriert.

Gruß,
Martin

Hallo,

der Trick ist hier beschrieben:
http://www.heise.de/security/artikel/Wie-Skype-Co-Fi…

Viele Grüße
McGee

Dankeschön, das war genau das, was ich brauche :smile:

Hallo Martin,

ich danke für deine Antwort und ja, du hast das richtig verstanden - ich will die Forwarding-Regeln direkt im Router einstellen. Dies ist entgegen deiner Meinung tatsächlich möglich und ich habe das schon erfolgreich umgesetzt (mittels Universal Plug and Play, was die meisten Router unterstützen, jedoch standardmäßig deaktiviert haben).
Es blieb jedoch genau dieses Problem: Was mache ich, wenn der spätere Nutzer keinen Zugang zu der Firewall / dem Router hat bzw. nicht zufällig Netzwerkadmin ist (oder aus Sicherheitsgründen kein UPnP einschalten möchte, was ich auch für nachvollziehbar halte)?

Da schein ich mit meinem bisherigen Ansatz wirklich nicht viel mehr machen zu können, wie du wahrscheinlich richtig festgestellt hast.
Tatsächlich ist mir aufgefallen, dass auch Skype es zunächst mit Portforwarding probiert und dann, falls das nicht funktioniert, sich auf andere, geheimnisvolle Art und Weise Zugang zum geschützten Rechner verschafft.

Der Trick, den McGee geschickt hat, klingt dabei plausibel und unschwer umzusetzen, da ich sowieso einen Vermittlungsserver geplant hatte, ganz ohne irgendeine feste Adresse sollte sich wohl niemand im Internet finden…

Grüße,
Bluesky787

Hallo!
Der Ansatz mit UPnP mag schon für bestimmte Router funktionieren, wenn man weiß, wo genau sie sitzen und welche es exakt sind. Das halte ich nicht für praktikabel, daher meine Aussage, dass es allgemein nicht geht.

Der Link im Artikel von McGee ist wirklich hochinteressant - aber auch dort sieht man, dass Skype nicht die Firewall-Einstellungen manipuliert, sondern sich bestimmte Verhaltensmuster von Firewalls zunutze macht, um diese auszuhebeln.
Zu den dort beschriebenen Methoden kann ich nur sagen: Chapeau!

Gruß,
Martin