Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Neidentifikovatelná chyba při připojování prostřednictvím FTP clienta v Linuxu

Na Linuxové distribuci Puppy se pokouším připojit ke svému PC s Win SBS 2003 prostřednictvím FTP clienta. Sice mi to žádnou chybu nenahlásí a k připojení pravděpodobně dojde, ale po chvíli se to odpojí, viz níže uvedený LOG_1. Po celou dobu quasipřipojení mi to dává hlášku: „Receiving file names...“

Pokud se však stejným klientem připojuji buď k veřejně přístupným serverům coby Anonymous anebo i k vlastnímu heslem zabezpečenému, co mám u poskytovatele, je vše v pořádku.

Ze stejného počítače s Win XP se připojuji bez problému.

Jinak z Linuxu jsem zkoušel se připojovat více typy FTP klientů, i známým konzolovým ncftp, ale dopadlo to stejně, resp. stejně špatně.

Na FTP serveru mi to do logu zaznamená výsledky, jež jsou rovněž uvedeny níže (viz LOG_2)

LOG_1

Looking up 154.193.201.198
Trying 154.193.201.198:21
Connected to 154.193.201.198:21
220 Microsoft FTP Service
USER Paullus
331 Password required for Paullus.
PASS xxxx
230 User Paullus logged in.
SYST
215 Windows_NT
TYPE I
200 Type set to I.
PWD
257 "/" is current directory.
Loading directory listing / from server (LC_TIME=cs_CZ)
PASV
Connection to 154.193.201.198 timed out
Disconnecting from site 154.193.201.198

LOG_2

#Software: Microsoft Internet Information Services 6.0
#Version: 1.0
#Date: 2008-01-15 23:47:55
#Fields: time c-ip cs-method cs-uri-stem sc-status sc-win32-status
23:47:55 154.193.201.198 [27]USER Paullus 331 0
23:47:55 154.193.201.198 [27]PASS - 230 0
23:53:35 154.193.201.198 [28]USER Paullus 331 0
23:53:35 154.193.201.198 [28]PASS - 230 0
23:59:09 154.193.201.198 [29]USER Paullus 331 0
23:59:09 154.193.201.198 [29]PASS - 230 0

Předmět Autor Datum
hm, do FTP protokolu sa nevyznam uplne do detailov (nedaval som vtedy v skole pozor :-D), ale nemoze…
MM.. 16.01.2008 01:32
MM..
MM, asi máš pravdu, zatím to vypadá na nějaké šachy s tím pasivním módem. V Linuxu mi to chodí způso…
Paullus 16.01.2008 01:55
Paullus
nemas na tom serveri nejaky firewall ktory toho moc blokuje? porty >1023, incomming, alebo port 23 i…
MM.. 16.01.2008 02:18
MM..
Problém je jednoznačně v pasivním režimu připojení (i LIST direktiva stahuje data v datovém spojení,…
touchwood 16.01.2008 07:13
touchwood
MM a Touchwoode, určitě máte pravdu, že mám něco špatně nastaveného na serveru, ale jak s tím koresp…
Paullus 16.01.2008 08:40
Paullus
ale jak s tím koresponduje skutečnost, že z každého počítače s Windows (včetně PDA s WM5) se k němu…
MM.. 16.01.2008 13:25
MM..
Tak ve Windows jsem už ten PAS problém odstranil. Chtělo to údajně na routeru nastavit forwarding po…
Paullus 16.01.2008 13:47
Paullus
:-) Ano nenastaveny port forwarding mohol byt problem, ako pisal touchwood (4. bod) skus sa na to pr…
MM.. 16.01.2008 14:35
MM..
Díky, večer dám vědět. V lokální síti mi to chodí i v Linuxu v obojím módu, což vypadá nadějně.
Paullus 16.01.2008 15:33
Paullus
Tak naděje zhasla mláda, siroty po ní zůstaly... Připojím se k serveru stejně blbým způsobem, jako…
Paullus 16.01.2008 22:10
Paullus
Takže se vracím k mému problému. Sehnal jsem si FTP clienta Mozillu, který dává podrobné reference o…
Paullus 20.01.2008 22:13
Paullus
no podle mě: 1. Windowsoví klienti si udělají díru ve svém firewallu a jedou "aktiv" 2. Linux natvr…
touchwood 20.01.2008 22:34
touchwood
TW, díky moc, zítra to s někým kvalifikovanějším zkusím. Pak dám vědět, jak jsem dopadl.
Paullus 20.01.2008 22:47
Paullus
Tak jsem zkusil se připojit ke shora uvedenému FTP serveru lokálně a funguje to naprosto bez problém…
Paullus 06.02.2008 22:52
Paullus
Obávám se, že jsou pouze tato 2 řešení: 1. pro Pasivní připojení: forwardovat porty TCP (např. 6000…
touchwood 07.02.2008 07:15
touchwood
TW díky, ale Ty trpíš syndromem vědeckého pracovníka, který apriori předpokládá, že mu všichni rozum…
Paullus 07.02.2008 21:51
Paullus
ok, zkusíme to jinak - co ti dělá router v síti kde máš ten server? Pokud by to byl nějaký rozumný H… poslední
touchwood 07.02.2008 22:40
touchwood

hm, do FTP protokolu sa nevyznam uplne do detailov (nedaval som vtedy v skole pozor :-D), ale nemoze byt problem v pasivnom mode? Vie tvoj server pasivny mod? Skus sa nan pripojit z nejakych Win z totalcommandera, v nom sa da nastavit pasivny mod ze ci ano alebo nie, ci to ten FTP server zvlada.
Vseobecne tak ako to popisujes akokeby bol problem s tym tvojim FTP serverom, ze nevie nieco co ten klient od neho chce. Ine FTP servery pises ze s tym klientom funguju.
Mohol by byt mozno nejaky problem s datovym FTP portom ale to je prave to co u FTP neviem ze co ide v pasivnom mode cez ake porty :)

MM, asi máš pravdu, zatím to vypadá na nějaké šachy s tím pasivním módem. V Linuxu mi to chodí způsobem, který jsem popsal shora, jen v případě pokud mám passiv mod zaškrtnutý. Jinak se mi to připojit odmítne.

Naopak ve Windows (v TC), když passiv mod zaškrtnu, tak se mi to při připojování zasekne. To však neplatí v případě, pokud se připojuji k jiným serverům kromě svého, kde se připojím vždy bez ohledu na mod.

Vypadá to tedy se vší pravděpodobností na blbé nastavení mého FTP serveru, ale jak na něj koukám, není tam co nastavovat.

Problém je jednoznačně v pasivním režimu připojení (i LIST direktiva stahuje data v datovém spojení, nikoli řídicím) - proto ti nefunguje jak linuxový ftp klient, tak TC.

Možné příčiny proč to nefunguje:

- blokované porty >1024 na serveru
- zakázaný pasivní režim na serveru
- nějak divně nastavený firewall na serveru nebo klientu
- NAT/PAT mezi serverem a klientem bez odpovídajícího režimu přepisu dat v paketu

více viz: http://pc.poradna.net/article/view/5-jak-funguje-ft p

ale jak s tím koresponduje skutečnost, že z každého počítače s Windows (včetně PDA s WM5) se k němu připojím

Tak este raz: mas PC s Windows. Spustis TC. S nezaskrtnutym "passive mode" sa pripojis a vsetko funguje, a so zaskrtnutym passive mode to nefunguje. Je to tak?
Ak je to tak ako pisem, tak problem je ako uz sme pisali v tom ze nieco blokuje urcitu poziadavku, kedze na ine FTP servery sa z toho isteho PC dostanes aj v pasivnym modom, tak to nieco co blokuje musi byt na tvojom FTP serveri.
Na vysvetlenie - rozdiel medzi aktivnym a pasivnym FTP modom je v tom, ze kto (server alebo klient) vytvori datove spojenie, a na akom porte. T.j. ak aktivny ide a pasivny nejde alebo naopak, tak najpravdepodobnejsia pricina je firewall ktory spojenie na patricnom porte urcitym smerom pusti ale opacnym nie. Alebo mas blbo nastaveny ten FTP server, aky FTP server tam mas, nejaky od MS? Nie je na Win SBS nejaky Win firewall? Ak ano skus pozriet do vynimiek FW ci tam nie je nastavenie pre ftp.

Tak ve Windows jsem už ten PAS problém odstranil. Chtělo to údajně na routeru nastavit forwarding portu 20 na PC s Win 2003 SBS. Tím nám chodí FTP v pasivním i aktivním módu.

Jestli to mělo vliv i na ten linuxový PC zjistím až doma, protože mně obecně FTP v lokální síti přes nelokální IP adresy nechodí.

Jinak FTP server je v IIS toho operačního systému a ty SBSka nastavoval můj mladej, takže ani nevím, zda to nějaký firewall má a pokud ano, jak je nastavený. Tenhle systém je na mne jako na lamu příliš složitý, abych se v něm hrabal a dokonce jej přenastavoval. V takovém případě bych se vystavoval nebezpečí, že syn vůči mně poruší nějaké (nevím přesně kolikáté v pořadí) boží přikázání.

:-)
Ano nenastaveny port forwarding mohol byt problem, ako pisal touchwood (4. bod)
skus sa na to pripojit "z vonku" (mimo internej LAN) aj z Win cez TC, aj z linuxu. Ak mas server za routerom tak moze byt rozdiel v tom ci sa pripajas zvonku alebo z internej LAN.
Ak to pojde z vonku cez TC (Win) aj v passive mode, tak uz by to IMHO malo byt ok aj z toho linuxu. Skus a daj vediet. ;-)

Tak naděje zhasla mláda, siroty po ní zůstaly...

Připojím se k serveru stejně blbým způsobem, jako jsem popisoval shora, tj. s následným odpojením. Pokud používám konzolového klienta - program "ncftp", funguje to takhle u obou módů.

V případě, že použiji grafického klienta, obdobně blbě se připojím v pasivním módu, v aktivním to hlásí z důvodů mně nepochopitelných lokální port a následující údaje:

PORT 192,168,15,11,210,139

500 Invalid PORT Command.
Invalid response '5' received from server.
Disconnecting from site XXX.XXX.XXX.XXX

Aby to bylo ještě složitější, tak na ten svůj prokletý FTP server se nemohu dostat ani s PDA s WM5, pokud jsem připojený ke svému domácímu routeru s Wi-Fi (k jiným FTP serverům bez problémů),
ale
tím samým PDA při spojení přes mobil s HSDPA se k němu připojím.

Tohle asi nebude chtít IT specialistu, ale excorcistu.

Takže se vracím k mému problému. Sehnal jsem si FTP clienta Mozillu, který dává podrobné reference o spojení a on mi podal informaci, kterou dokumentuji v níže uvedeném logu.

Jinak pro pořádek připomínám, že spojení provádím v OS Linux v pasivním módu, zatímco aktivní mi vyhazuje chybu. Cílem připojení je server s Win SBS 2003, se kterým jinak mohu normálně komunikovat přes Terminal Services i SQL server.

Záhadou však zůstává, proč na počítači, který se mi k tomu serveru přes FTP v Linuxu nepřipojí, se mohu ve Windows přes FTP připojovat v módu aktivním i pasivním.

Takže ten log:
Stav: Odpojen od serveru
Trace: CFtpControlSocket::ResetOperation(6 6)
Trace: CControlSocket::ResetOperation(66)
Trace: ControlSocket.cpp(979): CRealControlSocket::ContinueConnect(0xbfbce60c) m_pEngine=0x894aee8 caller=0x8b0eda8
Stav: Připojuji se k XXX.XXX.XXX.XXX:21...
Stav: Spojení navázáno, čekám na uvítací zprávu...
Trace: CFtpControlSocket::OnReceive()
Od pověď: 220 Microsoft FTP Service
Trace: CFtpControlSocket::SendNextCommand( )
Příkaz: USER Paullus
Trace: CFtpControlSocket::OnReceive()
Odpo věď: 331 Password required for Paullus.
Trace: CFtpControlSocket::SendNextCommand ()
Příkaz: PASS ***********
Trace: CFtpControlSocket::OnReceive()
Odpověď: 230 User Paullus logged in.
Stav: Připojen
Trace: CFtpControlSocket::Reset Operation(0)
Trace: CControlSocket::ResetOperation( 0)
Stav: Přijímám výpis složky...
Trace: CFtpControlSocket::SendNextComman d()
Trace: CFtpControlSocket::ChangeDirSend()
Příka z: PWD
Trace: CFtpControlSocket::OnReceive()
Odpově ď: 257 "/" is current directory.
Trace: CFtpControlSocket::ResetOperatio n(0)
Trace: CControlSocket::ResetOperation(0)
Trace : CFtpControlSocket::ParseSubcommandResult(0)
Trace : CFtpControlSocket::ListSubcommandResult()
Trace: CFtpControlSocket::SendNextCommand()
Trace: CFtpCon trolSocket::TransferSend()
Příkaz: TYPE I
Trace: CFtpControlSocket::OnReceive()
Odpověď: 2 00 Type set to I.
Trace: CFtpControlSocket::TransferParseResponse ()
Trace: CFtpControlSocket::SendNextCommand()
Trac e: CFtpControlSocket::TransferSend()
Příkaz: PASV

Na tohle místě se to zadřípne a Mozilla se mi už asi půl hodiny drze směje do očí...

no podle mě:

1. Windowsoví klienti si udělají díru ve svém firewallu a jedou "aktiv"
2. Linux natvrdo jede v pasivu a protože dostává nesmyslnou hlášku o portu (viz. PORT 192,168,15,11,210,139), nemůže se spojit. To znamená, že tvůj NATující router buď nepodporuje, nebo nemá zapnutu podporu pro FTP. Zkus se tam kouknout, jestli v něm nenajdeš volbu pro enablování FTP.
3. Linux v aktivním režimu nejede, protože mu iptables lokálně blokují naslouchací port
4. (pravděpodobně) nemáš forwardovány pasivní porty (rozsah pasivních portů nakonfiguruješ podle tohoto kábéčka: support.microsoft.com )

Tak jsem zkusil se připojit ke shora uvedenému FTP serveru lokálně a funguje to naprosto bez problémů. Když se však zkusím připojit se stejným (pasivním) nastavením dálkově, po vyhození tohoto logu se celý proces zastaví v následující poloze:

Stav: Zjišťuji IP adresu xxx.xxx.xxx.xxx
Trace: ControlSocket.cpp(979): CRealControlSocket::ContinueConnect(0x8ab9170) m_pEngine=0x895be00 caller=0x8aedbb8
Stav: Připojuji se k xxx.xxx.xxx.xxx:21...
Stav: Spojení navázáno, čekám na uvítací zprávu...
Trace: CFtpControlSocket::OnReceive()
Od pověď: 220 Microsoft FTP Service
Trace: CFtpControlSocket::SendNextCommand( )
Příkaz: USER UserX
Trace: CFtpControlSocket::OnReceive()
Odpově ď: 331 Password required for UserX.
Trace: CFtpControlSocket::SendNextCommand()
Příkaz: PASS ***********
Trace: CFtpControlSocket::OnReceive()
Odpověď: 230 User UserX logged in.
Trace: CFtpControlSocket::SendNextCommand()
Př íkaz: SYST
Trace: CFtpControlSocket::OnReceive()
O d pověď: 215 Windows_NT
Trace: CFtpControlSocket::SendNextComma nd()
Příkaz: FEAT
Trace: CFtpControlSocket::OnRece i ve()
Odpověď: 211-FEAT
Trace: CFtpControlSocket::O n Receive()
Odpověď: SIZE
Odpověď: MDTM
Odpověď: 211 END
Stav: Připojen
Trace: CFtpControlSocket::Reset Operation(0)
Trace: CControlSocket::ResetOperation ( 0)
Stav: Přijímám výpis složky...
Trace: CFtpControlSocket::SendNextComman d()
Trace: CFtpControlSocket::ChangeDirSend()
Přík a z: PWD
Trace: CFtpControlSocket::OnReceive()
Odpov ě ď: 257 "/" is current directory.
Trace: CFtpControlSocket::ResetOperatio n(0)
Trace: CControlSocket::ResetOperation(0)
Trac e : CFtpControlSocket::ParseSubcommandResult(0)
Trac e : CFtpControlSocket::ListSubcommandResult()
Trace: CFtpControlSocket::SendNextCommand()
Trace: CFtpCo n trolSocket::TransferSend()
Příkaz: TYPE I
Trace: CFtpControlSocket::OnReceive()
Odpověď: 2 00 Type set to I.
Trace: CFtpControlSocket::TransferParseResponse ()
Trace: CFtpControlSocket::SendNextCommand()
Tra c e: CFtpControlSocket::TransferSend()
Příkaz: PASV

Pokud se podívám přes TS na FTP server, ten mi hlásí, že jsem řádně přihlášen, avšak po nějaké době v rámci refreshe se to spojení ztratí.
Protože mi to ale lokálně chodí, tak bych raději s těmi porty, jak radí TW, příliš nelaboroval, abych si server "neodzabezpečil".

//EDIT: Asi po 10 min. mi to Filezilla sama odpojila a v logu mi napsala:

Trace: CRealControlSocket::OnClose()
Chyba: Odpojen od serveru
Trace: CFtpControlSocket::ResetOperation(6 6)
Trace: CControlSocket::ResetOperation(66)
Trace: CFtpControlSocket::ResetOperation(66)
Trace: CCont rolSocket::ResetOperation(66)
Chyba: Nemohu získat výpis složky

Obávám se, že jsou pouze tato 2 řešení:

1. pro Pasivní připojení: forwardovat porty TCP (např. 6000-6100) na tvůj Win server a zároveň na tyto porty omezit FTP server IIS (viz link). Předpoklad je samozřejmě ten, že máš tzv. chytrý router, který dokáže transformovat PORT příkazy serveru. Případně můžeš použít jiný FTP server, kterému je možno nastavit v konfiguraci jinou IP adresu pro PORT příkaz

2. pro Aktivní připojení: zkontrolovat, zda máš v puppy funkční oba ftp iptables helper moduly (tj. buď zakompilované nebo zavedené pomocí insmod - v tvém případě je to ftp_conntrack). Pokud ne, či pokud to nefunguje, bude asi potřeba otevřít na Puppy v iptables, tabulka INPUT porty 1024-65535 (případně méně, ale nastavit v klientovi dané porty jako porty pro PORT direktivu). Z hlediska bezpečnosti pak asi bude vhodné povolit to jen pro (vnější) IP adresu tvého serveru/routeru, i když toto řešení se mi vůbec nelíbí.

TW díky, ale Ty trpíš syndromem vědeckého pracovníka, který apriori předpokládá, že mu všichni rozumějí (z těchto důvodu kvantoví fyzici na chodbách zastavují uklizečky a vysvětlují jim teorii superstrun).

Já si naopak připadám jako cirkusový medvěd, který po letech výcviku zvládl objet šapitó na bicyklu a teď se po něm chce, aby si vycentroval zadní kolo a udělal tuning na přesmykovači Shimano...

Zpět do poradny Odpovědět na původní otázku Nahoru