项目场景:
中心节点A, 分布式节点B,分布式节点C,安装子系统到B和C(在同一网段或者网络互通)
问题描述
软件包上传到中心节点A,分布式B和C通过连接中心节点A的FTP去拉取软件包来安装,偶现拉取失败
Java代码中提示创建连接失败
原因分析:
考虑正常环境没有此类问题,所以应该是环境方面的问题,正好是运营商项目,现场对网络管理较为严格
- 检查ftp状态,systemctl status vsftpd,状态没有异常
- 在分布式B上用ftp命令连接中心节点A的ftp,此时运行ls命令查看ftp目录时发现异常,ls几次就会提示无法连接:Connection refuse
- 也就是说FTP连接被动模式下,连接时能创建,时不能创建,此时考虑可能是现场大于1024的端口也做了管控,内网之间也没有完全放开
此处简单说下FTP被动模式与主动模式
主动模式:客户端随机开一个大于1024的端口向服务端21端口建立连接,然后开放N+1端口并监听,服务端默认通过20数据端口向客户端端口传输数据
被动模式:同上,客户端向服务端21端口发起连接,服务端开放N+1端口用于传输数据,客户端连接服务器数据端口获取数据
所以被动模式下,服务端随机分配的端口可能分布式无法连接,所以连接创建失败
解决方案:
设置vsftp为被动模式并指定打开的数据端口范围,此处要与现场沟通好,一般有端口管控的现场,可能涉及到申请等,需要告知端口用途
vi /etc/vsftpd/vsftpd.conf
pasv_enable=YES
pasv_min_port=10000
pasv_max_port=10020
systemctl restart vsftpd