Portfreigabe am Router

  • Hallo,
    Ich hab da mal eine Frage und zwar: Ich habe einen FTP-Server, um ihn nun online zu stellen muss ich die Ports an meinem Router öffnen, da die Clients ja Daten an meinen Server senden und der die ja empfangen muss. Nun das was ich nicht verstehe, nämlich wenn ich von meinem Rechner auf einen FTP-Server zugreife (z.B. den von AutoIt) muss ich ja keine Ports freischalten (an meinem Roiter) obwohl mein Rechner ja vom Server Daten empfängt. Also warum muss man als host die Ports offen haben und als Client nicht, obwohl beide Daten erhalten?
    Danke fürs Beantworten!

  • Also des hängt damit zusammen, dass sonst deine Firewall oder der Router die Verbindung nicht zulassen würde, da sie es als Angriff verstehen würde. Auch muss man es beim Router einstellen, damit der Router weiß, zu welchem PC er die Verbindung herstellen soll.

    So hab ich das jedenfalls verstanden ^^

    MfG
    Conan (Nur Mitlesend)
    Schon lange dabei

  • Hallo,

    Zitat

    Nun das was ich nicht verstehe, nämlich wenn ich von meinem Rechner auf einen FTP-Server zugreife (z.B. den von AutoIt) muss ich ja keine Ports freischalten (an meinem Roiter) obwohl mein Rechner ja vom Server Daten empfängt

    Doch, du hast diese Ports "freigeschaltet", ansonsten würde dein Router schon die Anfrage nach "draussen" blockieren. Schau mal im Konfigurationsmenü deines Routers, dort sind idR. die Ports 80 für HTTP schon offen.
    Beispiele aus meinem Router, die Protokolle und die damit verbundenen Ports
    Virtual Server FTP TCP 21/21
    Virtual Server HTTP TCP 80/80
    Virtual Server HTTPS TCP 443/443
    Virtual Server DNS UDP 53/53
    Virtual Server SMTP TCP 25/25
    Virtual Server POP3 TCP 110/110
    Virtual Server Telnet TCP 23/23
    Weiterhin sind noch einige weitere Ports offen, 20 für FTP und noch einiges andere.

    Wenn du jetzt beispielsweise von dir aus eine Verbindung zu einem anderen Rechner im Internet über Http aufbauen möchtest, dann generiert dein Browser eine Anfrage über Port 80 nach "draussen". Wenn nun Firewall/Router ihr OK geben (Port freigegeben) kommt das Paket beim anderen Rechner (laufender Webserverdienst auf Port 34518 ) an und dort passiert folgendes:
    Das Paket "klopft" beim Router (Portier im Hotel) an: "Hi, eure (IP)Adresse hab ich gefunden, ich hab da eine Nachricht für einen Webserver im Zimmer(Port) 80, aber wie komme ich jetzt dahin?"
    Der Portier telefoniert mit Zimmer 80, daß allerdings der Browser gemietet hat. Browser:"Das Paket hab ich nicht bestellt, das kommt hier nicht rein!"
    Der Portier guckt nun in seiner Liste nach, er weiss, dass im Zimmer Nummer 80 der Http-Browser wohnt, aber der nimmt grundsätzlich nur Pakete entgegen, die er selbst angefordert hat!
    Was für ein Glück, der Portier hat in seinem Hotel einen speziellen Aufzug, mit dem er die (nicht angeforderten) Pakete für Zimmer 80 ans Zimmer 34518 "weiterleiten" kann. Im Zimmer 34581 wohnt der Webserver. Da steht jetzt das Paket vor der Tür vor einem wahren Schrank von Türsteher!
    Paket:"Hallo, der Portier (Router) hat mich hierher weitergeleitet, ich hab da ein Paket für den Webserver!"
    Türsteher:"Klasse, der wohnt hier, und Pakete wollen hier laufend rein, aber damit nicht jeder hier einfach so reinspazieren kann, bin ich hier! Wenn du hier rein willst, musst du erstmal sagen wie du heisst und auch das geheime Kennwort wissen!"
    Das Paket nennt Namen und Passwort, der Türsteher guckt auf seiner Liste nach, ob das Paket überhaupt bekannt ist und lässt das Paket rein.
    Der Webserver hat aber (üblicherweise) ziemlich viel Stress und schnauzt das Paket an:" Hier nimm den Expressaufzug direkt zurück wo du hergekommen bist und sag das nächste Paket kann kommen. Wenn ihr euch nicht beeilt, geb ich den Expressaufzug jemand anderem und ihr müsst wieder zum Portier, neu anmelden!". Das Paket rast zurück, kommt am heimischen Router an und schreit schon von weitem:"Hab Antwort vom Webserver, das nächste Paket soll kommen...." Der heimische Router wartet schon auf das Paket und lässt es sofort durch zum Browser ins Zimmer 80....

    In Wahrheit ist es noch viel komplizierter^^. Aber so ähnlich läuft es ab....

    Wenn nun im Hotel ein neuer Gast im Zimmer 2234 einzieht und einen FTP-Server betreiben will, dann meldet er das beim Portier und der guckt, ob irgend ein anderer Gast schon einen FTP-Server betreibt. Wenn nicht, dann weiss der Portier, das alle (nicht vom Zimmer 21 angeforderten) reinkommenden Pakete, die zu einem FTP-Server wollen, zum Zimmer 2234 weitergeleitet (geforwardet^^) werden müssen....das Zimmer 21 hat nämlich der Browser auch gemietet, so kann er mit diesem Absender seine FTP-Pakete an andere Rechner verschicken.

    Hoffentlich hab ich dich nicht zu sehr verwirrt^^

    ciao
    Andy

  • Ein ganz kleines bischen verwirrent, aber ich mag die Geschichte =). Vielen Dank für die Antwort.
    Also wenn ich das ganze jetzt in AutoIt mittels TCP umsetzten will, wie mach ich das? Wie lass ich meinen Router wissen das der Client (hinterm Router) Daten angefordert hat und sie einfach durchlassen soll? Merkt der Router von alleine das ich Daten an den Server gesendet habe und lässt von daher die Daten einfach durch?

    LG

  • Andy,

    ich liebe Deine Geschichten. :D

    Möchtest Du nicht mal ein Buch über Computer / Internet / oder so schreiben.
    Ich bin sicher für Anfänger / Kinder / Ältere Menschen wäre das eine leicht verständliche Kost,
    die zudem auch noch in sehr ansprechender Weise geschrieben ist.

    Habe selten eine so schöne Erklärung über TCP Paket-geschubse gelesen...

    Freue mich schon auf Deinen nächsten Roman :D

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Hallo,
    Schnuffel, das mit dem Buch wäre ja keine schlechte Idee, allerdings ist der Computerkram nur ein Hobby, da gibt es Spezialisten, die sich wesentlich besser damit auskennen....

    @kloklo,
    Sorry, hatte eigentlich auf deine Frage geantwortet, aber die Antwort wurde wohl statt ins Forum ins NUL-Device geschickt^^

    Zitat

    Wie lass ich meinen Router wissen das der Client (hinterm Router) Daten angefordert hat und sie einfach durchlassen soll? Merkt der Router von alleine das ich Daten an den Server gesendet habe und lässt von daher die Daten einfach durch?

    Die Aufgabe des Routers ist (unter anderem), die Antwortpakete "von draussen" wieder an den richtigen PC im internen Netz weiterzugeben. Hast du dich noch nie gefragt, warum du beim Surfen nie die Websites von anderen Benutzern siehst, die gleichzeitig mit dir auf einer Leitung surfen? Der Router bekommt ja alle Pakete von draussen auf seine "Internetadresse" geschickt, die ist aber völlig anders wie die Adresse der PC´s in eurem heimischen Netz!
    Um mal bei dem Beispiel im Hotel zu bleiben (mir gefällt das irgendwie auch^^) bekäme jeder Bote, der mit einem Paket "nach draussen" geschickt wird, je nach Dienst (HTTP, FTP usw) eine farbige Mütze.
    D.h. alle Boten, die ohne Mütze ins Hotel (Router) kommen, müssen zum Portier, die Boten mit den farbigen Mützen können aber sofort in die Expressaufzüge zu den jeweiligen Diensten und dort ihre Pakete abliefern.
    Wenn du nun bestimmten Diensten erlauben willst, eine Verbindung aus dem Internet zuzulassen, dann musst du dem Router auch mitteilen, wohin er die Pakete schicken soll. Beispiel FTP-Server: Du startest den Server, dieser "lauscht" auf einem bestimmten Port...und wartet....und wartet....und wartet....
    Wenn jetzt jemand sich von ausserhalb mit diesem Server verbinden möchte, dann kennt derjenige ja nicht die IP-Adresse deines Rechners, sondern nur die IP-Adresse des Routers! Also schickt er die Verbindungsanfrage an den Router, und der schaut nun in einer Liste nach, an welchen Rechner im internen Netz er die Anfrage weiterleiten soll. Wenn der "lauschende" Server nicht auf der Liste steht, dann verwirft der Router diee Anfrage und der Server kann warten und warten und warten...
    /*HotelmodusON*/ Wenn allerdings Boten vom Server "nach draussen" geschickt werden, dann haben die ja eine der farbigen Mützen auf! Daher werden diese Boten beim zurückkommen auch wieder ungehindert durchgelassen.....

    ciao
    Andy

  • Das heißt in der Praxis, dass ich das an dem Client dann einfach, dass so mache:

    [autoit]

    TCPSend($MainDocket, "Hallo Server")

    [/autoit][autoit][/autoit][autoit]

    While $Data = ""
    $Data = TCPRecv($ConnectedSocket, 2048)
    WEnd

    [/autoit]


    Und dann weiß der Portier (Router) einfach "Hey, zu den habe ich doch schon nen Boten geschickt und noch keine Antwort bekommen, den lass ich jez mal hoch."
    Ist das echt so einfach?

    Liebe Grüße

  • Richtig, und die "Experten" unterscheiden zwischen

    Router <-> Firewall
    Port Forwarding <-> Filterregeln
    Gateway <-> Router
    dazu kommen noch
    Virtual Server, NAT und ggf SPI

    da heut zu Tage die Geräte viele Funktionen übernehmen, ist Vielen unklar, welche Funktionen ihre Geräte so ausführen!

    Was nicht heissen soll, dass die Geschichte "schlecht" ist :D

    Zitat

    Laughing Man

    "I thought, what I'd do was, I'd pretend I was one of those deaf-mutes"

  • Hi,
    greif doch einfach auf fertige Scripte zurück...die funktionieren mit Sicherheit^^
    Client:

    Spoiler anzeigen
    [autoit]

    $text = inputbox("TCP-Client","Bitte geben sie den Text ein, der zum Server gesendet werden soll")

    [/autoit] [autoit][/autoit] [autoit]

    $Empfaenger_IP = @ipaddress1
    $Port = 33891

    [/autoit] [autoit][/autoit] [autoit]

    TCPStartUp()
    $ConnectedSocket = TCPConnect($Empfaenger_IP, $Port)
    ;msgbox(0,@error,$text)
    Do
    $recv = TCPRecv($ConnectedSocket, 2048)
    Sleep(100)
    Until $recv <> ""
    TCPSend($ConnectedSocket, $text)
    Sleep(2000)

    [/autoit] [autoit][/autoit] [autoit]

    TCPShutdown ()

    [/autoit]


    Server compilieren und laufen lassen, der Client kann dann aus Scite heraus gestartet werden:
    Achtung! Meine Firewall fragt nach, ob der Serverdienst erlaubt werden soll, wenn es Probleme gibt, schau im LOG der Firewall nach oder schalte sie kurzzeitig aus um zu testen, ob es daran liegt.

    Spoiler anzeigen
    [autoit]


    TCPStartup()
    $MainSocket = TCPListen(@IPAddress1, 33891, 100 )

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    while 1 ;solange warten, bis ein Client eine Verbindung aufbaut
    $ConnectedSocket = TCPAccept($MainSocket)
    Tooltip("Server empfangsbereit...")
    If $ConnectedSocket <> -1 Then ExitLoop ;wenn daten empfangen...
    Sleep(100)
    WEnd
    msgbox(0,"TCP-Server","Server hat Verbindung zum Client aufgebaut",1)
    TCPSend($ConnectedSocket,"1") ;info an den client senden

    [/autoit] [autoit][/autoit] [autoit]

    Do
    $recv = TCPRecv($ConnectedSocket, 2048)
    Sleep(100)
    Until $recv <> ""

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    msgbox(0,"server hat empfangen:",$recv)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    WEnd
    TCPShutdown()

    [/autoit]


    Bei diesen beiden Beispielen ist ein "Protokoll" eingebaut :rofl:
    Und zwar sendet der Server, sobald der Client sich mit ihm verbunden hat, eine info "Hey, ich bin bereit" an den Client. Auf diese Info wartet der Client und schickt erst die Nachricht ab, wenn der Server bereit ist. Das ist dann sinnvoll, wenn man genau (z.B. mit Messageboxen) herausfinden möchte, wer was wann genau macht. (man könnte auf diesem Weg z.B. eine Passwortabfrage realisieren)

    Die beiden Scripte laufen in dieser Form lokal auf einem PC, du kannst gerne den Server und Client auf verschiedenen Rechnern in eurem Netzwerk laufen lassen, die IP des Servers sollte aber dem Client mitgeteilt werden.

    ciao
    Andy

    /*EDIT*/ Scripte berichtigt

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (13. Oktober 2009 um 16:53)

  • ctec

    das Problem ist, daß viele den Sachverhalt als "UNGLAUBLICH KOMPLIZIERT" darstellen müssen, um ihre Existenzberechtigung zu erhalten. Natürlich hast du Recht, daß ich einiges zusammengewürfelt habe, aber heutige Router vereinen ca. 90% der von dir beschriebenen Funktionen in einem Gerät. Da blicken teilweise die Hersteller nicht mal mehr richtig durch^^
    Ich habe privat einen Billigstrouter, der zusammen mit einem Kabel und einer DIN A5 -"Installationsbeschreibung" in der Schachtel lag. Da stand grob, was man in den Browser tippen muss, um ins Konfigurationsmenü zu kommen...
    Zwei Minuten später war ich Online und 10 Minuten später hatte ich 90% der Filter angepasst und 4 Rechner im Netz.

    Meine Schwiegereltern haben sich "den Testsieger" als Router andrehen lassen, klasse Sache hab ich mir gedacht! Daß ein Netzwerkprofi als Redakteur das Ding nach Studium des 300-Seiten-Handbuches und der ultimativen Fähigkeiten der Konfiguration überragend bewertet kann ich mir vorstellen. Allerdings fällt Ottonormalverbraucher mit ein bissl Halbwissen die Konfiguration der achtundsiebzigtausend (zu 99% überflüssigen) Parameter doch ziemlich schwer. Vorkonfigurierung der üblichen Einstellungen: Fehlanzeige!
    Nach einer Stunde ergebnisloser rumtelefoniererei mit der Hotline hatte ich die Schnauze gestrichen voll und hab das Ding zurückgebracht. Der Händler war not amused, vor allem, als sein Techniker erklärte, das Gerät sei wohl defekt (ich hätte es "kaputtkonfiguriert"), da auch er damit keine Verbindung herstellen konnte^^. Da hab ich einfach 5 Kartons aus dem Regal geholt, alle aufgerissen und verlangt, er solle mit den "neuen" Geräten einen Versuch machen. Inzwischen war der Geschäftsführer und einige sehr interessierte Kunden eingetroffen....
    Insgesamt eine sehr überflüssige Aktion. Ende vom Lied, ich bekam natürlich den Router in ein "Der ist aber nur mit sehr einfachen Funktionen ausgestattet..."-Modell umgetauscht, der seltsamerweise schon beim Händler nach einer Minute "Installation" einwandfrei funktionierte und nun schon seit Jahren bei den Schwiegereltern unterm Schreibtisch seinen Dienst tut...
    Wenn ich als Handwerker Profiwerkzeug kaufe, dann gehe ich davon aus, dass damit die Arbeit einfacher, besser und schneller zu erledigen ist. Dort ist das auch so! Warum muss bei den "Netzwerkfuzzis" nur immer alles so (künstlich) kompliziert sein?

    Win7 hat schon schöne Ansätze bzgl. "einfacher" Netzwerkverbindungen auf Softwareseite. Opera macht mit Unite mit 3 Mausklicks aus dem lokalen Rechner einen http-/file-/ftp-Server.
    Wieso gibt es noch keine (genormte) Schnittstelle am Router, über welche man sämtliche Einstellungen bzgl. Router <-> Firewall,Port Forwarding <-> Filterregeln,Gateway <-> Router, Virtual Server, NAT
    vollautomatisch vom jeweiligen Programm abwickeln lässt? Alle Infos dazu befinden sich auf dem lokalen Rechner oder sind abrufbar im Netzwerk selbst. Aber scheinbar ist so eine einfache Lösung nicht "professionell" genug....

    ciao
    Andy

  • Andy
    Ich glaube dir ist da ein kleiner Fehler unterlaufen, beide Beispiele sind (bei mir) Identisch, aber Danke.

    @All
    Ich denke ich habe es jetzt verstanden, dass der Router merkt das er an den Server schonmal Daten gesendet hat und dann einfach die nächste(n) vom Server kommenden Pakete einfach durch die Firewall lässt.

    Danke an alle die Mitgewirkt haben mich aufzuklären!

  • Zitat

    beide Beispiele sind (bei mir) Identisch

    ...sorry, da hat der Copypaste-Teufel zugeschlagen. Im Post sind sie jetzt richtig....

  • Zitat

    Ich denke ich habe es jetzt verstanden, dass der Router merkt das er an den Server schonmal Daten gesendet hat und dann einfach die nächste(n) vom Server kommenden Pakete einfach durch die Firewall lässt.

    So in etwa
    zum einen wie schon hier geschrieben sind die Router schon für Internetnutzung für Dummies vorbereitet
    um Serveranwendungen im Netz verfügbar zu machen benötigt man etwas mehr....

    Es ist halt ein Unterschied ob die Verbindung von innen auf den Weg bebracht wird und das Paket nur zurückfinden muss
    oder ob der Router von außen vollgelabert wird.
    Es wird per default geblockt und das ist auch gut so und er muss ja noch das Paket passend weiterleiten,
    draußen eine IP und innen ein Netz in dem einer etwas tut. Also wird Portforwarding gebraucht.

    Es gibt viele schöne Anleitungen für z.B. emule mit Bildern für alle gängigen Router.
    Wenn man nicht weiß welche Ports benötigt werden
    netstat -a
    sniffen
    oder masq-appz war früher eien gute Webseite http://www.doncaster.on.ca/~lnevo/masq/

    gibt es aber leider nicht mehr :(

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o