Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

06.05.2008, 20:17

Winsock: Router blockt die Verbidung

Hallo.
Ich wollte ja schon einmal eine Netzwerk engine schreiben.
Jetzt habe ich das Thema wieder auf gegriffen und habe ein Chat geschrieben.
Im Lan funktioniert das super. Doch wenn ich über das internet gehe kommt nichts mehr bei dem anderen an. (bzw. bei mir)
Also dachte ich das es am Router liegt, der die Datenpakete verändert.
Nachdem ich den Port freigeschaltet habe funktionierte das alles.
Jetzt möchte ich fragen, wie man einen Chat schreiben kann (wie z.B. ICQ)
ohne an den Settings am Router rumspielen zu müssen und sicherheitslücken verursacht?
Ich habe es auch schon über den ICQ Port probiert aber das funktioniert auch nicht.

Gruß Flo

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

2

06.05.2008, 20:32

Klingt für mich nach "NAT punch through". Google mal danach ;)

Du kannst hinter einem Router nicht mal eben so einen Server betreiben, der einen eigenen Port benötigt. Diesen Port musst du immer forwarden. Du könntest dein Problem aber auch durch einen Master Server lösen, dann müssten die Clientprogramme keine Ports geforwarded und auch nicht durchgeprügelt bekommen.

Edit: Zum Titel: Der Router "blockt" nicht bewusst ;) Er weiss bloß nicht, dass du einen Server hinter ihm betreibst und daher ALLE Pakete eines Ports haben willst. Er kann dich schlichtweg per NAT nicht zuordnen. Vllt solltest du dich mal allgemein mit dem Thema NAT vertraut machen. Sonst wirst du auch Probleme haben das punch through richtig zu verstehen.

EditEdit: Auf Heise Security gabs mal nen netten Artikel dazu, wie Skype das Problem löst: http://www.heise.de/security/suche/ergebnis/?rm=result;words=Skype;q=Skype;url=/security/artikel/82054/

3

06.05.2008, 20:53

Vielen Dank.
So schnell und so ausführlich... wow

Zitat

EditEdit: Auf Heise Security gabs mal nen netten Artikel dazu, wie Skype das Problem löst: http://www.heise.de/security/suche/ergebnis/?rm=result;words=Skype;q=Skype;url=/security/artikel/82054/


Das hört sich alles ganz schön wild an. Ich möchte das einmal zusammen fassen, damit ich nichts falsch verstehe:
- Beide Clienten stehen mit dem Vermittlungsserver im Kontakt (TCP)
- Client (1) möchte Client(2) erreichen->
Client(1) sagt Client(2) über den Vermittlungsserver dass er verbindung aufnehmen möchte (TCP)->
Der Client (2) schickt ein UDP-Paket zum (1) ->
Die Firewall von Client (2) erwartet eine Antwort ->
Client (1) nimmt verbindung mit Client (2) auf und die verbindung steht.

Echt raffiniert! Lol.
Doch ein Vermittlungsserver habe ich nicht. Vielleicht reicht auch ersteinmal ein FTP server. Ich werde das mal ausprobieren.
Danke :)

Gruß Flo


Gruß Flo

4

06.05.2008, 21:44

Sinnvolle Sicherheitsvorkehrungen zu umgehen ist nicht gerade das, was ein gutes Programm tuen sollte.
Sollen die Nutzer halt lernen ihren scheiß Router richtig zu benutzen und die entsprechenden Ports freigeben. Imo dürfte das Problem doch damit gelöst sein?

Btw.: Sowas wie ICQ erreichst du in dem du einen Server hast, bei dem die Ports freigegeben sind, der kann dann die Verbindungen annehmen. Sollte er jedenfalls können.
Lieber dumm fragen, als dumm bleiben!

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

5

06.05.2008, 21:53

Naja, aber wenn man ein P2P Programm schreiben möchte ;) Und er schreibt ja schon, dass er keinen Server hat.

Edit: Und die Probleme bzw Seiteneffekte die man mit NAT hat, sind nicht in erster Linie ein Sicherheitsfeature ;)

6

06.05.2008, 23:21

Aber NAT an sich umgeht ein Sicherheitsfeature. Nämlich das NICHT alle Ports offen sind.
Lieber dumm fragen, als dumm bleiben!

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

7

07.05.2008, 19:13

Funktionert "punch through" nicht eig nur bei UDP? Weil bei TCP müsste man, soweit ich weiß, auch noch die "Versionsnummer" manipulieren.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

8

09.05.2008, 17:18

Also ich will das grobe konzept mal erklären, das hinter einem router steht, denn wenn man sich damit beschäftigt, dann merkt man das "portfreigabe" nämlich nur schöngeredet ist xD

Also wenn du ins internet(z.b. willst du ein onlinegame zocken) gehst, dann verwendest du automatisch die ip deines routers. Warum? ganz einfach: Wenn dein router eingeschaltet wird und richtig konfiguriert ist, dann meldet er sich beim provider an und erhält eine ip. damit hast du dann zugang zum "internet". Nun meldet sich der router aber nur einmal an, und nicht für jeden pc am router einmal. Daraus resltiert zunächst das problem, dass nur ein pc ins internet könnte. Kann man recht einfach lösen, indem man die verbindung "aufteilt". Jeder pc am router erhält wie in einem netzwerk auch eine ip adresse und zwar automatisch per dhcp(kann man oft auch abschalten). jeder connect ins internet, geht nun zuerst an den router dieser senden ihn(mit seiner ip im internet) nun weiter. Erstmal ein überblick:

Der Router hat im Internet die IP 1.2.3.4 und im LAN(also am anderen Ende) die IP 168.178.0.1.
Dein PC hat im lan die ip 168.178.0.2 und ist ja nicht direkt mit dem internet verbunden.
Ein laptop ist nun via wlan angeschlossen und hat im wlan die ip 168.178.0.3.

So wenn du nun eine verbindung zu nem server(meinetwegen http) aufbauen willst, dann wird zunächst ein packet gesendet. dieses geht dank namensauflösung(nein das erkläre ich net auch ncoh, sonst bin ich morgen noch dranne) an den router gesendet. dieser sendet es mti seiner ip an den entsprechenden server weiter. So weit so gut. Was ist nun, wenn du auf deinem pc nun nen kleinen http server einrichten willst(oder ein game hosten etc...)?

Nun angenommen dein server läuft(mit der ip 168.178.0.2) und aus dem lan kannst du nun connecten, indem du im browser seine ip eintippst. Was ist nun aber, wenn jemand aus dem internet auf deinen server connecten will? Welche ip soll der benutzen? die aus deinem lan? wohl kaum, die gibt es im internet mit sicherheit nochmal i-wo. Die deines routers? mal schaun...

Er sendet also das packet an deinen router und will zu port 80 connecten. Und dann? Das packet kommt beim router an und der weiss net was machen... wohin soll er es weiterschiken? an den laptop? oder an den pc? oder war es vllt sogar für ihn selbst? er weiss es net, und hat keine möglichkeit das zu entscheiden. Deshalb muss man es ihm sagen und diese funktion nennt man dann "portfreigabe". Man sagt einfach dem router, er soll alle eingehenden verbindungen/daten/etc an port x zum pc y an port z weiterleiten. Fertig. Das ganze wird nun noch als feature mit dem name "firewall im router" versehen und man kann nochmal 10€ mehr verlangen xD

Socke

PS:
Soweit geht mein verständnis, ich muss allerdings auch zugeben, dass ich auch noch ein kleines verständnisproblem in der geschichte habe.
Folgende situation: Man hat nun zu nem http server connected und dieser sendet nun den website content an den router zurück. woher weiss der router wo das nun hin muss?

Socke

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

9

09.05.2008, 17:50

Im Prinzip merkt sich der Router an wen das Paket gehen soll und von wem es kam, ersetzt den Absender durch eine eigene Adresse, speichert diese Adresse zusammen mit dem eigentlichen Absender ab und schickt es an den Server. Dieser schickt die Antwort an den eingetragenen Absender (unser Router). Dieser kennt ja den ursprünglichen Absender und leitet es an diesen weiter.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

10

09.05.2008, 17:54

Oh wie simpel. Danke.

Werbeanzeige