以前做过的一个项目用到了iptables做转发多个FTP服务,记录一下。
背景:
客户需求: 由终端上传许多文件到一个公网ip(省区服务器),这些文件需要再转发到对应的内网地区FTP服务器,最终决定在省区服务器上用iptables转发给各地区的FTP服务器。

思路
要想把这个省区服务器对多个内网FTP的转发需要:
1. 规划好端口,例如需要转到内网FTP服务器1的文件,上传到省区服务器的10021端口,其他以此类推
2. 配置iptables
3. 见文章最后
操作
省区服务器上IPTABLES转发FTP需要3个条件:
1 开启forward转发
2 装载模块
modprobe iptable_nat
ftp服务器上要加载下面两个模块
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
3 配置iptables
省区服务器
先加防火墙规则
iptables -P INPUT ACCEPT
iptables -F
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
service iptables save
service iptables restart
开启forward转发
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
#systcl -p
查看需要的3个模块在不在
lsmod|grep ip

缺两个,补上
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
1、编辑/etc/sysconfig/iptables-config文件,添加以下两行:
IPTABLES_MODULES=”ip_conntrack_ftp”
IPTABLES_MODULES=”ip_nat_ftp”
请一定注意两行内容的位置关系不要搞反了。如果将”ip_nat_ftp”放到前面是加载不到的。如果你的ftp服务是过路由或者防火墙(即内网映射方式一定需要此模块)。
以上等同于在加载iptables之前运行modprobe命令加载”ip_nat_ftp”和”ip_conntrack_ftp”模块。
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
以下是在省区服务器上添加的规则:这台服务器就一个网卡配置了内网地址,公网地址估计是路由等硬件映射过来的。
加上2条规则:
# iptables -t nat -A POSTROUTING -d 192.233.111.2(FTP1的ip) -p tcp --dport 21 -j MASQUERADE
# iptables -t nat -A PREROUTING -d 10.103.156.101(本地ip) -p tcp --dport 10021 -j DNAT --to-dest 192.233.111.2:21
查看现有iptables 中 nat表的规则
# iptables -L -t nat -v
Chain PREROUTING (policy ACCEPT 31 packets, 1896 bytes)
pkts bytes target prot opt in out source destination
0 0 DNAT tcp -- any any anywhere 10.103.156.101 tcp dpt:10021 to:192.233.111.2:21
Chain POSTROUTING (policy ACCEPT 35 packets, 2380 bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE tcp -- any any anywhere 192.233.111.2 tcp dpt:ftp
Chain OUTPUT (policy ACCEPT 35 packets, 2380 bytes)
pkts bytes target prot opt in out source destination
还有最后一步,也就是前面的 思路 里面说的第3条:
在本例中,这个省区服务器的公网ip是从一人防火墙上映射过来的,这里会造成一个情况,当外界有访问公网ip的10021端口后,转发到内网的FTP1服务器上,但在数据传输的时候会不通,因为防火墙不会给FTP1服务器生成的随机端口打开通路,这时又联系客户那边的网络工程师,说明了情况,在应用层网关做了配置,然后连接,收发数据都正常了。