我运行 Ubuntu 12.04 作为主机,并在 Virtualbox 中安装 Ubuntu 14.04 作为客户操作系统。我在 Ubuntu 14.04 上安装并配置了 VSFTPD,并转发了虚拟盒端口,如下所示:
现在我在主机操作系统中使用 FileZilla 来访问客户操作系统。
以下是 FileZilla 登录详细信息:
主持人:127.0.0.1
用户名:哈桑
密码:-----
港口:8181
现在我按下快速连接按钮访问客户操作系统。
登录成功,但 filezilla 无法访问客户操作系统!
以下是消息:
Status: Connecting to 127.0.0.1:8181...
Status: Connection established, waiting for welcome message...
Response: 220 (vsFTPd 3.0.2)
Command: USER hasan
Response: 331 Please specify the password.
Command: PASS ******
Response: 230 Login successful.
Command: OPTS UTF8 ON
Response: 200 Always in UTF8 mode.
Status: Connected
Status: Retrieving directory listing...
Command: PWD
Response: 257 "/home/hasan"
Command: TYPE I
Response: 200 Switching to Binary mode.
Command: PASV
Response: 227 Entering Passive Mode (10,0,2,15,224,245).
Command: LIST
Error: Connection timed out
Error: Failed to retrieve directory listing
我无法修复此问题。有什么想法吗?
答案1
简单的端口转发对于 FTP 来说还不够。FTP 通常在端口 21 上有一个控制连接,您已成功将其映射到端口 8181。但要传输文件或目录列表,FTP 会打开另一个连接。有两种方法可以打开此连接:
- 被动模式:这是您使用的模式。在这种情况下,FTP 服务器会在服务器上分配一个随机端口,并使用对被动命令的响应告知客户端 IP 和端口。在您的例子中,这是“227 进入被动模式 (10,0,2,15,224,245)”,这意味着服务器在 IP 10.0.2.15 端口 57589 处等待。由于客户端不知道 10.0.2.15 是服务器,并且服务器上的端口 57589 无法从外部访问,因此连接将失败。
- 主动模式:客户端在随机端口上打开一个侦听器,并通知服务器有关此端口的信息。然后,服务器将尝试从端口 20 连接到此端口。如果 VirtualBox 中的 Ubuntu 14.04 系统可以访问主机系统 (12.04),则此方法可能有效。是否可行取决于您的设置。
无论如何,如果涉及端口转发或防火墙,FTP 是一种丑陋的协议。我建议改用 sftp,FileZilla 也支持它,并且只需要另一端有 SSH 服务器(您可能已经拥有它,因为您转发到端口 22)。