关键词: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=YES pasv_min_port=9010 pasv_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.com pasv_addr_resolve=YES
重启vsftpd,问题照旧。
后来把ftp的21端口也改掉,改成9011,数据端口改成9012 - 9015,ftp客户的端口改成9011,连接一切正常。
最后的配置如下:
listen_port=9011 pasv_enable=YES pasv_min_port=9012 pasv_max_port=9015 pasv_addr_resolve=YES pasv_address=example.hostname.com
pasv_address 是真实的服务器地址,可以是域名。
猜测这中间出现的问题是在端口映射 服务器 9021 -> 虚拟机 21 之上。
如果是 服务器 21 -> 虚拟机 21,有可能不会出现问题,但是21端口已经被服务器占用,没有测试。
而9010到9015端口,都是用的直接映射,中间不存在端口转化,所以可以正常使用。
这其中道理,不是很清楚,欢迎大侠们来评评。