我已经在 Guest 机器上安装了 pure-ftpd。我尝试使用端口号 21 从 Guest Machine 连接到 Guest Machine 的 FTP 服务器,我可以成功连接到它。
在主机中,我添加了以下命令,以便将主机的端口 2121 重定向到访客的端口 21 并连接到访客机器的 FTP 服务器。
VBoxManage setextradata Ubuntu "VBoxInternal/Devices/e1000/0/LUN#0/Config/FTP/HostPort" 2121
VBoxManage setextradata Ubuntu "VBoxInternal/Devices/e1000/0/LUN#0/Config/FTP/GuestPort" 21
VBoxManage setextradata Ubuntu "VBoxInternal/Devices/e1000/0/LUN#0/Config/FTP/Protocol" TCP
但是,一旦我尝试从主机访问此访客 ftp 服务器,它就会询问我在访客机器中拥有的用户的密码,并且身份验证成功通过。但是当它试图列出目录时,它向我显示了一条错误消息,内容如下:
如果你把它翻译成英语,它将如下:
无法显示文件夹内容。
无法显示“/ in localhost:2121”的全部内容:无法打开数据连接。也许您的防火墙阻止了它?
如何解决问题?
FTP 可能是一个棘手的协议。控制连接(通常)设置在端口上。此连接用于身份验证和向服务器发送命令。数据传输发生在不同的连接上。通常这是在端口 20 上。发生的情况是客户端在端口 21 上向服务器请求数据,然后服务器在端口 20 上打开与客户端的连接以传输数据。这是运行 ftp 客户端的机器上的防火墙可能会阻碍的地方(它可能会阻止来自 ftp 服务器的传入连接)。
FTP 有一个被动模式,它应该导致 ftp 服务器通过控制连接将数据传输到客户端,而不是为数据传输打开新连接。我认为命令是PASV,但我自己从未尝试过。
我希望这是有帮助的。