PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : FTP-Server nicht immer erreichbar


WhiteVelvet
2013-08-12, 14:01:51
Hallo zusammen,

wir übertragen hier alle 15 Minuten Daten über FTP zu einem FTP-Server eines Firmenpartners. Das klappt auch eigentlich, aber es kommt immer wieder mal vor, dass die Verbindung hängt, etwa einmal am Tag für 1 Stunde, mal für 2 Stunden oder auch weniger.

Jetzt gerade ist dieser Zustand wieder da. Versuche ich eine Verbindung mit Filezilla sehe ich folgendes im Log:


Status: Connecting to xyz:21...
Status: Connection established, waiting for welcome message...
Response: 220 Microsoft FTP Service
Command: USER xyz
Response: 331 Password required for xyz.
Command: PASS *********
Response: 230 User xyz logged in.
Command: SYST
Response: 215 Windows_NT
Command: FEAT
Response: 500 'FEAT': command not understood
Status: Connected
Status: Retrieving directory listing...
Command: PWD
Response: 257 "/xyz" is current directory.
Command: TYPE I
Response: 200 Type set to I.
Command: PASV
Response: 227 Entering Passive Mode (10,54,100,15,10,152).
Status: Server sent passive reply with unroutable address. Using server address instead.
Command: LIST
Response: 425 Can't open data connection.
Error: Failed to retrieve directory listing
Response: 421 Timeout (30 seconds): closing control connection.
Response: 421 Terminating connection.
Error: Connection closed by server


Das ist nun im passiven Modus. Im aktiven Modus bekomme ich dieses hier:


Status: Connecting to xyz:21...
Status: Connection established, waiting for welcome message...
Response: 220 Microsoft FTP Service
Command: USER xyz
Response: 331 Password required for xyz.
Command: PASS *********
Response: 230 User xyz logged in.
Command: SYST
Response: 215 Windows_NT
Command: FEAT
Response: 500 'FEAT': command not understood
Status: Connected
Status: Retrieving directory listing...
Command: PWD
Response: 257 "/xyz" is current directory.
Command: TYPE I
Response: 200 Type set to I.
Command: PORT 10,11,9,23,209,181
Error: Connection timed out
Error: Failed to retrieve directory listing


Wieso kann er das Verzeichnis nicht auflisten? Ich habe mich bereits mit der Partner-IT in Verbindung gesetzt, aber die wissen auch nicht, woran es liegt. Liegt das Problem auf meiner Seite? Active/Passive macht ja keinen Unterschied offensichtlich... kennt jemand so eine Fehlermeldung? Danke für sachdienliche Hinweise!

Aachenmade
2013-08-12, 19:53:17
Wahrscheinlich sind die entsprechenden Ports für die Datenverbindung in der Firewall nicht geöffnet, oder nicht an den richtigen Server weitergeleitet.

Außerdem ist bei dem FTP-Server nicht die richtige externe Adresse eingestellt...

Zafi
2013-08-12, 20:21:08
Active/Passive sagt nur aus, wer den Port festlegt, über den die Daten laufen sollen. Bei Active gibt sie der Client vor, bei Passive fragt er dagegen den Server.

Ich vermute mal, dass es zu einem Time-out kommt, weil einige Zeit keine Daten übertragen werden. Wenn dann wieder Daten übertragen werden sollen, dann baut er wieder eine Verbindung auf, was auch klappt. Jedoch wird dann beim aushandeln eines Ports einer gewählt, der nicht frei ist. Und so warten beide Seiten auf eine Antwort die nicht kommt. Bis schließlich die Verbindung erneut unterbrochen wird, eine neue Verbindung aufgebaut wird und ein neuer Port ausgehandelt wird. Das geht dann so lange weiter, bis schließlich ein Port gewählt wird, der geht und alles wieder funktioniert.

Schuld würde ich sagen, ist auf Client-Seite eine Firewall (Router-, Virenkiller- oder Windows-Firewall). Prüf mal alles durch. Teste vielleicht auch mal mit deaktiverten Firewalls, ob es dann auch Probleme gibt. Falls nicht hast du deinen Schuldigen und kannst es weiter eingrenzen. Bedenke, dass Provider auch gerne mal Ports sperren. Daher wäre es vielleicht sinnvoll den Port-Bereich zu definieren, über den die Daten rollen sollen. Das kannst du unter Bearbeiten -> Einstellungen -> Verbindung -> FTP -> Aktiver Modus.

Parallel dazu kannst du beim Filezilla unter Bearbeiten -> Einstellungen -> Verbindung -> FTP -> das Häckchen in "FTP-Verbindungserhaltungs-Befehl senden" aktivieren. Dann bleibt eine einmal funktionierende Verbindung aktiv, da dem Server Aktivität vorgegaukelt wird, so dass der sie nicht trennt (soweit ich weiß). Solltest du nämlich an der Port-Front keinen Erfolg haben, dann tritt durch diese Maßnahme das Problem zumindest seltener auf.

/dev/NULL
2013-08-12, 21:28:27
Du greifst auf einen Partner zu und der Server da sendet Dir seine private IP.
Normalerweise sollte auf der Partner Firewall ein entsprechendes FTP-Nat Modul diese Adresse
a) umschreiben und
b) den beteiligten Port entsprechend öffnen
Da hat wohl jemand bei deren Firewall geschlampt.

Aktiver Modus ist eigentlich (für Heimanwender) nie funktionierend, da der Server dann eine Verbindung zu Dir aufbaut (statt bei Passiv einen neuen Port am Server zu öffnen). Aber da FTP halt neben der Verbindung über Port 21 auch noch eine extra Verbindung auf 20 signalisiert (für die Daten) muss die Firewall beim Dienstleister das auch umsetzen. macht aber heutzutage eigentlich jede Mittlemäßige Firewall.. Wenn die da natürlich nen DLink-DSL Router o.ä. haben und nur Port 21 auf ihren Server weiterleiten reicht das nicht..

WhiteVelvet
2013-08-13, 10:45:03
Danke erstmal für die Antworten. Ich warte gerade darauf, dass es wieder passiert. Im Moment funktioniert die Übertragung. Der Einfachheit halber habe ich bisher nur von Filezilla geredet, weil ich damit testen kann, ob es gerade geht.

Der eigentliche Datentransfer findet aber mit einem Script statt, das cURL nutzt. Da ich mal Probleme mit unvollständig übertragenen Dateien hatte, sichere ich das alles über md5 Dateien ab. Ich erstelle von der lokalen Datei eine md5, lade sie hoch und lade sie wieder runter und erstelle auch davon eine md5, um sie zu vergleichen. Und da bekomme ich im Fehlerfall eine 0KB Datei zurück. cURL liefert keine Fehlermeldung, nur anhand der 0KB md5 erkenne ich, dass etwas nicht stimmt.

Ich hatte auch mal die Vermutung, dass die Session nicht korrekt beendet wird und man am Ende zu viele offene Verbindungen hat, aber ich gehe davon aus, dass der Standard-cURL Befehl so etwas automatisch korrekt macht.

Ich müsste also mal schauen, ob ich cURL über einen Parameter den active-mode und eine Portrange mitgebe, oder? WENN es das Problem ist...

Lokadamus
2013-08-13, 19:28:06
Der eigentliche Datentransfer findet aber mit einem Script statt, das cURL nutzt. Da ich mal Probleme mit unvollständig übertragenen Dateien hatte, sichere ich das alles über md5 Dateien ab.

Ich müsste also mal schauen, ob ich cURL über einen Parameter den active-mode und eine Portrange mitgebe, oder? WENN es das Problem ist...Hast du mal überprüft, ob es nicht reicht den Errorlevel abzufragen?
Bei Windows/ Dos wäre es die Variable %errorlevel% bei Linux/ Unix dürfte es $? sein. Die hat bei erfolgreicher Ausführung eines Befehls den Wert 0.

https://www.google.de/search?q=curl+active+mode <-- Da solltest du genug Hinweise finden. In wie weit der Portrange angegeben kann, weiß ich nicht. Ich hatte irgendwann mal versucht per Telnet über FTP Daten zu versenden und da war irgendwann nur noch irgendwas von "Multiplizieren Sie Zahl YXZ mit 256 (oder einem ähnlichem Wert) um den Port zu erhalten und bauen sie eine 2. Verbindung über diesen Port auf und dann ..." und ich habe daraufhin die Sache mit Telnet und FTP beendet.
Kannst du ansonsten bei der anderen Firma eine VPN Verbindung einrichten? Sowas ist ziemlich praktisch, vor allem da FTP/ Telnet alles im Klartext überträgt.

Birdman
2013-08-13, 21:42:39
Um den Port beim passive mode zu errechnen, nimmt man von
Response: 227 Entering Passive Mode (10,54,100,15,10,152).
die zweitletze Zahl, multipliziert diese mit 256 und addiert schlussendlich noch die letzte Zahl.
In dem Beispiel also: (10*256)+152 --> Port 2712

WhiteVelvet
2013-08-14, 09:36:57
Gestern habe ich gehört, dass der entfernte Rechner eine Windows XP Maschine ist... die wollen die bald auf eine AS400 upgraden... ob das etwas ausmacht? Gestern war es wieder zweimal passiert für etwa 30 Minuten...

VPN ist nicht möglich schätze ich mal, da der Partner sehr viele Kunden hat, die das alles auf die gleiche Weise machen. Limitiert hier vielleicht deren XP Maschine? Zu viele concurrent connections oder sowas?