首页/网络/协议速查/FTP 被动模式(PASV / EPSV)

FTP 被动模式(PASV / EPSV)

服务器开一个数据端口等客户端来连:穿 NAT 与防火墙更友好,是现代客户端与浏览器的默认;EPSV 是 IPv6 时代的简化版。

协议速查网络更新于 2026-10-13

被动模式解决什么问题

FTP 用两条连接:21 端口的控制连接负责命令,数据连接负责目录列表与文件内容。主动模式下由服务器反向连回客户端,遇到 NAT 与客户端防火墙基本无法通过;被动模式改为服务器开一个临时端口等客户端来连,因此成为现代客户端与浏览器的默认选择。EPSV 是被动模式的 IPv6 友好版本,只用端口号而不再传 IP。

基本信息

控制连接固定 TCP 21(FTPS 显式模式仍为 21,隐式模式为 990)
数据连接每次传输临时建立,端口由 PASV 或 EPSV 应答给出
服务端端口范围vsftpd 用 pasv_min_port / pasv_max_port 固定,Pure-FTPd 用 PassivePortRange
客户端行为现代客户端与浏览器默认被动,主动模式需显式开启

模式对照

模式命令连接方向
主动(PORT)PORT h1,h2,h3,h4,p1,p2服务器 → 客户端高位端口
被动(v4)PASV客户端 → 服务器临时端口
扩展被动EPSV客户端 → 服务器临时端口(不传 IP)
强制扩展被动EPSV ALL其后的会话只接受 EPSV,拒绝 PORT 与 PASV

被动数据连接全过程

被动数据连接全过程
C: PASV
S: 227 Entering Passive Mode (203,0,113,9,195,80)
# 括号内六个数:前四是 IP,后两位算端口 195*256+80=50000
C: (客户端连 203.0.113.9:50000)
C: LIST
S: 150 Here comes the directory listing.
S: 226 Directory send OK.
# 226 表示数据连接正常结束;425 表示数据连接没能建立

典型使用场景

  • 客户端在 NAT 后面时首选被动模式,避免服务器回连被拦
  • 防火墙只允许 21 出站时,需要在服务端固定被动端口范围并放行
  • IPv6 环境用 EPSV,某些老客户端不支持 EPSV 时需要回退处理
  • 排查「登录成功但列目录卡死」:直接看数据连接是否建立
服务端应固定被动端口范围并同步放行防火墙与云安全组,否则登录与控制命令都正常,只有 LIST、RETR、STOR 会一直挂到超时,是最经典的 FTP 假故障。
部分云负载均衡与容器环境需要额外处理:把被动端口段一并发布到 LB,或改用 FTPS、SFTP 等单连接协议彻底绕开双连接问题。

易错点

  • 防火墙只放行 21 不放行被动端口范围:登录成功、一列目录就卡死,用户看到的是「FTP 坏了」而其实是数据连接被丢
  • 服务端未做 NAT 穿透修正时 PASV 应答里给的是内网地址,客户端连不上;需要网关重写或配置 masquerade/force_passive_address
  • 用 EPSV ALL 后又让老客户端连:老实现不支持时直接失败,兼容期应允许 PASV 回退
  • 同样开被动模式但不限制端口范围:服务器随机用高位端口,运维无法放行,也容易与保留端口冲突

数据来源与参考

  • RFC 959(PASV)
  • RFC 2428(EPSV)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌