FTP 为什么穿越 NAT 困难
FTP 是双通道协议:控制连接固定监听 21 端口,数据连接用的地址与端口在控制连接里动态协商。NAT 设备如果只是改写地址而不理解协议内容,协商出来的地址就会与实际不符,导致能登录却无法列目录或传输。解决办法有两条:让设备启用 FTP ALG 跟着协议做转换,或改用被动模式并明确放行一段数据端口范围。
基本信息
| 主动模式 | 由服务器回连客户端,客户端在 NAT 后时通常不通 |
|---|---|
| 被动模式 | 客户端连接服务器指定的数据端口,需要放行协商出的端口范围 |
| 设备能力 | NAT ALG 可解析控制连接并转换协商地址,部分版本默认开启 |
| 替代方案 | SFTP/SCP 基于 SSH 单端口,天然不依赖 ALG |
典型使用场景
- 对外发布 FTP 服务器:内网服务器映射公网地址后,被动模式端口范围要一并放行
- 内网用户访问外部 FTP:主动模式基本不可用,需要客户端切到被动模式
- 老业务改造:遗留系统仍依赖 FTP,短期只能靠 ALG 或固定端口范围支撑
- 多台 FTP 服务器共用出口:端口范围要规划不冲突,否则映射互相干扰
- 排障定位:登录正常但列目录失败,是数据通道被拦的典型特征
配置要点
配置要点
1. 在服务器侧限定被动模式端口范围(例如 50000-50100)
2. 防火墙放行该范围并对公网地址做映射,保证内外端口一致
3. 确认设备 FTP ALG 的开启状态,开启后观察转换结果是否符合预期
4. 用 FileZilla 一类客户端实测:登录、列目录、上传下载各测一次
5. 能改造的系统迁移到 SFTP,从根上减少对 ALG 的依赖故障现象与判断
| 现象 | 原因 | 处理方向 |
|---|---|---|
| 能登录,列目录卡住 | 数据通道被策略拦截 | 放行被动模式端口范围 |
| 登录后立刻断开 | 协商地址被 NAT 改写错误 | 检查 ALG 与服务器返回地址 |
| 仅部分客户端失败 | 客户端模式或编码差异 | 统一为被动模式并复测 |
| 大文件传输中断 | 端口范围过小导致并发受限 | 扩大范围并核对并发数 |
现代环境更推荐用 SFTP 替代 FTP:基于 SSH、只用一个端口,既避免 ALG 依赖,也避免明文传输账号口令。