首页 » 备忘录 » 正文

centos6利用iptables用DNAT实现端口映射并解决ftp列表错误问题

之前写了centos7下利用firewall防火墙实现了端口映射的功能来达到加速80端口的目的,但是如果同时也要转发ftp流量的话就会一直出现ftp连接列表错误问题,查询了下相关资料,这是由于源IP通过本机IP转发到目标IP,在进入被动模式的时候,目标IP发送了目标的IP给源IP,所以源IP就直接尝试和目标IP建立数据连接,因为建立数据连接和控制连接的ip不同,所以目标IP拒绝访问,可以使用iptables的ip_conntrack模块来实现伪装目标ip为本机ip来解决这个问题,但是centos7下firewall和iptables不知道是不是不能共存,而且卸载firewall再安装iptables也有一些问题,所以我就直接改用centos6来配置了。

首先要开启转发功能:

vi /etc/sysctl.conf

添加或修改下面这一行:

net.ipv4.ip_forward = 1

让修改生效:

sysctl -p

转发功能开启后设置iptables规则,假设目标ip为a.a.a.a,首先对80端口和21端口进行映射,输入命令:

#iptables -t nat -A PREROUTING -p tcp --dport 80 -m tcp -j DNAT --to-destination a.a.a.a:80
#iptables -t nat -A PREROUTING -p tcp --dport 21 -m tcp -j DNAT --to-destination a.a.a.a:21
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

保存iptables,并重启生效:

service iptables save
service iptables restart

然后输入#iptables -t nat -nL可以查看到nat规则已经生效。但是试着访问了一下网页却依然无法访问,编辑iptables文件:

vi /etc/sysconfig/iptables

删除下面这一行:

-A FORWARD -j REJECT --reject-with icmp-host-prohibited

重启iptables:

service iptables restart

这样就可以访问80端口了,然后我们再来尝试连接ftp,和之前一样出现了列表错误的问题,这里就需要试使用iptables的ip_conntrack模块来处理,执行以下命令:

#modprobe ip_conntrack
#modprobe ip_conntrack_ftp
#modprobe ip_nat_ftp

然后再连接一下ftp,已经没有问题了,如果重启后模块失效只要在/etc/rc.local文件中加入以上命令开机自动加载即可。

这样就把web的80端口和ftp的21端口都通过端口映射功能实现了加速。

发表评论