我在 Virtual Box 上安装了 centos 6.5。我正在尝试配置一个基本的 ftp 服务器。下面是它的详细信息。
从 DVD/Yum 安装 vsftpd:状态 -> 成功
出于测试目的禁用防火墙,
chkconfig iptables off : successful service iptables stop : successful
同时将selinux设置为禁用模式:成功
在 VirtualBox 中添加了一条通过 NAT 进行端口转发的规则:
Rule Protocol Host Port Guest Port Ftp tcp. 2121. 21
现在,当我尝试与本地用户或匿名用户连接时,它会给出许多错误,每次都会出现不同的错误。
我还在我的主机上添加 Filezila 显示的日志消息。
-> LocalUserLogFromClient
Status: Disconnected from server
Status: Resolving address of localhost
Status: Connecting to [::1]:2121...
Status: Connection attempt failed with "ECONNREFUSED - Connection refused by
server", trying next address.
Status: Connecting to 127.0.0.1:2121...
Status: Connection established, waiting for welcome message...
Response: 220 Welcome to C6G FTP service.
Command: AUTH TLS
Response: 530 Please login with USER and PASS.
Command: AUTH SSL
Response: 530 Please login with USER and PASS.
Status: Insecure server, it does not support FTP over TLS.
Command: USER FUser1
Response: 331 Please specify the password.
Command: PASS *****
Error: Connection timed out after 20 seconds of inactivity
Error: Could not connect to server
-> 匿名用户日志
Status: Resolving address of localhost
Status: Connecting to [::1]:2121...
Status: Connection attempt failed with "ECONNREFUSED - Connection refused by
server", trying next address.
Status: Connecting to 127.0.0.1:2121...
Status: Connection established, waiting for welcome message...
Status: Insecure server, it does not support FTP over TLS.
Status: Connected
Status: Retrieving directory listing...
Command: PWD
Response: 257 "/"
Command: TYPE I
Response: 200 Switching to Binary mode.
Command: PASV
Response: 227 Entering Passive Mode (10,0,2,15,88,204).
Command: LIST
Error: The data connection could not be established: 10065
Error: Connection timed out after 20 seconds of inactivity
Error: Failed to retrieve directory listing
答案1
您的日志显示两个不同的问题:
对于非匿名用户,登录超时。等待登录完成 20 秒后,您的 FTP 客户端放弃了。这可能意味着您的身份验证配置(在服务器上)不起作用,尤其是当您尝试设置虚拟用户等时。除此之外,服务器可能需要很长时间才能写入日志,或者可能执行 DNS解决。
您的匿名用户日志可能存在 NAT 问题。
227 Entering Passive Mode (10,0,2,15,88,204).
意味着客户端需要连接到 10.0.2.15:22732/tcp,并且报告超时。这是一个必须连接到的奇怪地址,因为 FTP 连接本身是连接到本地主机的。
(顺便说一句:最后两个数字是端口号的两个字节,按网络字节顺序排列。因此 88×256 + 204 = 22732。)
答案2
端口转发器后面的 FTP 服务器无法以被动模式提供服务,除非所使用的软件具有特殊的设计传递 FTP 数据连接。案例有:
- NAT 软件能够嗅探
227 Entering Passive Mode
FTP 控制连接,相应地进行端口转发以及对 FTP 控制数据进行一些修改。 - FTP 服务器使用可见 (NAT) IP 地址发送被动模式,并且 NAT 转发给定的端口范围。
感谢@derobert 指出了我最初推理中的一个缺陷。
Linux 内核 NAT 提供了(可选)FTP 支持。但如果 Linux 是客人,那么它的 NAT 与问题无关。事实上,主机系统的 NAT 必须为来宾系统执行 NAT。 Windows 的 NAT 软件有这样的功能吗?不知道,反正这不是 Linux 问题。推荐的解决方案:将虚拟机的 NAT 替换为桥接。