外网访问VSFTPD可创建文件夹但无法创建/编辑文件问题求助
解决外网访问vsftpd仅能创建文件夹、无法上传/编辑文件的问题
这问题我之前帮朋友排查过类似的,核心原因基本都是被动模式(PASV)的数据连接端口没配置到位——毕竟局域网内防火墙和端口转发都不是问题,但外网访问时,FTP的数据连接需要额外的端口支持,咱们一步步来搞定:
1. 配置vsftpd的被动模式参数
首先得确保vsftpd开启了被动模式,并指定固定的端口范围(避免随机端口导致路由器无法转发):
- 打开vsftpd配置文件:
sudo nano /etc/vsftpd.conf - 找到并修改/添加以下配置项(如果原来有注释掉的,去掉
#):pasv_enable=YES # 强制开启被动模式,外网访问必须用这个 pasv_min_port=40000 # 被动模式起始端口,选个不常用的范围 pasv_max_port=40100 # 被动模式结束端口,范围不用太大,100个足够 pasv_address=你的公网IP # 填服务器的固定公网IP,动态IP可以用DDNS地址 - 保存退出后重启vsftpd服务:
sudo systemctl restart vsftpd
2. 在路由器上配置端口映射
除了FTP默认的21控制端口,还要把刚才设置的被动模式端口范围转发到服务器:
- 登录你的路由器管理后台,找到「虚拟服务器」或「端口映射」功能
- 添加两条映射规则:
- 第一条:外部端口
21,内部IP填服务器的局域网IP(比如192.168.1.100),内部端口21,协议选TCP - 第二条:外部端口
40000-40100,内部IP同上,内部端口40000-40100,协议选TCP
- 第一条:外部端口
- 保存规则后重启路由器生效
3. 检查服务器防火墙(UFW)设置
Ubuntu 16默认用UFW防火墙,要确保相关端口被允许:
- 执行以下命令开放端口:
sudo ufw allow 21/tcp sudo ufw allow 40000:40100/tcp - 重启UFW使规则生效:
sudo ufw reload
4. 验证设置是否生效
打开Cyberduck,重新连接你的FTP服务器:
- 确认连接设置里的「传输模式」是被动(PASV)(默认应该是,但手动检查更稳妥)
- 尝试创建文件、上传或编辑现有文件,看是否还会卡在超时阶段
补充说明:为什么能创建文件夹却不能操作文件?
创建文件夹只需要通过21端口的控制连接完成命令交互,不需要额外的数据连接;但上传、下载或编辑文件时,需要建立单独的数据连接——被动模式下这个连接是从服务器的pasv端口发起的,如果端口没转发,外网客户端就接收不到这个连接请求,自然会卡在操作阶段直到超时。
内容的提问来源于stack exchange,提问作者stevieki
相关产品推荐
相关产品推荐

