iptables 的mangle表
内网的客户机通过Linux主机连入Internet,而Linux主机与Internet连接时有两条线路,它们的网关如图所示。现要求对内网进行策略路由,所有通过TCP协议访问80端口的数据包都从ChinaNet线路出去,而所有访问UDP协议53号端口的数据包都从Cernet线路出去。
这是一个策略路由的问题,为了达到目的,在对数据包进行路由前,要先根据数据包的协议和目的端口给数据包做上一种标志,然后再指定相应规则,根据数据包的标志进行策略路由。为了给特定的数据包做上标志,需要使用mangle表,mangle表共有5条链,由于需要在路由选择前做标志,因此应该使用PREROUTING链,下面是具体的命令。
- iptables -t mangle -A PREROUTING -i eth0 -p tcp
--dport 80 -j MARK --set- mark 1 - iptables -t mangle -A PREROUTING -i eth0 -p udp
--dprot 53 -j MARK --set- mark 2
以上命令在mangle表的PREROUTING链中添加规则,为来自eth0接口的数据包做标志,其匹配规则分别是TCP协议、目的端口号是80和UDP协议、目的端口号是53,标志的值分别是1和2。数据包经过PREROUTING链后,将要进入路由选择模块,为了对其进行策略路由,执行以下两条命令,添加相应的规则。
- ip rule add from all fwmark 1 table 10
- ip rule add from all fwmark 2 table 20
以上两条命令表示所有标志是1的数据包使用路由表10进行路由,而所有标志是2的数据包使用路由表20进行路由。路由表10和20分别使用了ChinaNet和Cernet线路上的网关作为默认网关,具体设置命令如下所示。
- ip route add default via 10.10.1.1 dev eth1 table 10
- ip route add default via 10.10.2.1 dev eth2 table 20
以上两条命令在路由表10和20上分别指定了10.10.1.1和10.10.2.1作为默认网关,它们分别位于ChinaNet和Cernet线路上。于是,使用路由表10的数据包将通过ChinaNet线路出去,而使用路由表20的数据包将通过Cernet线路出去。
(2)
iptables网关服务器三块网卡:eth0(网通ip:10.0.0.1)、eth1(电信ip:20.0.0.1);eth2:网关192.168.10.1。
要求:公司内网要求192.168.10.1---100以内的ip使用 10.0.0.1 网关上网(网通),其他IP使用 20.0.0.1 (电信)上网;
iptables网关服务器配置如下:
1 2 3 4 5 6 7 |
ip route add
default
gw
20.0
.
0.1
ip route add table
10
via
10.0
.
0.1
dev eth0
#eth0 是
10.0
.
0.1
所在的网卡,
10
是路由表的编号
ip rule add fwmark
10
table
10
#fwmark
10
是标记,table
10
是路由表
10
。 标记了
10
的数据使用table10 路由表
iptables -A PREROUTING -t mangle -i eth2 -s
192.168
.
10.1
-
192.168
.
10.100
-j MARK --
set
-mark
10
#使用iptables给相应的数据打上标记
|
mangle应用顺序要高于nat、filter哈。
案例2、
iptables网关服务器三块网卡:eth0(网通ip:10.0.0.1)、eth1(电信ip:20.0.0.1);eth2:网关192.168.10.1。
要求:公司内网要求员工访问外面的网站服务;使用 10.0.0.1 网关上网(网通),其他IP使用 20.0.0.1 (电信)上网;
1 2 3 4 |
iptables -t mangle -A PREROUTING -i eth2 -p tcp --dport
80
-j MARK --
set
-mark
20
ip route add
default
gw
20.0
.
0.1
ip route add table
20
via
10.0
.
0.1
dev eth0
ip rule add fwmark
20
table
20
|
更多推荐
所有评论(0)