映射内网ftp服务器到公网报错问题解决

这两天公司测试环境有个需求要让合作方通过ftp推送数据,一般内网环境是不会对公网开放ftp服务的,但是因为是临时需求就帮着搭了ftp服务,并且做了公网映射。ftp服务搭好之后在内网访问正常,但是在公网访问出现可以登录无法传输数据。报错如下:

root># ftp 111.13.101.208 22220
Connected to 111.13.101.208 (111.13.101.208). 220 (vsFTPd 2.2.2) Name (111.13.101.208:root): user1 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 227 Entering Passive Mode (192,168,1,180,184,171). ftp: connect: Connection timed out ftp> put 1.txt local: 1.txt remote: 1.txt 227 Entering Passive Mode (192,168,1,180,182,129). ftp: connect: Connection timed out 

在网上查了说是ftp被动模式造成的,可以使用passive命令来开启或者关闭被动模式。但由于我这里是通过出口设备映射到公网,所以被动模式更符合需求,使用passive并不能解决问题。另外上面小括号里的(192,168,1,180,182,129)这一串字符搞的我很懵逼,这里明显应该是IP+PORT为什么是这个样子?网上查了下,最后两段是10进制端口转换成16进制拆分开转换成10进制,(lll¬ω¬)  拿上面的举个例子:

182--> 0xb6   #10转16

129-->0x81  #10转16

0xb681==46721 #16转10

关于被动模式的开启方法在服务器端修改了/etc/vsftpd/vsftpd.conf文件:

root># cat /etc/vsftpd/vsftpd.conf  | grep -v "^#" anonymous_enable=NO local_enable=YES write_enable=YES local_umask=000 dirmessage_enable=YES xferlog_enable=YES xferlog_std_format=YES ascii_upload_enable=YES ascii_download_enable=YES chroot_local_user=YES listen=YES listen_port=22220 local_root=/home/user1 #想指定用户访问目录时可用此项来设置 pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES userlist_deny=NO

#以上为初始vsftp配置,下面是开启被动模式参数 pasv_enable=YES pasv_min_port=22221 pasv_max_port=22222

设置完成后重启服务,然后再次尝试访问:

ftp> ls
227 Entering Passive Mode (192,168,1,180,56,205). ftp: connect: Connection timed out ftp> ls 227 Entering Passive Mode (192,168,1,180,56,206). ftp: connect: Connection timed out ftp> ls 227 Entering Passive Mode (192,168,1,180,56,205). ftp: connect: Connection timed out ftp> bye 221 Goodbye.

还是出现报错,但是端口好像已经变成服务端设置的参数了。另外在使用内网机器直接通过公网IP访问ftp服务也出现报错,错误为:

425 Security: Bad ip connecting

然后在服务器配置文件中添加了如下参数,并重启服务器:

# vi /etc/vsftpd/vsftpd.conf
添加:pasv_promiscuous=yes   #此选项激活时,将关闭PASV模式的安全检查,默认为NO
# service vsftpd restart

内网通过公网IP访问ftp可以正常传输数据,而使用外网设备依然报错,后来注意到报错中(192,168,1,180,56,205)这里的地址为内网服务器的IP,外网设备发起连接的地址应该是映射的公网IP(111.13.101.208),很显然在ftp连接建立之后,服务器返回了自己真实的IP给客户端,但是客户端无法通过这个私有IP(192.168.1.180)发起数据传输请求,所以导致timeout。然后在网上找到了这样一个参数:

pasv_address  #回传给客户端的IP
# vi /etc/vsftpd/vsftpd.conf
添加:pasv_address=111.13.101.208  #这里返回映射的公网IP给客户端
# service vsftpd restart

然后再进行访问发现数据可以正常传输,问题解决。

转载于:https://www.cnblogs.com/Dev0ps/p/9073048.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值