我正尝试从 Comcast Business 上的外部 IP 地址连接到我的 FTP 服务器。
在网关上,我已将端口 20-21 设置为我的服务器的端口转发。此外,我已将端口 7000-8000 转发到我的服务器,以便在被动模式下使用。
在我的 FileZilla Server 应用程序中,我设置了被动模式来使用我的静态 IP 并使用上面列出的端口子集。
不幸的是,由于某种原因,它无法通过外部静态 IP 工作,但我可以在内部工作。
当我尝试通过静态 IP 连接时,FileZila 监视器显示
Connected, sending welcome message....
220 FileZillaServer version 0.9.37 beta
could not send reply, disconnected
我的防火墙没有记录任何阻止事件,并且 Windows 防火墙已禁用。我做错了什么或遗漏了什么?
答案1
通常,如果不重新配置防火墙/NAT 设备,您尝试执行的操作将无法工作。
您当前设置的流量流程基本如下(使用示例 IP):
内部客户端 IP:10.0.0.100
内部 FTP IP:10.0.0.1
外部 FTP IP:1.2.3.4
- 内部客户端 (10.0.0.100) 打开到 1.2.3.4 的 FTP 连接 (端口 21)
- 内部客户端将流量发送到默认网关/防火墙
- 防火墙有一条规则,将端口 21 的流量发送到 10.0.0.1,并将流量发送到 10.0.0.1,并使用客户端 IP 的真实源地址 (10.0.0.100) 发送该流量
- FTP 服务器将响应直接发送回 10.0.0.100,源地址为 10.0.0.1,并且由于它看到的是本地源地址,因此永远不会再回到防火墙之外。
- 内部客户端期望 FTP 流量通过源 1.2.3.4 返回,并丢弃来自 10.0.0.1 的响应
- FTP 连接超时
您需要在防火墙上设置或启用发夹 NAT 规则(或 NAT 反射,或其他取决于制造商的各种术语),以便在流量返回之前建立到外部接口的 NAT 会话。康卡斯特设备可能有一个启用 NAT 反射的选项,但由于之前没有使用过它们,我不能肯定地说他们是否有这个功能。
真正的问题是你为什么要这样做?如果你只是想测试,那么请使用真正的外部客户端(让朋友测试或设置外部客户端)。如果你打算继续这样做,那么直接使用 IP 或拆分 DNS 解决方案即可。
答案2
看起来是由于某种原因,外部 IP 和 Filezilla 服务器之间的端口 21 上的连接不起作用。
我建议您在外部 IP 站和服务器上都允许端口 21 上的入站和出站连接。之后您可以尝试:
从外部 IP 通过端口 21 进行 telnet 到 Filezilla 服务器
2.您可能需要将 Filezilla 服务器的响应转发回外部 IP(错误 220 - 无法收到欢迎消息)
答案3
被动模式和高编号端口不用于命令阶段,因此这与端口 21 上的传输有关。
选项包括:
- Filezilla 的外部 IP 地址配置错误:尝试使用同一 IP 上的其他服务进行确认。根据您提供的信息,这是最有可能的情况
- ISP 正在进行一些阻止:尝试将端口从 21 更改为 1024 以上的端口
- Windows 可能会默默阻止:Windows 防火墙不擅长记录事情。运行 Wireshark 将确认数据包是否确实离开 Windows 主机
最后,如果可以的话,你应该尽量避免使用 FTP。在公共互联网上,SFTP 或 FTPS 是更好的选择,因为所有内容(包括用户名和密码)都是以明文形式发送的。