策略路由簡介
定義
策略路由PBR(Policy-Based Routing)是一種依據用戶制定的策略進行路由選擇的機制。
- 策略路由與路由策略(Routing Policy)存在以下不同:
- 策略路由的操作對象是數據包,在路由表已經產生的情況下,不按照路由表進行轉發,而是根據需要,依照某種策略改變數據包轉發路徑。
- 路由策略的操作對象是路由信息。路由策略主要實現了路由過濾和路由屬性設置等功能,它通過改變路由屬性(包括可達性)來改變網絡流量所經過的路徑。
目的
傳統的路由轉發原理是首先根據報文的目的地址查找路由表,然后進行報文轉發。但是目前越來越多的用戶希望能夠在傳統路由轉發的基礎上根據自己定義的策略進行報文轉發和選路。
受益
策略路由具有如下優點:
- 可以根據用戶實際需求制定策略進行路由選擇,增強路由選擇的靈活性和可控性。
- 可以使不同的數據流通過不同的鏈路進行發送,提高鏈路的利用效率。
- 在滿足業務服務質量的前提下,選擇費用較低的鏈路傳輸業務數據,從而降低企業數據服務的成本。
路由策略
路由策略是為了改變網絡流量所經過的途徑而對路由信息采用的方法。
定義
路由策略是通過一系列工具或方法對路由進行各種控制的“策略”。該策略能夠影響到路由產生、發布、選擇等,進而影響報文的轉發路徑。工具包括ACL、route-policy、ip-prefix、filter-policy等,方法包括對路由進行過濾,設置路由的屬性等。
目的
在IP網絡中,路由策略的用途主要包括兩個方面:對路由信息進行過濾和修改路由的屬性,如表1所示。
作用 | 執行過程 | 結果 |
---|---|---|
對路由信息進行過濾 | 如果某條路由符合某種條件,那么就接收這條路由。 如果某條路由符合某種條件,那么就發布這條路由。 如果某條路由符合某種條件,那么就引入這條路由。 |
要不要這條路由? |
修改路由的屬性 | 如果某條路由符合某種條件,那么將這條路由的某個屬性值修改為一個特定值。 | 將這條路由的某個屬性值修改為一個特定值。 |
通過路由策略對路由信息進行過濾
圖1 通過路由策略對路由信息進行過濾
如圖1所示,SwitchA屬於雙上行的組網結構,SwitchA會從SwitchB和SwitchC那里分別接收到路由。如果SwitchA僅希望接收來自SwitchB的路由,而不希望接收來自SwitchC的路由。這種情況下就可以考慮在SwitchA上配置路由策略,允許來自SwitchB的路由,拒絕來自SwitchC的路由。
通過路由策略修改路由的屬性
圖2 通過路由策略修改路由的屬性
如圖2所示,SwitchA也是雙上行的網絡結構,但是,由於SwitchB這邊的鏈路穩定性更好一點,帶寬更大一點,因此用戶想用SwitchB這邊的鏈路作為主用鏈路,SwitchC這邊的鏈路作為備用鏈路,當主用鏈路故障的時候流量自動切換至備用鏈路。這種場景下,可以使用路由策略,將來自SwitchB這邊的路由開銷值調小,將來自SwitchC這邊的路由開銷值調大,這樣流量就會自動選取SwitchB這邊的鏈路作為主用鏈路,SwitchC這邊的鏈路作為備用鏈路,實現路由的主備份。
受益
路由策略具有以下價值:
- 控制路由的接收、發布和引入,提高網絡安全性。
- 修改路由屬性,對網絡數據流量進行合理規划,提高網絡性能。
一個策略路由示例,當一個容器配置兩張網卡,分別配置兩個段的地址,把數據分層。
nsenter -t 3860280 -n -F -- ip route add default via 10.243.39.126 dev eth1 table 16
nsenter -t 3860280 -n -F -- ip rule add from 10.243.39.98/27 lookup 16
一般我們操作的路由表示0號路由表,上面的例子是容器中eth1的數據包都走16號路由表,默認網關是10.243.39.126,eth0走0號路由表默認到自己的網關。這樣達到數據分層的目的。可以通過如下命令查看所有的路由表及0號路由表:
ip rule list
ip route list table 0