之前一直在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.
-
/sbin/iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
-
/sbin/iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
或者
-
/sbin/iptables -t nat -A POSTROUTING -o eth1 -s 192.168.1.0/24 -j SNAT --to-source 11.11.11.11
-
/sbin/iptables -t nat -A POSTROUTING -o eth2 -s 192.168.1.0/24 -j SNAT --to-source 22.22.22.22
默认路由:
-
ip route add default via 11.11.11.1 dev eth1
该路由表示,凡是没有作路由指定的话,所有上网都从eth1出去,即WAN1
至此,默认路由(从WAN1出去)已经完成。
由于有另外一条专线WAN2, 也需要做另外一条默认经过WAN2出去的路由,以下是WAN2的设置:
给系统增加一个标示为100的路由表(该路由表表示100对应为designate),让所有通向WAN2的数据查询标示为100的路由表:
-
ip route add 0/0 via 22.22.22.2 table 100
写入到 /etc/iproute2/rt_tables ,建立路由表对应关系.具体文件格式如下
然后添加路由规则,IP为192.168.1.10的主机将从路由表编号为100的出去。
-
ip rule add from 192.168.1.10 table 100
从WAN2上网的主机的策略路由过程是这样的:
查看ip rule --> ip route --> nat
第二方法:
也需要做NAT,方法同上的方法。以下步骤同方法一相同
-
/sbin/iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
-
/sbin/iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
或者
-
/sbin/iptables -t nat -A POSTROUTING -o eth1 -s 192.168.1.0/24 -j SNAT --to-source 11.11.11.11
-
/sbin/iptables -t nat -A POSTROUTING -o eth2 -s 192.168.1.0/24 -j SNAT --to-source 22.22.22.22
默认路由:
-
#ip route add default via 11.11.11.1 dev eth1
-
#ip route add 0/0 via 22.22.22.2 table 100
写入到 /etc/iproute2/rt_tables ,建立路由表对应关系.具体文件格式如下
与方法一不同的地方:
#以下iptables规则为,设置从eth0(就是LAN口)出去的数据都mark下,
-
# 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)
-
# ip rule add fwmark 1 table 100
#更新路由缓存
从WAN2上网的主机的策略路由过程是这样的:
iptables标识数据包 --> 标识的数据包加入ip rule规则 --> 最后检查路由 --> NAT 上网
窃喜!
最后你以为就结束了,你会发现,TM 还!是!上!不!了!网!
最后你以为就结束了,你会发现,TM 还!是!上!不!了!网!
最后你以为就结束了,你会发现,TM 还!是!上!不!了!网!
有木有?!
source route verification
最后你得在eth2(也就是WAN2口)上作以下设置,关闭rp_filter
-
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) |