我在我的 CentOS linux VM(位于 NAT 后面)上运行 proFTPd。
这是我proftpd.conf
目前的配置:http://pastebin.com/raw.php?i=X8rXYbSJ
每当我连接到 FileZilla 客户端中的 ftp 帐户时,我都会收到以下信息:
Status: Connecting to 109.xxx.xx.xxx:2121...
Status: Connection established, waiting for welcome message...
Response: 220 FTP Server Ready.
Command: USER exampleuser
Response: 331 Password required for exampleuser
Command: PASS ******
Response: 230 User exampleuser logged in
Command: SYST
Response: 215 UNIX Type: L8
Command: FEAT
Response: 211-Features:
Response: MDTM
Response: MFMT
Response: LANG ja-JP;ko-KR;bg-BG;zh-TW;en-US;ru-RU;it-IT;fr-FR;zh-CN
Response: TVFS
Response: UTF8
Response: MFF modify;UNIX.group;UNIX.mode;
Response: MLST modify*;perm*;size*;type*;unique*;UNIX.group*;UNIX.mode*;UNIX.owner*;
Response: REST STREAM
Response: SIZE
Response: 211 End
Command: OPTS UTF8 ON
Response: 200 UTF8 set to on
Status: Connected
Status: Retrieving directory listing...
Command: PWD
Response: 257 "/" is the current directory
Command: TYPE I
Response: 200 Type set to I
Command: PASV
Response: 227 Entering Passive Mode (109,xxx,xx,xxx,237,74).
Command: MLSD
Error: Connection timed out
Error: Failed to retrieve directory listing
我查看了/var/log/proftpd/
文件夹,它是空的。
我在此文件中发现以下内容/var/log/messages
:
Oct 29 12:34:33 mageDev proftpd[27542]: 127.0.0.1 - ProFTPD killed (signal 15)
Oct 29 12:34:33 mageDev proftpd[27542]: 127.0.0.1 - ProFTPD 1.3.3g standalone mode SHUTDOWN
Oct 29 12:34:34 mageDev proftpd[27560]: 127.0.0.1 - ProFTPD 1.3.3g (maint) (built Sat Sep 14 2013 20:13:10 UTC) standalone mode STARTUP
Oct 29 12:34:53 mageDev proftpd[27562]: 127.0.0.1 (::ffff:46.xx.xxx.xx[::ffff:46.xx.xxx.xx]) - FTP session opened.
Oct 29 12:34:53 mageDev proftpd[27562]: 127.0.0.1 (::ffff:46.xx.xxx.xx[::ffff:46.xx.xxx.xx]) - Preparing to chroot to directory '/ftp/exampleuser'
我该如何诊断此错误/问题?为什么会抛出此错误Failed to retrieve directory listing
?
这是服务器文件夹exampleuser
:
我意识到这里已经问过类似的问题:proftpd、动态 IP 和 filezilla:端口问题
与此用户不同,如果我删除我的,MasqueradeAddress
我会收到此警告并且仍然出现同样的错误:
Status: Server sent passive reply with unroutable address. Using server address instead.
Command: LIST
Error: Connection timed out
Error: Failed to retrieve directory listing
答案1
您收到“无法检索目录列表”错误消息,因为 FTP 客户端未从服务器获取目录列表,这很可能是由于防火墙或网络问题。
FTP 协议是在网络防火墙和网络地址转换出现之前发明的,它使用单独的命令通道和数据通道进行通信。
当您登录时,只有命令通道正在使用。
当您执行目录列表时,客户端和服务器在命令通道上互相告知应在哪个 IP 地址和端口(在您的示例中为 60746)上动态设置数据通道以传输目录列表数据。
这是通过 FTP 命令 PORT 或 PASV 完成的。
在您的情况下,客户端发出 PASV 命令,服务器回复:
227 Entering Passive Mode (109,xxx,xx,xxx,237,74).
括号内的前 4 个八位字节构成 IP 地址,后两个八位字节构成端口号(256*237 + 74 = 60746)。
您是否在虚拟机中运行 FTP 服务器,并且NAT
为虚拟机配置了 样式的网络适配器(而不是Bridged
)?那么这很可能是导致问题的原因,因为这些类型的 VM 通常无法从“外部”访问,因为它们共享物理主机的 IP 地址。
服务器上的端口 60000-65535 是否打开?您的配置指定了用于被动连接的范围。您可以将其缩小到更短的范围,以便在防火墙中要求更少的打开端口。
答案2
1)确保您的虚拟机在Bridged
网络模式下运行,这样您就可以从路由器的 NAT 获取 IP,并且不会被两次 NAT。
2)你必须MasqueradeAddress
在 ProFTPd 配置中启用该选项,并在其中输入你的公共 IP(尝试whatismyip.com)
3) 您必须取消注释 ProFTPd 配置中的 Passive Ports 选项。它有两个数字,它们应该构成一个范围 FROM - TO。如果您愿意,可以将范围缩小很多。
3) 您必须将路由器上的以下端口转发到相应的 FTP VM 端口:20、21 和整个被动端口范围。