我在 Windows Server 2008 R2 计算机上配置了 FTP 服务/角色。我可以从内部连接,但不能从外部连接。在内部,我使用 cmd 提示符和 IE FTP 进行了测试。在外部,我使用 FileZilla 和 IE FTP 进行测试。从外部,IE FTP 提示我输入用户名/密码,但什么也没发生。页面最终超时,我收到“Internet Explorer 无法显示页面”。使用 FileZilla,我收到以下消息。注意 FileZilla 解析域名并进行身份验证。我没有在 FTP 站点上配置 FTP Wirewall 支持。我不确定是否需要这样做。我设置了基本身份验证、非 SSL、不允许匿名。我在关闭和打开 Windows 防火墙的情况下进行测试(我为端口 21 添加了 Windows 防火墙规则)。在我的网络防火墙(Cisco)上,我添加了一条规则以将端口 21 流量转发到 FTP 服务器。
状态:正在解析 ftp.technologyblends.com 的地址
状态:正在连接到 75.149.66.201:21...
状态:已建立连接,正在等待欢迎消息...
响应:220 Microsoft FTP 服务
命令:USER*
响应:331 需要密码 *.
命令:PASS ********
响应:230 用户已登录。
命令:SYST
响应:215 Windows_NT
命令:FEAT
响应:211-支持的扩展功能:
响应:LANG EN*
响应:UTF8
响应:AUTH TLS;TLS-C;SSL;TLS-P;
响应:PBSZ
响应:PROT C;P;
响应:CCC
响应:HOST
响应:SIZE
响应:MDTM
响应:REST STREAM
响应:211 END
命令:OPTS UTF8 ON
响应:200 OPTS UTF8 命令成功 - UTF8 编码现已开启。
状态:已连接
状态:正在检索目录列表...
命令:PWD
响应:257 “/”为当前目录。
命令:TYPE I
响应:200 类型设置为 I。
命令:PASV
错误:连接超时
错误:无法检索目录列表
答案1
尝试将连接设置为 ACTIVE MODE,而不是 PASV
答案2
我知道您正在使用 NAT,并且服务器有一个私有地址。最可能的原因是您没有让临时端口通过。我认为,如果您只是创建了一个 DMZ 并让所有内容通过,它就会开始工作。但这不安全。更好的方法是找到一种方法来限制使用的被动端口范围,并将该范围转发到您的服务器。以下是一些说明:https://manage.accuwebhosting.com/knowledgebase/2334/How-to-Configure-Passive-Port-Range-for-the-FTP-Service-in-IIS.html。然后将 NATing 路由器上的相同范围转发到服务器的内部 IP。链接的教程显示 6001-6001,但我建议您执行 60000-61000 之类的操作。原因是数千中的“较低”数字被其他流量大量使用,而较高的数字往往保持安静。
也就是说,NAT 中的 FTP shim 应该自动创建该端口映射作为 RELATED 连接。检查防火墙是否阻止了它们,以及 FTP shim 是否已加载。在 Linux 上,它可能被称为ip_conntrack
、nf_conntrack
或nf_conntrack_ftp
,nf_conntrack_proto_ftp
具体取决于版本。它甚至可能是单片编译的,在这种情况下,您不会在模块中看到它,但它仍然可以工作。