红联Linux门户
Linux帮助

iptables nat跳转

发布时间:2014-11-02 15:12:17来源:linux网站作者:wang7dao

1、目的:解决网络跨运营商互访质量不佳的问题,通过一台双网卡连接两个不同的运营商的linux主机,通过iptablse进行nat跳转,从而解决此网络问题。


2、主参考文档:Iptables 指南.chm。


3、主要的表:
filter:筛选过滤表,不加表时,默认是这个表,用于防火墙规则过滤
nat:转发表,用于IP跳转
mangle:改包的一些属性,用于流控,QOS等,此表用得很少,可以不理它


4、安装:有些系统是自带的,有些不自带或比较老的要下载再编译安装,文档2有介绍


5、打开服务:service iptables start
加入开机启动:chkconfig iptables on


6、查看服务状态(有时显示的不准,如里面一条规则也没有时)
service iptables status --也可以用于查看所有的表链规则


7、为开启路由转发必须执行的命令
echo "1" > /proc/sys/net/ipv4/ip_forward  --这个是开启转发必要的命令,但这样操作是临时的,重启机子就还原了,永久设置见下面
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp


8、永久设置转发功能,防止重启失效
# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.tcp_syncookies = 1
# sysctl -p (使设置马上生效)


9、语法格式
iptables [-t table] command [match] [target/jump]
--table
如果不写,默认是指filter表

--command
见文档6.3

--match
见文档6.4

--target/jum
见文档6.5


10、单网卡实例:x------〉广州机房(即中转机子)120.132.152.142:9101------〉运营商219.140.165.133:80。-j MASQUERADE智能匹配,但消耗一定的cpu
iptables -t nat -A PREROUTING -p tcp --dport 9101 -j DNAT --to 219.140.165.133:80
iptables -t nat -A POSTROUTING -p tcp --dport 80 -j MASQUERADE


11、双网卡双外网实例:X------〉183.62.178.85:7001------〉158.250.56.154:7001------〉112.90.176.35:7001
iptables -t nat -A PREROUTING -d 183.62.178.85 -p tcp -m tcp --dport 7001 -j DNAT --to-destination 112.90.176.35:7001
iptables -t nat -A POSTROUTING -d 112.90.176.35 -p tcp -m tcp --dport 7001 -j SNAT --to-source 158.250.56.154


12、常用命令:
--清空nat表PREROUTING链,谨慎操作
iptables -t nat -F PREROUTING
--清空nat表POSTROUTING链,谨慎操作
iptables -t nat -F POSTROUTING
--显示明细
iptables -t nat -nvL --line
--删除编号88
iptables -t nat -D PREROUTING 88
--保存
service iptables save  或/etc/sysconfig/iptables save
--重启iptables
service iptables restart


13、配置完生成的文件
/etc/sysconfig/iptables  #当前的配置
/etc/sysconfig/iptables.save   #上次的配置备份


14、telnet测试

--添加静态路由---------------


15、双网卡双外网的情况下,不一定所有环境两个网卡都可以ping通,这主要取决于上层网络提供商的设置,一般用户控制改变不了的。只有设置了网关的网卡可以ping通,但却不影响使用。
如果只有一个能ping通的话,那就必须添加路由的方式来解决跳转的问题。
如果两个都可以ping通,虽跳转可以成功,但出口都默认只是设置的默认网关出口,相当于网络问题只解决了一半。


16、环境说明:
eth0:IPADDR=183.62.178.85  GATEWAY=183.62.178.94  --电信网络
eth1:IPADDR=58.250.56.154  GATEWAY=58.250.56.1    --联通网络
目的访问:112.90.176.35:7001
测试路径:telnet 183.62.178.85 7001
路径说明:X------〉183.62.178.85:7001------〉158.250.56.154:7001------〉112.90.176.35:7001
设置的跳转命令如上面的11点


17、路由添加:
路由添加:# route add -net 112.90.176.0  netmask 255.255.255.0 gw 58.250.56.1 eth1
或# route add -net 112.90.176.0/24 gw 58.250.56.1 eth1
删除路由:# route delete -net 112.90.176.0  netmask 255.255.255.0 gw 58.250.56.1 eth1
或# route delete -net 112.90.176.0/24 gw 58.250.56.1 eth1


18、假设默认网关是电信,且源地址或目的地址是能判断为联通的,那么就必须对这个联通的源地址或目的地址做如上的静态路由。


19、重启机子后,路由会失效,故要把它加到/etc/rc.d/rc.local中,如果不小心重启了网卡,也会让路由失效,此时就得到/etc/rc.d/rc.local找到脚本再运行一下了。