记录:vsftpd在vmware中使用Nat防火墙下使用PASV模式的搭建

来源:互联网 发布:河南工程学院(软件类) 编辑:程序博客网 时间:2024/04/28 01:54

关键词:vsftpd、Centos、nat、pasv、vmware

标题有点拗口。在服务器中安装了一个vmware虚拟机,然后搭建了一个Centos5.4的Linux系统。准备在上面配置一台ftp服务器,采用的是vsftpd。
网络环境是这样的:服务器拥有一个固定IP,所以要连接到虚拟机下的Centos,采用的是nat方式。
vsftpd采用被动模式(pasv),监听端口采用默认的21,数据通讯高端口使用9010 - 9015
在linux的防火墙上开放了这些端口。
命令如下:

/sbin/iptables -I INPUT -p tcp --dport 21 -j ACCEPTT/sbin/iptables -I INPUT -p tcp --dport 9010 -j ACCEPT/sbin/iptables -I INPUT -p tcp --dport 9011 -j ACCEPT/sbin/iptables -I INPUT -p tcp --dport 9012 -j ACCEPT/sbin/iptables -I INPUT -p tcp --dport 9013 -j ACCEPT/sbin/iptables -I INPUT -p tcp --dport 9014 -j ACCEPT/sbin/iptables -I INPUT -p tcp --dport 9015 -j ACCEPT/etc/rc.d/init.d/iptables save/etc/init.d/iptables status

 


配置文件:
/etc/vsftpd/vsftpd.conf
相关pasv部分:

pasv_enable=YESpasv_min_port=9010pasv_max_port=9015

 

然后在虚拟机上做了nat端口映射。

服务器 9021 -> 虚拟机 21服务器 9010 -> 虚拟机 9010服务器 9011 -> 虚拟机 9011服务器 9012 -> 虚拟机 9012服务器 9013 -> 虚拟机 9013服务器 9014 -> 虚拟机 9014服务器 9015 -> 虚拟机 9015

 


添加好ftp用户,过程略。


然后在服务器上用flashfxp登录虚拟机(使用内部IP,192.168.17.128)的vsftpd,没有问题,数据连接端口也在9010到9015之间。

然后在笔记本上面使用flashfxp连接vsftpd,IP填写服务器真实IP,端口填写nat映射成的9021,开始连接,能够登录进用户,但是列表的时候打开的数据端口,不是设定的9010 - 9015,而是随机的,比如10534什么的,导致无法列表和传输数据。

后来Google了一把,在/etc/vsftpd/vsftpd.conf配置文件中添加了2个参数

pasv_address=example.hostname.compasv_addr_resolve=YES

 

重启vsftpd,问题照旧。


后来把ftp的21端口也改掉,改成9011,数据端口改成9012 - 9015,ftp客户的端口改成9011,连接一切正常。

最后的配置如下:

listen_port=9011pasv_enable=YESpasv_min_port=9012pasv_max_port=9015pasv_addr_resolve=YESpasv_address=example.hostname.com

 


pasv_address 是真实的服务器地址,可以是域名。


猜测这中间出现的问题是在端口映射 服务器 9021 -> 虚拟机 21 之上。
如果是 服务器 21 -> 虚拟机 21,有可能不会出现问题,但是21端口已经被服务器占用,没有测试。
而9010到9015端口,都是用的直接映射,中间不存在端口转化,所以可以正常使用。
这其中道理,不是很清楚,欢迎大侠们来评评。


<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>