Linux 基於策略的路由(Linux Policy Routing)
Linux 有傳統的基於數據包目的地址的路由算法,和新的基於策略的路由算法
新算法優點:支持多個路由表,支持按數據報屬性(源地址、目的地址、協議、端口、數據包大小、內容等)選擇不同路由表
# 查看規則命令,后面可跟其它參數,默認為 show(list) 顯示全部
ip rule
系統默認有3條記錄
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
各部分解釋
xx: 第一列數字是優先級,小的數字優先級高
lookup [xxx] : 表示搜索xxx路由表,1-252之間的數字或名稱
中間部分內容:如 from all, 這是規則
整行的意思就是,如果一個數據包符合規則(源地址、目的地址、協議、端口、數據包大小、內容等),則使用指定路由表
# 系統最多支持255個路由表。文件 /etc/iproute2/rt_tables
# 可以看到系統保留的表及對應名稱,253:default 254:main 255:local
# 可以自由添加自定義名稱
# 查看路由表命令,參數可用數字或名稱
ip route list table 101
ip route list table main
ip route list cache
# 清除表或內存緩存
ip route flush table 101
ip route flush cache
# 示例
##清空一個路由表
##添加一條路由
##添加這個表的默認路由
##添加規則使用這個表,如果沒有指定優先級,則使用比現在規則最小數字
ip route flush table 100
ip route add 192.168.1.0/24 dev eth0 src 192.168.1.240 table 100
ip route add default dev eth0 table 100
ip rule add from 192.168.1.242 table 100 [pre 12345]
# 示例2 (Linux 多個網卡使用相同網段的IP地址設置)
## Linux 系統帶4個網卡,連接同一交換機,設置同一網段的IP,
## eth0-eth3 IP分別是 192.168.1.240-243
## 默認情況下 route -n 的結果是按 eth up 的順序決定的,
## IP 實際上都全部指向第一塊 UP 的網卡,可以在其它機器上 ping 這4個IP,使用 arp -a 查看到
## 全部 IP 都關連到相同的 MAC 地址
## 這樣的結果就是保留第一條網線,拔掉其它網線,其它機器還是能連通這4個IP
## 意味着4個網卡,設置了4個相同網段的IP,但是數據流全部通過第一個網卡傳輸
## 執行以下命令
ip route flush table 100
ip route flush table 101
ip route flush table 102
ip route flush table 103
ip route add default dev eth0 table 100
ip route add default dev eth1 table 101
ip route add default dev eth2 table 102
ip route add default dev eth3 table 103
ip rule add from 192.168.1.240 table 100
ip rule add from 192.168.1.241 table 101
ip rule add from 192.168.1.242 table 102
ip rule add from 192.168.1.243 table 103
ip route flush cache
## 在其它機器上 ping 這4個IP ,使用 arp -a 查看到
## IP 關連的 MAC 已經不相同了。
## 拔掉任意一條網線,其它機器就會連不上對應的 IP
## 這就表示不同 IP 使用各自的網卡傳輸數據了。