Jump to content
Unity Insider Forum

NAT Punchthrough funktioniert nicht


Sascha

Recommended Posts

Hallo miteinander,

 

ich bin mich nicht das erste Mal dabei, mir wegen Unitys Multiplayer die Haare auszureißen...

Grund ist mal wieder das NAT-Problem, wenn man sich zu einem Host verbinden will, der hinter einem Router sitzt, also immer, wenn's über's Internet gehen soll.

 

Jede Art von Diskussion darüber läuft darauf hinaus, dass der Host Ports freigeben und selber forwarden muss.

Das will ich vom Durchschnittbenutzer einfach nicht verlangen müssen.

Und laut dieser Seite muss ich das auch nicht, dazu gibt's ja NAT Punchthorugh.

In the old days your users would have to go to their router configuration screen and setup a mapping. However, in modern applications users are not usually required to do this, thanks to NatPunchthrough.

Mit dem Master Server soll ja genau das gemacht werden, aber egal, wie ich herumbastele, ich kann als Client nie zu einem Host verbinden, der hinter einem Router sitzt.

 

Warum funktioniert NAT Punchthrough nicht, jemand eine Ahnung?

Und ja, mir ist bewusst, dass man sich in der Regel insgesamt ärger erspart, wenn man sich ein externes Network-Plugin besorgt, und trotzdem würde ich gerne wissen, was da wohl schief läuft...

Link zu diesem Kommentar
Auf anderen Seiten teilen

es gibt nur meiner bescheidenen Meinung nach nur 2 brauchbare wege :

 

a.) du stellst einen "tunnel" zwischen beiden clients der über einen server geht und die 2 direkt verbindet

(der server wird nur zum aufbau der verbindung gebraucht und zum halten derer, extreme gefahr des

daten manipulieren) dieser server prüft und managed keinerlei userdaten er verbindet nur

 

b.) du stellst einen server der die daten von a bekommt, prüft auf konsistenz und dann an b weitersendet

(was so niemals gemacht werden darf )

Grundregel : traue keinerlei daten des client nicht mal dem benutzernamen pw

 

wenn dann gehst du her und lässt dir als server die daten geben und prüfst sie gegen.

z.b. ob die alte spielerposition mit der momentanen in der zeit möglich ist

> ja ok

>nein kickban

 

oder ob die position überhaupt erreichbar ist

und vieles mehr

 

 

ich teste grad weg b über einen socket server den ich gerade am testen bin ( eigenkonstruktion )

 

unityportierung ist in arbeit weil ich keinen bock habe das sowas wie bei photon nochmal passiert

und die plötzlich 10dollar im monat wollen *tzz

 

 

Photon Indie Features

 

Indie License conditions

  • Licensee's monthly gross revenue is below US$ 10,000
  • Licensee's product displays the Exit Games Photon logo prominently (in splash screen or credits)

Choose your Photon Indie License, Download and Start

 

Get your FREE fully featured 30 days trial at

 

 

 

 

 

 

 

 

 

 

aso zum thema deiner natPunchthrough geschichte schau mal hier:

 

http://www.jenkinsso...nchthrough.html

Server Implementation

  1. Host a server somewhere, not using NAT / e.g. behind a firewall. (RakNet provides a free one, however you may wish to host your own for consistent uptime).
  2. Create an instance of the plugin: NatPunchthroughServer natPunchthroughServer;
  3. Attach the plugin: rakPeer->AttachPlugin(&natPunchthroughServer);
  4. Don't forget to call RakPeerInterface::Startup() and RakPeerInterface::SetMaximumIncomingConnections(MAX_CONNECTIONS);

demnach nutzen die auch einen masterserver einen anderen weg gibt es nicht

denke doch mal drüber nach

 

client a ( keine portfreigabe ) (verweigert die annahme von allen datenpaketen die nicht angefordert wurden)

client b ( keine ... genau : keine portfreigabe ) (verweigert die annahme von allen datenpaketen die nicht angefordert wurden)

 

wie sollen die 2 sich direkt verbinden ?

 

das ist ja der sinn der it das das nicht geht

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn ich die Beschreibung von NAT-P (dessen Link ich btw auch schon postete) richtig verstanden habe, läuft das so:

  1. Host trägt sich beim Masterserver mit ip des Routers und Port für NAT auf sich selber ein
  2. Client holt diese Infos vom Masterserver
  3. Client sendet Daten über ip und Port => müsste ankommen dank NAT Punchthrough
  4. ... und wartet auf Antwort (Paket angefordert), die der Host zurück schickt
  5. Dann wieder ab Punkt 3

Leider sieht man davon nochts...

 

Mit Photon bin ich auch so ein bisschen am schräg gucken.

Hab mir das mal angeschaut, und wie es aussieht, müsste ich mir dafür ja nen Windows-Server irgendwo hinstellen.

Meh.

 

Was Möglichkeit a) angeht: Du sagst das so einfach, "erstell nen Tunnel"...

Netzwerkprogrammierung ist nicht wirklich mein Ding und der Beschreibung nach ist NAT Punchthrough eine gute Lösung für das Problem. Prinzipiell wollte ich es vermeiden mir da jetzt ein komplett eigenes Netzwerksystem zu basteln und hatte gehofft, nutzen zu können, was schon da ist.

Man muss ja nicht immer das Rad neu erfinden ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

brauchst keinen win root ich hab meinen socket server ( masterserver oder wie man ihn auch nennen will ) unter .net geschrieben und auf nem debian 6 in wine laufen ohne probleme

 

deinen link habe ich schon gesehen ( is ja der selbe wie meiner ) nur wegen dem kommentar den ich geschrieben habe

habe ich den link nochmal fürs verständniss dazugeschrieben

 

photon kann man wie gesagt vergessen weil die nach 30 tagen 10 dollar im monat wollen

redfox bzw redfox 2 damit werde ich nicht warm

 

also nen eigenen server schreiben was nicht das

 

zum thema deines postings über dem hier : der masterserver ist a) deiner oder B) von ranknet also : wieder nen server der die 2 clients verbindet xD

 

siehe hier ganz unten die bilder

 

http://www.jenkinsso...nchthrough.html

 

vielleicht habe ich es auch beim überfliegen nicht korrekt gelesen ( mein englisch is ned so 100% ) aber so wie ich das

sehe nutzen die immer einen master oder http://de.wikipedia....l_Plug_and_Play

problem ist

Link zu diesem Kommentar
Auf anderen Seiten teilen

Was die Photon-Lizenz angeht - kann es sein, dass sie die gerade geändert haben?

Angeblich gibt es anstatt der 30-Tage-Lizenz jetzt eine unbegrenzte, und PhotonControl.exe sagt mir auch, dass die nicht abläuft...?

 

Leider hilft mir das alles nicht bei meiner ursrpünglichen Frage: Warum kann ich nicht connecten?

Datenintegrität ist ja schön und gut, aber das juckt mich ja erst wenn ich überhaupt kommunizieren kann...

Link zu diesem Kommentar
Auf anderen Seiten teilen

http://shop.exitgames.com/

Choose your Photon Indie License, Download and Start

 

Get your FREE fully featured 30 days trial at http://www.exitgames.com

 

 

wie gesagt ich habe genug von den lösungen wo dann später doch geld kosten drum meine eigene.

 

kannst du mal ein bild bitte malen und darin deine momentane konstellation aufzeichnen ( mit pseudo ips )

also nicht den "echten" damit man mal sehen kann bzw testen kann was wo wie sich überhaupt sieht

 

was du machen kannst : per sonsole unter windows ping und tracert bischen nutzen

bzw unter linux genauso

 

unter mac sollte sowas aber auch zu finden sein

 

damit kannst du dann schonmal die einzelnen teilnetze prüfen ob du da überhaupt

eine verbindung bekommst. ( firewall ftw )

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe mit den Netzwerkdingen von Unity zwar noch garnix gemacht, aber trotzdem will ich mich mal zu Wort melden.

 

Wenn du jetzt eine Verbindung zwischen 2 Rechnern aufbauen willst, ohne einen Server zu nutzen, dann musst du ja die IP Adresse des DSL Anschullses kennen. Wie du auch schon bemerkt hast, geht das jetzt so ohne weiteres nicht durch. Dafür brauchst du "immer" einen Port und der Roter, also dessen Firewall, muss diesen Port frei gegeben haben. Da kommst du nicht drum herum.

Nutzt dein Spiel einen Port, der schon frei ist wie z.B. 8080 müsste es möglich sein, dass die Verbindung sich aufbaut. Auch ohne forewarding.

Problem dabei: Der Router weiss nicht zu welchem Rechner er das Packet schicken soll, wenn mehrere Rechner im Netz sind. Wenns richtig läuft sollte er es an alle schicken.

Aber wie dem auch sei, wenn dein Programm auf Rechner A weiß welchen Port es für das Programm auf Rechner B nutzen soll, dann musst du auch eine Verbindug zu dem Rechner hinbekommen.

Das jetzt alles ohne Server, der die einzelnen Verbindungen verwaltet.

 

schau dir dazu mal UDP bei Wikipedia an: http://de.wikipedia.org/wiki/User_Datagram_Protocol

Link zu diesem Kommentar
Auf anderen Seiten teilen

Stimme malzbie zu.

 

Wenns nicht über nen Standardport wie 80, 8080 usw. geht, muss der Port am Router zu 99,9% geöffnet werden.

Fast in jedem Fall (ohne Master Server) benötigst du eine Port-Weiterleitung, in der Theorie ist es zwar so wie malzbie es beschreibt, jedoch funktioniert es in der Praxis auch nicht ohne Probleme.

 

Bei den Standardports bekommste somit Probleme, leitest Port 80 um haben alle anderen Rechner im Netzwerk kein Internet mehr. Port 8080 wird mittlerweile von vielen Programmen wie Virenscannern, Firewalls, Remote Programmen, Proxys (alles client seitig) als Sekundärport zur Kommunikation verwendet.

 

Ich empfehle tatsächlich einen eigenen Port + Master Server

 

Der Unity Master Server erfüllt seinen Sinn und Zweck eigentlich sehr gut (habe einen eigenen auf meinem Debian Webserver am laufen), ich kenne aber die Problematik die du beschreibst.

 

Dadurch, dass der Client zuerst eine Verbindung über den Router zum Master Server aufbaut, wird bereits eine Route eingerichtet, welche dem Master Server mitgeteilt wird, somit ist bereits ein korrekter Kommunikationsweg beim Server bekannt.

 

Wenn du die Flinte noch nicht ins Korn geworfen hast, können wir das Ganze heute Abend mal via Teamspeak oder Skype live testen.

 

Gruß

Cy

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...