一台现网上跑的vsftp服务器,本身只给局域网内的服务器使用,不过因为需求的变更,想通过公网也能进行访问。而该主机由于没有公网IP,只能在nat上进行配置。具体访问流程为: |客户机|:::::::::::::::::|LINUX网关|——|VSFTPD服务器| ,而三个服务器对应的IP假设如下:
客户机的IP: 10.10.10.10/8 LINUX网关IP: 10.10.10.20/8, 192.168.1.1 VSFTPD服务器IP: 192.168.1.8/24
<br />
服务器的ftp配置文件如下:
anonymous_enable=NO listen=YES #listen_port=21 ################set pasv################## pasv_enable=YES pasv_min_port=9921 pasv_max_port=9927 #########################for vuser#################### guest_enable=YES guest_username=www pam_service_name=vsftpd.vuser user_config_dir=/etc/vsftpd/vsftpd_user_conf local_root=/data1 anon_umask=022 anon_other_write_enable=YES ###################################################### local_enable=YES write_enable=YES local_umask=022 anon_upload_enable=NO anon_mkdir_write_enable=YES dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES userlist_enable=YES tcp_wrappers=YES log_ftp_protocol=YES dual_log_enable=YES max_clients=200 max_per_ip=20
<br />
而如果想实现通过公网IP nat连接内网主机的ftp并进行交互的话,需要在iptables上做如下配置。
1、开启转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
该处也可以通过/etc/sysctl.conf文件配置为重启后生效。
<br />
2、增加如下iptables配置
iptables -t nat -A POSTROUTING -p tcp -s 192.168.1.8 --sport 20:21 -j SNAT --to 10.10.10.20 iptables -t nat -A POSTROUTING -p tcp -s 192.168.1.8 --sport 9921:9927 -j SNAT --to 10.10.10.20 iptables -t nat -A PREROUTING -p tcp -d 10.10.10.20 --dport 21 -j DNAT --to-destination 192.168.1.8 iptables -t nat -A PREROUTING -p tcp -d 10.10.10.20 --dport 9921:9927 -j DNAT --to-destination 192.168.1.8
配置完成后记得/etc/init.d/iptables save 保存配置。
<br />
关于ftp nat转发的原理,可以参看网上的一篇 E文 文章 。