场景:客户端经 FTPS(显式 TLS)访问公司 FileZilla Server。防火墙仅将 <服务器公网IP>:21 目的 NAT 到服务器内网 IP,开启 FTP ALG。症状:登录正常、MKD 正常,MLSD 卡死后超时。
分:三个报错案例逐一解读
案例 1|主动模式:425 ETIMEDOUT
[Command] PORT <客户端内网IP 四段式>,168,7
[Response] 150 Starting data transfer.
[Error] Failed connection for data socket. Reason: ETIMEDOUT
[Response] 425 Unable to build data connection: ETIMEDOUT
- PORT 是主动模式下客户端告诉服务器"请来连我"的命令,里面填的是客户端自己声明的地址。
- 客户端报的是内网地址
<客户端内网IP>,本应由此防火墙上的 FTP ALG 改写成公网地址——但控制通道已被 TLS 加密,ALG 看到的是密文,改不了。 - 服务器照单全收,去连一个不可路由的内网地址 → 超时 → 425。
结论:主动模式挂在地——"服务器回连客户端"这一步。
案例 2|被动模式:PASV 后连接超时
[Command] PASV
[Response] 227 Entering Passive Mode (<服务器公网IP 四段式>,216,165)
客户端报错:failed to connect to /<服务器公网IP> (port 55461)
- 被动模式方向反过来:服务器开随机端口(此处 55461)等在原地,客户端主动来连,IP 已是公网地址,方向没错。
- 但防火墙只静态映射了 21 端口,55461 这个随机端口没有任何 NAT 映射和放行策略。
- 明文 FTP 下这一步由 ALG 解析 PASV 响应后动态创建映射与放行;TLS 加密后 ALG 解析不了,动态规则无从建立 → 客户端连到一个没人监听的公网端口 → 超时。
结论:被动模式挂在服务器侧——"客户端连服务器数据端口"这一步。
案例 3|对照:明文 FTP 为何一切正常
同一条链路,去掉 TLS 就通,因为 ALG 恢复视力,两个模式的分工都被它接管了:
| 明文 FTP(ALG 生效) | FTPS(ALG 失明) | |
|---|---|---|
| 主动模式 | ALG 改写 PORT 中的内网 IP 为公网 IP | PORT 原样透传 → 服务器连内网地址 → 425 |
| 被动模式 | ALG 解析 PASV 响应,动态建立数据端口的 NAT 映射和放行 | 动态规则建立不了,只剩 21 端口静态映射 → 超时 |
总:根因与处理
根因一句话:FTP ALG 依赖解析明文控制通道来(1)改写 PORT 地址、(2)为被动数据端口动态建 NAT/放行;FTPS 加密控制通道后 ALG 全部失效,而防火墙静态配置只覆盖了 21 端口,数据通道无人接管 → 控制类命令(MKD)正常,数据类操作(MLSD)全部超时。
处理(FTPS 标准做法,四步):
- FileZilla Server → Passive mode settings → 固定被动端口范围,如
50000-50100; - 防火墙加静态 DNAT:
<服务器公网IP>:50000-50100→ 服务器内网 IP; - 安全策略放行 公网 → 服务器内网 IP 的
50000-50100入站; - 服务器本机防火墙放行
50000-50100(Windows 则加 Defender 入站规则)。
排障口诀:FTPS 能登录但 MLSD/传文件超时 → 必是数据通道问题 → 看 PORT/PASV 确定模式和端口 → 主动查 PORT 地址改写、被动查端口 NAT 放行;ALG 在加密流量下不可指望,必须静态配置兜底。
整理时间:2026-09-28