这两天公司测试环境有个需求要让合作方通过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=

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

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

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

映射内网ftp服务器到公网报错问题解决的更多相关文章

  1. 映射内网ftp服务器到公网后内网访问出错问题

    上文说道映射后外网无法访问解决:https://www.cnblogs.com/Dev0ps/p/9073048.html 添加了ftp的pasv_address的地址 ,内网客户端要设置主动模式(a ...

  2. 内网客户 通过 公网域名/ip 访问内网web服务器 出错

    在一内部局域网中, client  内网地址为 10.0.0.2     web  服务器内网地址为 10.0.0.1    外网地址为  211.6.15.1    域名为  xx.love.com ...

  3. 工具篇:使用natapp工具映射内网到外网访问

    一.环境说明 开发基于微信公众号的应用最大的痛苦之处就是调试问题,每次实现一个功能后都需要部署到一个公网服务器进行测试,因为微信用户每次向公众号发起请求时,微信服务器会先接收到用户的请求,然后再转发到 ...

  4. 用 ROS 做内网DNS服务器

    转载:http://iliuyong.iteye.com/blog/1035692 用 ROS 做内网DNS服务器方法:1.ROS 设置IP ->DNS 选择"static" ...

  5. Apache James搭建内网邮件服务器

    Apache James搭建内网邮件服务器 极客521 | 极客521 2014-08-21 148 阅读 java 大概之前两个礼拜的日子,讨论会介绍了关于了.net内网邮件服务器的搭建.所以自己也 ...

  6. 外网zabbix-server使用主动模式监控公司内网windows服务器

    外网zabbix-server使用主动模式监控公司内网windows服务器 1.Zabbix Agent active批量调整客户端为主动模式监控将Template OS Windows模板调整为主动 ...

  7. 云计算之路-试用Azure:搭建自己的内网DNS服务器

    之前我们写过一篇博文谈到Azure内置的内网DNS服务器不能跨Cloud Service,而我们的虚拟机部署场景恰恰需要跨多个Cloud Service,所以目前只能选择用Azure虚拟机搭建自己的内 ...

  8. wstngfw中使用虚拟IP映射内网IP

    wstngfw中使用虚拟IP映射内网IP -------------------------------- Server01: IP: 192.168.195.73/24 GW: 192.168.19 ...

  9. go语言,golang学习笔记3 用命令下载框架报错问题解决 设置环境变量

    go语言,golang学习笔记3 用命令下载框架报错问题解决 设置环境变量 下载安装:go get github.com/astaxie/beego 首页 - beego: 简约 & 强大并存 ...

随机推荐

  1. Unix 的缺陷 - 王垠

    我想通过这篇文章解释一下我对 Unix 哲学本质的理解.我虽然指出 Unix 的一个设计问题,但目的并不是打击人们对 Unix 的兴趣.虽然 Unix 在基础概念上有一个挺严重的问题,但是经过多年的发 ...

  2. pop弹簧动画实现

    POP是一个在iOS与OS X上通用的极具扩展性的动画引擎.它在基本的静态动画的基础上增加的弹簧动画与衰减动画,使之能创造出更真实更具物理性的交互动画.POP的API可以快速的与现有的ObjC代码集成 ...

  3. 用python开发调试器——起始篇

    首先,你得准备一套python开发环境,正常情况下,一般是在windows下开发的,因为win系统应用广泛,再则就是要有个IDE,这里我选择我熟悉的Eclipse.环境搭建,网上都有,比如:http: ...

  4. JQuery DOM操作 、属性和CSS样式操作、其他函数

    DOM操作 1.在div1内部最后追加一个节点 $("#div1").append("<img src='../01-HTML基本标签/img/Male.gif'/ ...

  5. Day15 Javascipt内容补充

    JavaScript函数: 函数: function 函数名(a,b,c){ 执行代码 } 1,如何去找到标签 Dom直接选择器: 1,找到标签 #获取单个元素 document.getElement ...

  6. 基于libevent的tcp拆包分包库

    TCP/IP协议虽然方便,但是由于是基于流的传输(UDP是基于数据报的传输),无论什么项目,总少不了解决拆包分包问题. 以前的项目总是每个程序员自己写一套拆包分包逻辑,实现的方法与稳定性都不太一致.终 ...

  7. Java 故障安全异常处理

    异常处理代码必须保证其故障安全机制,其中一条重要的规则如下: 在try-catch-finally块抛出的最后一个异常将会在调用堆栈中传递. 所有早期异常将会消失. 如果从一个catch或finall ...

  8. Google揭开Mesa的神秘面纱——一个具备跨地域复制和近实时特性的可伸缩数据仓库

    http://www.infoq.com/cn/news/2014/08/google-data-warehouse-mesa Google发表了一篇新的论文,该论文描述了他们内部所使用的一个被称为M ...

  9. 在Linux上安装Python3

    1. 安装依赖环境 # yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline- ...

  10. 震惊!外部类可以访问内部类private变量

    在讲Singleton时我举例时用过这样一段代码: public class SingletonDemo { private static class SingletonHolder{ private ...