FileZilla服务器 – 奇怪的FTP连接问题

连接到运行FileZilla v.0.9.41的客户端FTP服务器时遇到了一个奇怪的问题。 服务器在NAT路由器后面运行,因此它被设置为接受被动连接。 这似乎与一些客户,但不是全部。 例如,从我的Mac使用传输,我连接就好了。 但是从Windows使用Core FTP,我有以下错误:

PORT command failed Error loading directory... 

它无限期地坐在那里。 使用传输,这不是一个问题。

我不是在防火墙后面工作,也不是在使用软件防火墙服务。 每个连接的设备在同一个子网上,使用同一台路由器上网。 凭证是相同的,基本configuration是相同的(被动,二进制等)。

我迷失方向的是弄清楚为什么一个客户端连接没有问题,而其他大多数连接,但不会让我遍历目录结构。

有没有人见过这种行为之前,如果是这样,有没有人有想法的解决scheme?

注意:我无法访问FileZilla服务器,但我确实拥有XMLconfiguration文件的副本以进行故障排除。

编辑:请参阅下面的日志。

 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 ([email protected]) 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服务器configuration:

 <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 ([email protected])
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. 

我可以从这里推断出服务器端存在问题,但我现在的问题是,为什么我可以连接一些客户端(特别是在Mac上传输)而没有问题,而其他客户端则主动断开连接(如Windows上的Core FTP) ?

解:

客户需要更改设置

  <Item name="Custom PASV IP" type="string">SAME AS OUTWARD FACING SERVER IP</Item> 

到做NAT的路由器的IP。

说明:

根据RFC 959中的 4.1.2节,在发送PASV之后:

对此命令的响应包括此服务器正在侦听的主机和端口地址。

之后,客户端可以用另一个IP地址列表和它希望使用的端口进行响应。

某些客户端(如FileZilla)将validation响应中给出的IP地址和端口是否可以实际访问。 其他人会简单地认为,他们可以继续在他们开始的同一个sockets上。 前者可能更正确,因为协议允许改变端口和地址,但在这种情况下会失败。

编辑

如果FTP服务器已经在使用正确的设置,则问题可能出在NATing路由器/防火墙等的设置上。 它可能正在改变通过它发送的数据。 识别这种情况的方法是在连接的两端执行tcpdump来validationstream量的内容是否相同。

如ftptest.net所示,服务器不知道它是外部IP地址。 确保正确configuration它(在FileZilla服务器界面中,进入编辑>设置>被动模式设置 )。

请注意,有些客户端会默认忽略响应PASV返回的无效/不可路由IP地址,而是使用服务器的IP地址。 这就是为什么有些客户端即使使用无效configuration也能工作。

虽然我不确定这是否是Core FTP失败的原因。 它甚至不logging来自PASV的响应。 但是也许它会在logging之前validation响应。 而且错误信息是非常通用的(我期望错误信息中的“PORT”实际上是一个错字,并应该读取“PASV”)。