FTP 服务器 运行 通过 NAT 在端口 2000 上无法在被动模式下工作

FTP server running on Port 2000 over NAT not working on Passive Mode

我是 运行 FILE-Zilla ftp 服务器 windows 中的一台 LAN pc 连接到我的路由器。我正在尝试通过添加端口转发规则 使用 Router WAN ip (WAN-to-LAN) 从路由器外部的网络访问 FTP 服务器](NAT) 在路由器中。根据以下配置,我这里有 2 个案例。 1 正在工作 并且 2 不是(在被动模式下)。

Note: i have added the custom inbound rule in the windows 7 firewall where the ftp server is running.

配置 #1

Filezilla FTP server port: 21
Passive port range: 50000-51000

NAT - external port: 21
NAT - internal port: 21

Windows firewall inboud rule port allow port: 21, 50000-51000

Client connecting to: <Wan IP>:21

如果客户端尝试使用 Active/Passive 模式

进行连接,则此方法有效

配置#2

Filezilla FTP server port: 2000
Passive port range: 50000-51000

NAT - external port: 21
NAT - internal port: 2000

Windows firewall inboud rule port allow port: 2000, 50000-51000

Client connecting to: <Wan IP>:21

这仅在客户端设置为 活动模式 时有效。 不使用被动模式 客户端配置。客户端可以连接并且登录成功,但在服务器端以这样的错误消息结尾,没有任何目录列表。

227 Entering Passive Mode (192,168,1,2,195,85)

Note: both the case working in LAN-LAN network.

我的猜测是,配置 #1 之所以有效,是因为 NAT 足够智能,可以转换来自服务器的 PASV 响应中的 IP 地址。但它可能只对标准 FTP 端口这样做。


您应该告诉 FileZilla FTP 服务器它的外部 IP 地址。转到 编辑 > 设置 > 被动模式设置 > IPv4 特定 > 被动模式传输的外部服务器 IP 地址

目前您的 FTP 服务器正在向客户端发送其内部 IP 地址。而且客户端显然无法连接到IP地址。

并让 NAT 转发被动端口范围 (50000-51000) 中的端口。


尽管更改会中断 LAN-LAN 连接。要同时允许 LAN 和 WAN 连接,请检查 NAT 是否也可以配置为转换非标准端口的 IP 地址。尽管翻译无论如何都只能用于未加密的连接。而且你不应该使用未加密的连接!

如果您的客户允许,最后一个选项是使用扩展被动模式 (EPSV)。在扩展被动模式下,响应中没有 IP 地址。 FTP 客户端使用 FTP 服务器的主 IP 地址进行数据连接。