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
|