所以我知道如何在 IIS 7 中设置基本的 FTP 服务器,但我对端口有点困惑。我相信我的桌面上有几个不同的 FTP 站点(每个站点都有自己的目录),每个站点也有自己的端口,例如:2100
, :2101
,:2102
等。在我启动所有这些站点后不久,我开始运行成问题。当尝试连接到一个不是我默认的 :21 端口(导致C:\inetpub\wwwroot
)时,它会给我一个错误提示:
An error occurred opening that folder on the FTP server.
Make sure you have permission to access that folder.
Details:
200 Type set to A.
227 Entering Passive Mode (192,168,0,114,243,202).
此错误仅在从外部网络连接时发生,而不是在内部与同一网络上的其他 PC 连接时发生。(尝试连接时它仍然给我同样的错误。)
这就是我现在的处境:我最近得到了一个 SSD 来替代我的旧 HDD,所以我再次安装了 Windows 并从头开始。同样的事情正在发生,这是我到目前为止收集到的:
- Windows Defender 防火墙与它无关,因为我将其完全关闭但仍然出现错误
- 当将外部端口更改为其他数字
:21
(例如:2121
)时,我能够连接,所以我认为问题一定出在 IIS 中 - 我的 FTP 客户端(无论是 Windows 文件资源管理器还是 Google Chrome)请求用户名和密码(这意味着它正在寻找连接而不是告诉我目标服务器不存在)
如果有人需要任何进一步的信息,请随时询问。
提前感谢您的任何回复!
FTP 通过随机分配的端口上的专用 TCP 连接执行数据传输。(在主动模式下,服务器连接回客户端;在被动模式下,客户端连接到服务器;但一般机制保持不变。)
请注意对 PASV(“进入被动模式”)的响应如何包括服务器的私有 IP 地址
192,168,0,114
以及端口号243,202
(即 62410)。因为您的 FTP 服务器位于 NAT 路由器之后,客户端将无法建立数据连接,原因有二:该地址是私有的,因此客户端无法访问。当然,客户端可以忽略这个地址并使用它已经知道的服务器的原始地址作为主要的“控制”连接(实际上许多 FTP 客户端出于安全原因这样做),但是......
你的路由器不知道到这个临时端口的连接应该被转发到 FTP 服务器,所以它只会丢弃导致超时的数据包。(即使不存在 NAT,这也会是防火墙的问题。)
那么21端口和2100端口有什么区别呢?它不在您的 FTP 服务器中,而是在您的路由器中。
当控制连接在标准 FTP 端口 21 上运行时,许多路由器实际上会查看连接内部,侦听通过它发送的 PORT/PASV 命令,并在每次客户端需要数据连接时动态添加临时端口转发规则。因此,只要您的路由器从端口 21 看到“227 Entering Passive Mode (192,168,0,114,243,202)”,它就会为 WAN:62410 → 192.168.0.114:62410 创建一个端口转发规则,并允许建立数据连接。
除此之外,许多路由器实际上重写了 PORT/PASV 中的 IP 地址,将服务器的本地地址更改为路由器的 WAN 地址。因此,即使服务器发送“227 Entering Passive Mode (192,168,0,114,243,202)”,客户端也会神奇地收到“227 Entering Passive Mode (<WAN_IP>,243,202)”。
所有这些都只在端口 21 上完成,因为路由器知道它正在查看 FTP 控制连接。它不能在所有端口上做同样的魔术,因为它可能会误解完全不相关的数据(例如,如果不是 HTTPS,它甚至可能会误检测该网页!)。当然,它仅在 FTP 控制连接本身未使用 TLS/SSL 加密时才有效。
您可以做的三件事(如果您必须继续使用 FTP)是:
检查 IIS7 是否支持为入站 PASV 连接配置特定端口范围。在 IIS 中启用此选项并在路由器中创建永久端口转发规则。例如,您可以将 64000–64999 指定为 PASV 端口,然后将所有这些端口转发到您的 FTP 服务器。(您需要的端口数量取决于您计划有多少个并发传输,加上备件。希望您的路由器允许一次转发整个范围?)
此方法的优点是它允许您使用 TLS/SSL 进行控制连接。它也是同一服务器上所有站点的一次性配置。(另一方面,您必须依赖使用正确 IP 地址的客户端,但实际上大多数客户端已经这样做了。)
或者,检查您的路由器是否支持在除 21 之外的其他端口上配置 FTP“ALG”(应用层网关)。如果支持,请将所有其他站点(:2100、:2101 等)标记为 FTP 端口。
如果两个选项都不起作用,您可以将 FTP 服务器设置为路由器上的“DMZ 主机”——这与选项 1 类似,但为所有协议上的所有端口配置端口转发。