У меня возникла странная проблема с подключением к FTP-серверу клиента, на котором работает FileZilla v.0.9.41. Сервер работает за NAT-маршрутизатором, поэтому он настроен на прием пассивных подключений. Кажется, это работает с НЕКОТОРЫМИ клиентами, но не со ВСЕМИ. Например, используя Transmit с моего Mac, я подключаюсь нормально. Но при использовании Core FTP из Windows возникает следующая ошибка:
PORT command failed
Error loading directory...
И сидит там бесконечно. При использовании передачи это не проблема.
Я не использую брандмауэр и не использую программный брандмауэр. Каждое подключаемое устройство находится в одной подсети и использует один и тот же маршрутизатор для выхода в Интернет. Учетные данные такие же, и базовая конфигурация такая же (пассивная, двоичная и т. Д.).
Я заблудился, пытаясь понять, почему один клиент подключается без проблем, в то время как большинство других подключаются, но не позволяют мне перемещаться по структуре каталогов.
Кто-нибудь видел такое поведение раньше, и если да, есть ли у кого-нибудь мысли о решении?
ПРИМЕЧАНИЕ. У меня нет доступа к серверу FileZilla, но у меня есть копии файлов конфигурации XML для устранения неполадок.
РЕДАКТИРОВАТЬ: см. Журнал ниже.
Welcome to Core FTP, release ver 2.2, build 1798 (x86.U) -- � 2003-2014
WinSock 2.0
Mem -- 2,097,151 KB, Virt -- 2,097,024 KB
Started on Wednesday September 03, 2014 at 15:45:PM
Connect socket #796 to <Server IP Address>, port 21...
220-FileZilla Server version 0.9.41 beta
220-written by Tim Kosse (Tim.Kosse@gmx.de)
220-FileZilla Server version 0.9.41 beta
USER <User>
331 Password required for <User>
PASS **********
230 Logged on
SYST
215 UNIX emulated by FileZilla
Keep alive off...
CWD /Inbound/
250 CWD successful. "/Inbound" is current directory.
PASV
PORT command failed
Error loading directory...
А вот конфиг сервера FileZilla:
<FileZillaServer>
<Groups />
<Users>
<User Name="USER">
<Option Name="Pass">pass</Option>
<Option Name="Group" />
<Option Name="Bypass server userlimit">0</Option>
<Option Name="User Limit">0</Option>
<Option Name="IP Limit">0</Option>
<Option Name="Enabled">1</Option>
<Option Name="Comments" />
<Option Name="ForceSsl">0</Option>
<IpFilter>
<Disallowed />
<Allowed />
</IpFilter>
<Permissions>
<Permission Dir="C:\inetpub\FTP">
<Option Name="FileRead">1</Option>
<Option Name="FileWrite">1</Option>
<Option Name="FileDelete">1</Option>
<Option Name="FileAppend">1</Option>
<Option Name="DirCreate">0</Option>
<Option Name="DirDelete">0</Option>
<Option Name="DirList">1</Option>
<Option Name="DirSubdirs">1</Option>
<Option Name="IsHome">1</Option>
<Option Name="AutoCreate">0</Option>
</Permission>
</Permissions>
<SpeedLimits DlType="0" DlLimit="10" ServerDlLimitBypass="0" UlType="0" UlLimit="10" ServerUlLimitBypass="0">
<Download />
<Upload />
</SpeedLimits>
</User>
</Users>
<Settings>
<Item name="Serverports" type="string">21</Item>
<Item name="Number of Threads" type="numeric">2</Item>
<Item name="Maximum user count" type="numeric">0</Item>
<Item name="Timeout" type="numeric">120</Item>
<Item name="No Transfer Timeout" type="numeric">600</Item>
<Item name="Allow Incoming FXP" type="numeric">1</Item>
<Item name="Allow outgoing FXP" type="numeric">1</Item>
<Item name="No Strict In FXP" type="numeric">0</Item>
<Item name="No Strict Out FXP" type="numeric">0</Item>
<Item name="Login Timeout" type="numeric">60</Item>
<Item name="Show Pass in Log" type="numeric">0</Item>
<Item name="Custom PASV IP type" type="numeric">1</Item>
<Item name="Custom PASV IP" type="string">SAME AS OUTWARD FACING SERVER IP</Item>
<Item name="Custom PASV min port" type="numeric">0</Item>
<Item name="Custom PASV max port" type="numeric">0</Item>
<Item name="Initial Welcome Message" type="string">%v
written by Tim Kosse (Tim.Kosse@gmx.de)
Please visit http://sourceforge.net/projects/filezilla/</Item>
<Item name="Admin port" type="numeric">14147</Item>
<Item name="Admin Password" type="string"></Item>
<Item name="Admin IP Bindings" type="string"></Item>
<Item name="Admin IP Addresses" type="string"></Item>
<Item name="Enable logging" type="numeric">0</Item>
<Item name="Logsize limit" type="numeric">0</Item>
<Item name="Logfile type" type="numeric">0</Item>
<Item name="Logfile delete time" type="numeric">0</Item>
<Item name="Use GSS Support" type="numeric">0</Item>
<Item name="GSS Prompt for Password" type="numeric">0</Item>
<Item name="Download Speedlimit Type" type="numeric">0</Item>
<Item name="Upload Speedlimit Type" type="numeric">0</Item>
<Item name="Download Speedlimit" type="numeric">10</Item>
<Item name="Upload Speedlimit" type="numeric">10</Item>
<Item name="Buffer Size" type="numeric">32768</Item>
<Item name="Custom PASV IP server" type="string">http://ip.filezilla-project.org/ip.php</Item>
<Item name="Use custom PASV ports" type="numeric">0</Item>
<Item name="Mode Z Use" type="numeric">0</Item>
<Item name="Mode Z min level" type="numeric">1</Item>
<Item name="Mode Z max level" type="numeric">9</Item>
<Item name="Mode Z allow local" type="numeric">0</Item>
<Item name="Mode Z disallowed IPs" type="string"></Item>
<Item name="IP Bindings" type="string">LOCAL IP ADDRESS</Item>
<Item name="IP Filter Allowed" type="string"></Item>
<Item name="IP Filter Disallowed" type="string"></Item>
<Item name="Hide Welcome Message" type="numeric">0</Item>
<Item name="Enable SSL" type="numeric">0</Item>
<Item name="Allow explicit SSL" type="numeric">1</Item>
<Item name="SSL Key file" type="string"></Item>
<Item name="SSL Certificate file" type="string"></Item>
<Item name="Implicit SSL ports" type="string">990</Item>
<Item name="Force explicit SSL" type="numeric">0</Item>
<Item name="Network Buffer Size" type="numeric">65536</Item>
<Item name="Force PROT P" type="numeric">0</Item>
<Item name="SSL Key Password" type="string"></Item>
<Item name="Allow shared write" type="numeric">0</Item>
<Item name="No External IP On Local" type="numeric">1</Item>
<Item name="Active ignore local" type="numeric">1</Item>
<Item name="Autoban enable" type="numeric">0</Item>
<Item name="Autoban attempts" type="numeric">10</Item>
<Item name="Autoban type" type="numeric">0</Item>
<Item name="Autoban time" type="numeric">1</Item>
<Item name="Service name" type="string"></Item>
<Item name="Service display name" type="string"></Item>
<Item name="Enable HASH" type="numeric">0</Item>
<Item name="Disable IPv6" type="numeric">0</Item>
<SpeedLimits>
<Download />
<Upload />
</SpeedLimits>
</Settings>
</FileZillaServer>
РЕДАКТИРОВАТЬ: после использования ftptest.net для устранения неполадок я обнаружил следующее:
Command: PWD Reply: 257 "/" is current directory.
Status: Current path is /
Command: TYPE I
Reply: 200 Type set to I
Command: PASV
Reply: 227
Entering Passive Mode (172,23,23,130,234,97)
Error: Server returned unroutable private IP address in PASV reply
Make sure the server is configured to allow passive mode connections.
If the server is behind a NAT router, make sure the server knows its external IP address.
The range of ports used for passive mode must be opened in all involved firewalls.
The range of ports used for passive mode must be forwarded by all involved NAT routers.
Try uninstalling all firewalls and plug your computer directly into your modem, thus bypassing the router.
Из этого я могу сделать вывод, что есть проблема на стороне сервера, но теперь мой вопрос заключается в том, почему я могу без проблем подключаться к некоторым клиентам (в частности, к Transmit на Mac), в то время как другие активно отключены (например, Core FTP в Windows) ?
Клиенту необходимо изменить настройку
<Item name="Custom PASV IP" type="string">SAME AS OUTWARD FACING SERVER IP</Item>
на IP-адрес маршрутизатора, выполняющего NAT.
Согласно разделу 4.1.2 в RFC 959, после отправки PASV:
Ответ на эту команду включает адрес хоста и порта, который прослушивает этот сервер.
После этого клиент может ответить другим списком IP-адреса и порта, который он желает использовать.
Некоторые клиенты, такие как FileZilla, будут проверять, что IP-адрес и порт, указанные в ответе, действительно доступны. Другие просто предполагают, что они могут продолжить работу в том же сокете, с которого они начали. Первое, вероятно, более правильно, поскольку протокол позволяет изменить порт и адрес, но в этом случае он не сработает.
Если FTP-сервер уже использует правильные настройки, проблема может быть в настройке NAT-маршрутизатора / брандмауэра и т. Д. Это может изменить данные, отправленные через него. Способ определить это - выполнить tcpdump на обеих сторонах соединения, чтобы убедиться, что содержимое трафика одинаково.
Как указывает ftptest.net, сервер не знает своего внешнего IP-адреса. Убедитесь, что вы правильно настроили его (в интерфейсе сервера FileZilla перейдите в Правка> Настройки> Настройки пассивного режима).
Обратите внимание, что некоторые клиенты молча игнорируют недопустимые / не маршрутизируемые IP-адреса, возвращенные в ответ на PASV
и используйте вместо этого IP-адрес сервера. Вот почему некоторые клиенты работают даже с вашей неверной конфигурацией.
Хотя я не уверен, что это причина сбоя Core FTP. Он даже не регистрирует ответ от PASV
. Но, возможно, он проверяет ответ перед его регистрацией. И сообщение об ошибке довольно общее (я ожидал, что «PORT» в сообщении об ошибке на самом деле является опечаткой и должно читаться как «PASV»).