我正在尝试在运行 Windows Server 2008 和 IIS 8.0 的计算机上设置第二个 FTP 服务器。我已经有一个可以通过一个端口访问的 FTP 服务器,这个服务器可以通过另一个端口访问并指向同一目录。
我使用基本身份验证进行设置后,转发了路由器上的端口,并在 Windows 防火墙中允许新端口例外。
现在,我可以使用 localhost:2020(假设 2020 是我的端口)从本地计算机访问 FTP 服务器。当我尝试使用ftp://mydomain.biz:2020,系统仍提示我进入登录屏幕,但在输入与 localhost 相同的登录信息后,我收到此错误:
我该如何修复这个错误?
答案1
这听起来像是典型的问题,无论是防火墙还是路由器都没有意识到您正在运行 FTP 协议,可能是因为您使用非标准端口进行控制连接。
当宣布数据连接(PASV 端口)时,Windows 防火墙可能未打开该端口,因此无法连接。
即使 Windows 防火墙确实打开了系统防火墙中的端口,由于您使用端口转发而未指定 FTP 帮助程序模块,因此路由器不会通过控制连接检查来自 FTP 服务器的响应。然后它不会在 PASV 响应中将 Windows 服务器的内部 IP 地址重写为路由器的公共 IP 地址,路由器也不会动态创建正确的数据连接端口转发规则。
周围充满悲伤。
检查同一网络内另一台主机的非标准 FTP 端口的功能,以确认 Windows 防火墙是否正常工作。
然后检查您的 NAT 路由器的配置。
答案2
FTP 协议使用大量端口:端口 21 用于控制连接,端口 20 用于主动模式下的数据连接,以及数量可变的(通常为高端口)端口用于被动数据连接。
在这种情况下,FTP 客户端可能会通知您,与 IP 192.168.1.165 端口 50297 的被动数据连接失败。当发生这种情况时,几乎总是这是防火墙(或 NAT)配置问题。
就您而言,我认为我们可以排除 NAT 问题,因为您连接到同一 LAN 上的 IP(192.168.1.0/24),因此这一定是 Windows 防火墙问题。
简单(但不太安全)的解决方案是配置 Windows 防火墙例外以信任 FTP 服务器进程(它是 EXE)。这样它就能够接受任何端口上的传入连接。更优雅(和更安全)的解决方案是配置 FTP 服务器用于被动连接的确切端口范围,然后在 Windows 防火墙上仅打开这些端口(加上端口 2020)。