1. 工具安裝
yum install iproute
查看工具是否安裝
ip -V
2. ip rule 和 ip route
ip命令中和策略路由相關的OBJECT有 rule 和 route。
查看所有的 rule
ip rule show
優先級 判斷條件 動作 表ID
0: from all lookup local // 任何源地址的包,都查詢,local表 32766: from all lookup main 32767: from all lookup default
local:路由表local包含本機路由及廣播信息。 例如,在本機上執行ssh 127.0.0.1時,就會參考這份路由表的內容, 在正常情況下,只要配置好網卡的網絡設置, 就會自動生成local路由表的內容,我們應該也不必修改其內容。 main:使用傳統命令route -n所看到的路由表就是main的內容。 Linux系統在默認情況下使用這份路由表的內容來傳輸數據包, 因此,其內容極為重要,在正常情況下,只要配置好網卡的網絡設置, 就會自動生成main路由表的內容。 default:最后是default路由表,這個路由表在默認情況下內容為空; 除非有特別的要求,否則保持其內容為空即可。
查看route
ip route show table main // 顯示 表main 的 route
default via 172.17.0.1 dev eth0 // 其他包,發給 172.17.0.1 主機,通過 設備 eth0 169.254.0.0/16 dev eth0 scope link metric 1002 // 目的地址為 169.254.0.0/16 網段的包,使用 eth0 設備發出 172.17.0.0/20 dev eth0 proto kernel scope link src 172.17.0.12 // 目的地址為 172.17.0.0/20 網段的包,通過 eth0 發出。發出的源接口的IP地址是 172.17.0.12
一個包,先查看策略 rule,根據優先級 和 判斷條件 找到 路由表,再按照 路由表的路由規則,獲得下一跳 IP地址和輸出接口,又通過ARP表,獲得目的MAC地址和源MAC地址,發包
3. rule 的添加與刪除
3.1 添加規則
判斷條件 表ID 優先級
ip rule add from 192.168.3.1 table 10 prio 199 // 添加規則,源地址為192.168.3.1的包,使用表10
如果不顯示添加優先級,默認優先級數字從32766 (也就是main table) 依次遞減,即優先級越來越高。
其他添加示例
ip rule add to 168.95.1.1 table 10 // 目的地址是 168.95.1.1 使用 table 10 ip rule add dev eth2 table 1 // dev eth2 輸入的數據,使用 table 1 ip rule add dev eth3 table 3 // dev eth3 輸入的數據,使用 table 3
fwmark 和 iptables
iptables -t mangle -A FORWARD -i eth3 -p tcp --dport 80 -j MARK --set-mark 1 // eth3輸入的HTTP協議數據,標記為 mark 1 iptables -t mangle -A FORWARD -i eth3 -p tcp --dport 25 -j MARK --set-mark 2 // eth3 輸入的SMTP協議數據,標記為 mark 2 iptables -t mangle -A FORWARD -i eth3 -p tcp --dport 110 -j MARK --set-mark 2 // eth3 輸入的POP協議數據,標記為 mark 2 iptables -t mangle -A FORWARD -i eth3 -j MARK --set-mark 3 // eth3 輸入的其他數據,標記為 mark 3 ip rule add fwmark 1 table 1 // fwmark 1 的數據,使用 table 1 ip rule add fwmark 2 table 2 ip rule add fwmark 3 table 3
3.2 刪除規則
ip rule del prio 10 ip rule del from 192.168.1.0/24 ip rule del table 1 ip rule del from 192.168.1.0/24 table 1 prio 10
刪除規則,可以使用 優先級,源地址,目的地址,路由表 等信息作為判斷條件。
4.1 添加表
ip route add 192.168.1.0/24 dev eth1 table 10 // 任意添加一條路由,以創建表 10. 新建的表10里的路由條目為空
4.2 添加路由
ip route add 192.168.2.0/24 via 10.10.15.50 table main // 添加,目的地址為 192.168.2.0/24網段的包,網關為 10.10.15.50。添加到表 main
添加路由前,必須保證表已經存在,否則只是創建表。
4.3 刪除路由
ip route del default table 10 ip route del 192.168.1.0/24 table 10 // 在表10中,刪除目的地址為 192.168.1.0/24 網段的路由