策略路由的由來:
最初,路由僅依據目的地址,採用最長匹配原則來決定下一跳。 後來 人們還希望通過其他項來選擇下一跳, 比如源地址, 傳輸協議, 端口等。。因此策略路由應運而生。 根據不同的條件(源地址, 傳輸協議, 端口)選擇路由表, 然後在路由表中根據目的地址選擇下一跳。
策略路由樣貌:
它是由三部分組層,
part1: 優先級,也就是上圖中的0, 32766, 32767, 數字越小優先級越高。 新增路由策略的時候,如果不通過pref指定優先級會在找個除零以外最小的優先級。 如下所示:
[root]# ip rule del from 135.105.115.149 lookup 231
[root]# ip rule
0: from all lookup local
32765: from 135.105.115.149 lookup 231
32766: from all lookup main
32767: from all lookup default
part2: 條件, 比如from all, from 135.105.115.149.
part3: 操作, 比如lookup main 、 lookup 231。
綜上:
32765: from 135.105.115.149 lookup 231 代表的含義是, 源地址是135.105.115.149的IP包,根據231號路由表進行路由。
路由策略工作原理:
會根據優先級依次遍歷,直到決策出下一跳。
例如:一個IP報文源地址是135.105.115.180, 目的地址是155.18.49.20
1)判斷路由策略0, 符合條件from all, 去查找local 路由表(本地路由表,存有本地接口地址,廣播地址,以及NAT地址)。 local表中根據目的地址,最長匹配原則找不到路由。2)進而判斷路由策略路由32765, 該策略源地址是135.105.115.149的, 去查找231號表。 不滿足。 3)進而判斷32766, 該路由策略的條件是from all滿足。去查找路由表main(主路由表,傳統路由表,ip route若沒指定表即操作表254), 其中可以找到下一跳, 進而轉發IP包。 到此結束。
路由表:
只能根據目的路由
系統初始,給創建了4張路由表:
0表 系統保留表
255 local 本地路由表,存有本地接口地址,廣播地址,以及NAT地址。
local表由系統自動維護,管理員不能操作此表。
254 main 主路由表,傳統路由表,ip route若沒指定表即操作表254。
注:平時用route查看的亦是此表設置的路由。
253 default 默認路由表一般存放默認路由。
注:rt_tables文件中表以數字來區分表,保留最多支持255張表。
路由表查看的方法:
ip route list table [table_id/table_name]
例如查看main 路由表:ip route list table 254、 ip route list table main
注:平常我們用的netstat -rn 或者route 查看的都是主路由表(254號表)
route [add|del] [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]增加的路由也是在254號表。
增加/刪除路由策略:
可以參考https://blog.csdn.net/bytxl/article/details/9850803
需要執行ip route flush cache, 讓路由策略立馬生效。
其他學習鏈接:
https://segmentfault.com/a/1190000000638244
最長匹配原則:
pref字段使用:
https://unix.stackexchange.com/questions/424314/changing-default-ip-rule-priority-for-main-table