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 |
|
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 |
? |
?
?
?