已编辑(根据要求):

已编辑(根据要求):

我在 OSX 10.11 上,并且有一个运行 Windows 2008 Server R2 x64(带有 NAT 网络)的 VirtualBox 客户机,该客户机在端口 21 上运行带有 FTP 的 IIS。

我的问题是:我可以从主机登录到 FTP,但看不到目录列表或获取文件。

FTP 是像这样安装并且有一个 Windows 防火墙条目允许通过端口 21 进行 TCP 通信。

客户机上的端口 21 被转发到主机上的端口 8021。通过 FTP 登录客户机成功,但我无法使用 FTP 查看任何文件。

在主机上: 使用命令行到 FTP,我得到以下信息:

$ ftp localhost 8021
Trying ::1...
ftp: Can't connect to `::1': Connection refused
Trying fe80::1%lo0...
ftp: Can't connect to `fe80::1%lo0': Connection refused
Trying 127.0.0.1...
Connected to localhost.
Name (localhost:david): Administrator
331 Password required for Administrator.
Password: ****
230 User logged in.
Remote system type is Windows_NT.
ftp> dir
229 Entering Extended Passive Mode (|||49170|)
ftp: Can't connect to `127.0.0.1': Connection refused
501 Server cannot accept argument.
150 Opening ASCII mode data connection.
ftp: Poll timeout waiting before accept
425 Cannot open data connection.


^C
421 Service not available, user interrupt. Connection closed.
ftp> quit

使用发送到 FTP,错误信息是:

无法检索“/”的文件列表。服务器说:服务器无法接受参数。

错误 -162:PORT 失败

关于客人: 命令行 FTP 工作正常...

C:\Users\Administrator>ftp localhost
Connected to XXX.
220-Microsoft FTP Service
User (XXX:(none)): Administrator
331 Password required for Administrator.
Password: *****
230 User logged in.
ftp> dir
200 EPRT command successful.
125 Data connection already open; Transfer starting.
06-22-16  10:42AM       <DIR>          contracts
05-25-16  02:35PM               184946 welcome.png
226 Transfer complete.
ftp: 356 bytes received in 0.00Seconds 356000.00Kbytes/sec.
ftp>

我是否遗漏了某些明显的内容?我接下来应执行哪些步骤才能使 FTP 正常运行?

答案1

好的,我明白了。我使 IIS 以被动模式工作

在 Windows 客户虚拟机上:

  1. 单击“开始”并导航至“管理工具”->“Internet 信息服务 (IIS) 管理器”
  2. 选择IIS服务器常规设置页面。
  3. 打开 FTP 防火墙支持功能并添加您的端口范围(我添加了8020-8020)选择被动模式,然后单击应用

在主机上:

  1. 在 VirtualBox 中,选择虚拟机并转到网络
  2. 为额外的 FTP 被动模式端口添加端口转发。从客户机上的端口 8020 转发到主机上的端口 8020。
  3. 重新启动虚拟机。

我现在从主机使用 FTP 时得到以下结果:

$ ftp localhost 8021
Trying ::1...
ftp: Can't connect to `::1': Connection refused
Trying 127.0.0.1...
Connected to localhost.
220-Microsoft FTP Service
Name (localhost:david): Administrator
331 Password required for Administrator.
Password: ****
230 User logged in.
Remote system type is Windows_NT.
ftp> dir
229 Entering Extended Passive Mode (|||8020|)
125 Data connection already open; Transfer starting.
06-22-16  10:42AM       <DIR>          contracts
05-25-16  02:35PM               184946 welcome.png
226 Transfer complete.

答案2

已编辑(根据要求):

@dvdsmpsn的回答(实际上是他自己问题的回答)很好,但对我来说并不完全有效。我正在使用Windows 7 主机Ubuntu 16.04 访客。虽然体制不同,但问题是一样的。

像我这样处于不同情况的人,可能无法使连接正常工作。

我也必须利用这些答案中的知识:

https://serverfault.com/questions/421161/how-to-configure-vsftpd-to-work-with-passive-mode

@brain99对此的观察pasv_address=xxx.xxx.xxx.xxx非常重要。没有它,它对我来说就不起作用。

Ubuntu 服务器(来宾虚拟机):

我的 Ubuntu 服务器有vsftpd 作为 FTP 服务器。为了使其发挥作用被动模式,我必须在我的vsftpd 配置文件(在 /etc 文件夹内——如果您使用窗口管理器,则可以使用搜索功能):

pasv_enable=YES
pasv_min_port=8020 # like @dvdsmpsn recommended
pasv_max_port=8020 # like @dvdsmpsn recommended
pasv_address=127.0.0.1 # added like @brian99 recommended, BUT I used the localhost address.

我使用了本地主机地址,因为我的虚拟机没有公共 IP 地址。

仅出于测试目的,我禁用了 UFW(我的防火墙)。我不想让任何事情使本来就很复杂的问题变得更加糟糕。

作为用户@Martin Prikryl他在答复中指出:

与 FileZilla FTP 服务器的连接正常,但目录列表失败

FTP 使用两个端口。因此,我们将在 VirtualBox 中转发两个端口。

Windows 7(主机):

在使 FTP 服务器以被动模式工作后,我按照@dvdsmpsn说明:

  1. 在 VirtualBox > VM 设置 > NAT > 高级 > 端口转发中我添加了两个条目:

    Host Port 8021 to Guest Port 21 Host Port 8020 to Guest Port 8020

  2. 重启虚拟机

我在 FileZilla 和 Dreamweaver 中测试了此设置。它在两个应用程序中的被动模式下均能正常运行。

不幸的是,提到的参考资料没有提到任何有关chroot用户的信息。我的 Ubuntu 客户机正在运行 Apache Web 服务器,我需要将它们限制在自己的/home/$user目录中。

答案3

从 VirtualBox 6.0.0(2018 年 12 月 18 日发布)开始,Virtual Box 现在支持主机和客户操作系统之间的拖放功能。

我刚刚安装并使用了它。它确实运行得很好 - 尽管您确实需要安装 Guest Additions 包 - 这可能是一个麻烦的噩梦。我从来没有设法使我拥有的 Debian 映像工作。我确实设法让 ubunutu 运行得相当顺利。安装 Guest Additions 后,我需要重新启动客户机。

然后“鲍勃是你的叔叔!”

相关内容