*PLM:FTP被动模式配置-公网IP

2021-07-16

业务背景:业务中需要使用对方的FTP服务器,然后使用脚本自动登录FTP服务器并扫描对应目录,然后下载需要的文件。


问题:之前使用被动模式连接一直正常,突然有一天我方无法获取到正常下载文件;但是使用windows客户端是可以正常上传、下载的。

问题排查:

1、Windows客户端可以正常使用,说明网络是没问题的,ftp server也正常运行;

2、使用ftp命令/开启debug日志,查看每一步的信息;

看到关键信息:

*cmd* 'PASV'

*resp* '227 Entering Passive Mode (172,17,71,15,43,14)'

这里发送被动模式命令后,server返回的是内网地址(172.17.71.15),客户端会以内容地址加端口建立数据传输通道,从而导致数据传输失败。


3、Windows客户端为什么可以正常使用

细看Windows客户端连接过程中的信息,可以看到“状态:    服务器发回了不可路由的地址。使用服务器地址代替。”

-- 其实客户端是对这种情况做了兼容处理的。

4、windows客户端是如何处理的

查看客户端配置,“被动模式”配置项中包含如下配置


20191129162141716.png


5、为什么之前正常,后来异常

对方网络进行了调整,之前FTP服务器是有公网IP的,后来添加了负载均衡设备,FTP服务器只有内网IP。



解决方案:

确定问题是server端被动模式下,给客户端返回的地址是内网IP,解决方法就是让它返回公网IP。修改方式如下:

1、linux下使用vsftp服务端

类似passive_address这样的配置


2、windows端FileZilla服务端

企业微信20210716-094324@2x.png


3、防火墙/路由器设置

3.1、若是云服务器直接设置入方向规则:开放21,10010-10050端口:


企业微信20210716-094106@2x.png



3.2、若是本地文件服务器需在防火墙中设置入方向规则以及路由器上映射本地文件服务器的端口:




被动传输设置说明:


1、如果服务器本身直接拥有公网IP,可以选软件默认的“Default”。


2、如果服务器是在局域网里面,在一个网关后面,那么就要选择第二项“Use the follwoing IP”,并且在下面的输入栏填写公网的IP地址;否则,客户端用PASV被动模式可能无法连接FTP服务器。因为服务器是在内网中,在客户端使用PASV模式连接服务器的时候,服务器收到连接请求之后需要把自身的IP地址告诉客户端,由于服务器在内网中,它侦测到的IP地址是内网的(如192.168.0.5),它把这个IP地址交给客户端,客户端自然无法连接。在这里设置了指定的IP地址后,服务器就会把这个公网合法的IP地址提交给客户端,这样才能正常建立连接。如果服务器是动态IP的,那么可以选择下面的“Retrieve external IP address from”,利用FileZilla官方网站免费提供的IP查询页面获取当时的公网合法IP,然后服务器把这个公网合法IP地址提交给客户端。当然静态IP也可以用这个,只不过没有必要。


写下你的评论吧