开头总要交待一些背景
项目用到的文件纷发,使用ftp做文件下载。一些客户对端口有限制,所以需要修改默认的配置。然后就是会遇到各种奇怪的问题,见招拆招啦。
对于限制端口的情况,服务器必须开放一个主端口,一般是21,再开放一个端口段,用作被动模式的数据传输使用
配置被动端口范围,以配合防火墙通过
/etc/vsftp/vsftp.conf 文件修改如下下项目
listen_port=7018 #主端口调整
chroot_local_user=YES #只能在用户家目录活动
pasv_enable=Yes
pasv_min_port=7010
pasv_max_port=7030
/etc/sysconfig/iptables 增加如下规则
-A INPUT -m state --state NEW -m tcp -p tcp --dport 7010:7050 -j ACCEPT
问题一
前提:服务器在内网,通过路由器映射的一个外网IP访问
遇到一个可以登陆,但不能使用诸如 ls 之类的命令,并提如下错误
227 Entering Passive Mode (192,168,1,5,27,111).
显示一个内网的ip地址。 尝试输入 Passive
命令,突然就好使了。
估计基原因就是因为主动模式和被动模式哪里产生的问题。
ftp> passive
Passive mode off. #关闭被动模式,使用主动模式。
ftp>
问题二
Filezilla会显示一个状态-----服务器发回了不可路由的地址,使用服务器地址代替
补课时间
主动(Standard)模式:客户端首先和FTP Server的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。
被动(Passive)模式:在建立控制通道的时候和Standard模式类似,当客户端通过这个通道发送PASV 命令的时候,FTP server打开一个位于1024和5000之间的随机端口并且通知客户端在这个端口上传送数据的请求,然后FTP server 将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接。
但明显问题出在 显示那个内网的IP上 ,最终找到一个 配置项,并修改如下:
pasv_address=106.2.2xx.2xx
把映射的外网地址填上,随后可以正常下载了。
解决了这个问题,但并不知道原因