一台现网上跑的vsftp服务器,本身只给局域网内的服务器使用,不过因为需求的变更,想通过公网也能进行访问。而该主机由于没有公网IP,只能在nat上进行配置。具体访问流程为: |客户机|:::::::::::::::::|LINUX网关|——|VSFTPD服务器| ,而三个服务器对应的IP假设如下:

1客户机的IP: 10.10.10.10/8
2LINUX网关IP: 10.10.10.20/8,  192.168.1.1
3VSFTPD服务器IP: 192.168.1.8/24

服务器的ftp配置文件如下:

 1anonymous_enable=NO
 2listen=YES
 3#listen_port=21
 4################set pasv##################
 5pasv_enable=YES
 6pasv_min_port=9921
 7pasv_max_port=9927
 8#########################for vuser####################
 9guest_enable=YES
10guest_username=www
11pam_service_name=vsftpd.vuser
12user_config_dir=/etc/vsftpd/vsftpd_user_conf
13local_root=/data1
14anon_umask=022
15anon_other_write_enable=YES
16######################################################
17local_enable=YES
18write_enable=YES
19local_umask=022
20anon_upload_enable=NO
21anon_mkdir_write_enable=YES
22dirmessage_enable=YES
23xferlog_enable=YES
24connect_from_port_20=YES
25xferlog_std_format=YES
26userlist_enable=YES
27tcp_wrappers=YES
28log_ftp_protocol=YES
29dual_log_enable=YES
30max_clients=200
31max_per_ip=20

而如果想实现通过公网IP nat连接内网主机的ftp并进行交互的话,需要在iptables上做如下配置。

1、开启转发功能

1echo 1 > /proc/sys/net/ipv4/ip_forward

该处也可以通过/etc/sysctl.conf文件配置为重启后生效。

2、增加如下iptables配置

1iptables -t nat -A POSTROUTING -p tcp -s 192.168.1.8 --sport 20:21 -j SNAT --to 10.10.10.20
2iptables -t nat -A POSTROUTING -p tcp -s 192.168.1.8 --sport 9921:9927 -j SNAT --to 10.10.10.20
3iptables -t nat -A PREROUTING -p tcp -d 10.10.10.20 --dport 21 -j DNAT --to-destination 192.168.1.8
4iptables -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 保存配置。

关于ftp nat转发的原理,可以参看网上的一篇 E文 文章