如何在 IIS 7 中为外部 FTP 服务器使用多个端口号?

如何在 IIS 7 中为外部 FTP 服务器使用多个端口号?

因此,我知道如何在 IIS 7 中设置基本的 FTP 服务器,但我对端口有些困惑。我相信我的桌面上托管了几个不同的 FTP 站点(每个站点都有自己的目录),每个站点也有自己的端口,例如:2100、、等。在启动所有这些站点后不久,我开始遇到问题。当尝试连接到一个不是我的默认 :21 端口(导致)时,它会给我一个错误,提示:2101:2102C:\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)要求输入用户名和密码(这意味着它正在寻找连接,而不是告诉我目标服务器不存在)

如果有人需要更多信息,请随时询问。

提前感谢任何回复!

答案1

FTP 通过随机分配端口上的专用 TCP 连接执行数据传输。(在主动模式下,服务器连接回客户端;在被动模式下,客户端连接到服务器;但一般机制保持不变。)

请注意,对 PASV(“进入被动模式”)的响应包括服务器的私有 IP 地址192,168,0,114以及端口号243,202(即 62410)。由于您的 FTP 服务器位于 NAT 路由器后面,因此客户端无法建立数据连接,原因有二:

  1. 该地址是私有的,因此客户端无法访问。当然,客户端可以忽略此地址,并使用已知的服务器原始地址作为主“控制”连接(事实上,出于安全原因,许多 FTP 客户端确实这样做了),但是...

  2. 你的路由器不知道这个临时端口的连接应该转发到 FTP 服务器,因此它只会丢弃导致超时的数据包。(即使没有 NAT,这也会成为防火墙的问题。)

那么端口 21 和端口 2100 有什么区别呢?它不在你的 FTP 服务器中,而是在你的路由器中。

当控制连接通过标准 FTP 端口 21 运行时,许多路由器实际上看看里面连接,监听通过它发送的 PORT/PASV 命令,并在客户端每次需要数据连接时动态添加临时端口转发规则。因此,每当您的路由器从端口 21 看到“227 进入被动模式 (192,168,0,114,243,202)”时,它都会为 WAN:62410 → 192.168.0.114:62410 创建端口转发规则并允许建立数据连接。

除此之外,许多路由器实际上改写PORT/PASV 中的 IP 地址,将服务器的本地地址更改为路由器的 WAN 地址。因此,即使服务器发送“227 进入被动模式 (192,168,0,114,243,202)”,客户端也会奇迹般地收到“227 进入被动模式 (<WAN_IP>,243,202)”。

所有这些都已完成仅有的在端口 21 上,因为路由器知道它正在查看 FTP 控制连接。它不能在所有端口上执行相同的操作,因为它可能会误解完全不相关的数据(例如,如果不是 HTTPS,它甚至可能会误检测此网页!)。当然,它只有在 FTP 控制连接本身未使用 TLS/SSL 加密时才有效。

您可以做三件事(如果您必须继续使用 FTP)是:

  1. 检查 IIS7 是否支持为入站 PASV 连接配置特定端口范围。在 IIS 中启用此选项在路由器中创建永久端口转发规则。例如,您可以将 64000–64999 指定为 PASV 端口,然后将它们全部转发到您的 FTP 服务器。(您需要的端口数量取决于您计划进行的并发传输数量以及备用端口数量。希望您的路由器允许一次转发整个范围?)

    此方法的优点是允许您使用 TLS/SSL 进行控制连接。它也是针对同一服务器上所有站点的一次性配置。(另一方面,您必须依赖客户端使用正确的 IP 地址,但实际上大多数客户端已经这样做了。)

  2. 或者,检查您的路由器是否支持在 21 以外的其他端口上配置 FTP“ALG”(应用层网关)。如果支持,请将所有其他站点(:2100、:2101 等)标记为 FTP 端口。

  3. 如果两种方法都不起作用,你可以将 FTP 服务器设置为路由器上的“DMZ 主机”——这与方法 1 类似,但配置了端口转发全部所有协议上的端口。

相关内容