Chinaunix首页 | 论坛 | 博客
  • 博客访问: 522547
  • 博文数量: 53
  • 博客积分: 2265
  • 博客等级: 大尉
  • 技术积分: 574
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-15 16:50
文章分类

全部博文(53)

文章存档

2019年(1)

2018年(2)

2016年(2)

2015年(1)

2014年(6)

2013年(5)

2012年(7)

2011年(16)

2010年(13)

分类: LINUX

2016-09-01 16:57:58

之前一直在BSD下做防火墙,但不得不换Linux(CentOS)的时候,被迫使用了iptables.

但搜索了网上的教程,大多文档都年久失修,且都是转载不经过测试,所以难免错漏。

网络环境 , 简图:
LAN(eth0): 192.168.1.1/24
WAN1(eth1)  11.111.11.11  默认网关为:11.11.11.1
WAN2(eth2)  22.22.22.22  默认网关为:  22.22.22.2

                    __________(eth1) WAN1
                    |
LAN  --(eth0) -----| CentOS
                    |_________ (eth2)WAN2


将从两个WAN口出去的数据包做NAT,NAT有以下两种方式,要么选择1,要么选择2.

点击(此处)折叠或打开

  1. /sbin/iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
  2. /sbin/iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
或者

点击(此处)折叠或打开

  1. /sbin/iptables -t nat -A POSTROUTING -o eth1 -s 192.168.1.0/24 -j SNAT --to-source 11.11.11.11
  2. /sbin/iptables -t nat -A POSTROUTING -o eth2 -s 192.168.1.0/24 -j SNAT --to-source 22.22.22.22
 
默认路由:

  1. ip route add default via 11.11.11.1 dev eth1
该路由表示,凡是没有作路由指定的话,所有上网都从eth1出去,即WAN1
至此,默认路由(从WAN1出去)已经完成。


由于有另外一条专线WAN2, 也需要做另外一条默认经过WAN2出去的路由,以下是WAN2的设置:

给系统增加一个标示为100的路由表(该路由表表示100对应为designate),让所有通向WAN2的数据查询标示为100的路由表:

  1.  ip route add 0/0 via 22.22.22.2 table 100
写入到 /etc/iproute2/rt_tables ,建立路由表对应关系.具体文件格式如下

  1.  100     designate

  然后添加路由规则,IP为192.168.1.10的主机将从路由表编号为100的出去。

  1. ip rule add from 192.168.1.10 table 100
从WAN2上网的主机的策略路由过程是这样的:
查看ip rule --> ip route --> nat


第二方法:

也需要做NAT,方法同上的方法。以下步骤同方法一相同

点击(此处)折叠或打开

  1. /sbin/iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
  2. /sbin/iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
或者

点击(此处)折叠或打开

  1. /sbin/iptables -t nat -A POSTROUTING -o eth1 -s 192.168.1.0/24 -j SNAT --to-source 11.11.11.11
  2. /sbin/iptables -t nat -A POSTROUTING -o eth2 -s 192.168.1.0/24 -j SNAT --to-source 22.22.22.22
 
默认路由:

  1. #ip route add default via 11.11.11.1 dev eth1
  1. #ip route add 0/0 via 22.22.22.2 table 100
写入到 /etc/iproute2/rt_tables ,建立路由表对应关系.具体文件格式如下

  1.  100     designate

与方法一不同的地方:
#以下iptables规则为,设置从eth0(就是LAN口)出去的数据都mark下,

  1. # iptables -t mangle -A PREROUTING -i eth0 -s 192.168.1.10/24 -j MARK --set-mark 1
#以下规则为,凡是iptables中mark了1的数据包都 交给 路由表100 (见上面的ip route add 0/0 via 22.22.22.2 table 100)
  1. # ip rule add fwmark 1 table 100
#更新路由缓存
  1. # ip route flush cache

从WAN2上网的主机的策略路由过程是这样的:
 iptables标识数据包 --> 标识的数据包加入ip rule规则 --> 最后检查路由 --> NAT 上网

窃喜!
最后你以为就结束了,你会发现,TM 还!是!上!不!了!网!
最后你以为就结束了,你会发现,TM 还!是!上!不!了!网!
最后你以为就结束了,你会发现,TM 还!是!上!不!了!网!
有木有?!

source route verification
最后你得在eth2(也就是WAN2口)上作以下设置,关闭rp_filter
  1. sysctl -w net.ipv4.conf.eth2.rp_filter=0
至此才算完成。


由于以上命令都没有写入系统,系统重启后就会消失,以下操作来保存一些命令:
#保存iptables
/etc/init.d/iptables save


0/0 via 192.168.1.22 table 100
/etc/sysconfig/network-scripts/route-eth2

把路由规则
fwmark 1 table cosmo
写入 /etc/sysconfig/network-scripts/rule-eth1

ps:
使用以下命令可以产看路由和路由规则:
ip rule     --->查看路由规则
ip route  ---->查看默认路由表
ip route list table 100   --->查看 路由表为100的路由

zhici






阅读(4938) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~