對于網絡工程師來說,路由策略的部署隨處可見,無論在運營商IP網絡還是在企業網中,路由策略的應用都是非常普遍的。同時,在網絡規劃中,路由策略的規劃也是一個核心的內容。今天,我們來認識一下路由策略的廬山真面目。
什么是路由策略?
路由策略是通過一系列工具或方法對路由進行各種控制的“策略”。這種策略能夠影響到路由產生、發布、選擇等,進而影響報文的轉發路徑。這些工具包括ACL、route-policy、ip-prefix、filter-policy等,這些方法包括對路由進行過濾,設置路由的屬性等。
很多人會把路由策略等同于route-policy,也有人會可能會說filter-policy也屬于路由策略的范疇,其實這些理解都有點不太準確。實際上,路由策略不是一個特定的技術,也不是一個特定的特性。
路由策略各工具之間的調用關系
如上圖所示,我們把所有的工具劃分成三類:
- 條件工具:用于把需要的路由“抓取”出來。
- 策略工具:用于把“抓取”出來的路由執行某個動作,比如允許、拒絕、修改屬性值等。
- 調用工具:用于將路由策略應用到某個具體的路由協議里面,使其生效。
調用工具中的filter-policy和peer又自帶策略工具的功能,因此這兩個東西又可以直接調用條件工具。其他的調用工具都必須通過route-policy來間接的調用條件工具。
注意peer不能調用ACL,可以調用其他的所有條件工具。
路由策略有什么用?
在IP網絡中,路由策略的用途主要包括兩個方面:
- 對路由信息進行過濾。
- 修改路由的屬性
通過路由策略對路由信息進行過濾
圖1 通過路由策略對路由信息進行過濾
如圖1所示,SwitchA屬于雙上行的組網結構,SwitchA會從SwitchB和SwitchC那里分別接收到路由。如果SwitchA僅希望接收來自SwitchB的路由,而不希望接收來自SwitchC的路由,此時應該怎么辦呢?這種情況下就可以考慮在SwitchA上配置路由策略,允許來自SwitchB的路由,拒絕來自SwitchC的路由。
通過路由策略修改路由的屬性
圖2 通過路由策略修改路由的屬性
如圖2所示,SwitchA也是雙上行的網絡結構,但是,由于SwitchB這邊的鏈路穩定性更好一點,帶寬更大一點,因此用戶想用SwitchB這邊的鏈路作為主用鏈路,SwitchC這邊的鏈路作為備用鏈路,當主用鏈路故障的時候流量自動切換至備用鏈路。這種場景下,可以使用路由策略,將來自SwitchB這邊的路由開銷值調小,將來自SwitchC這邊的路由開銷值調大,這樣流量就會自動選取SwitchB這邊的鏈路作為主用鏈路,SwitchC這邊的鏈路作為備用鏈路,實現路由的主備份。
路由策略和策略路由的區別
路由策略
路由策略的操作對象是路由信息。路由策略主要實現了路由過濾和路由屬性設置等功能,它通過改變路由屬性(包括可達性)來改變網絡流量所經過的路徑。
策略路由
策略路由的操作對象是數據包,在路由表已經產生的情況下,不按照路由表進行轉發,而是根據需要,依照某種策略改變數據包轉發路徑。
所以這樣可以看出,策略路由是在路由表之前起作用,如果報文匹配了策略路由,那么這個報文就不會再去查路由表了,而是直接按照策略路由的“指引”進行轉發。所以策略路由是一個不太按照套路出牌的“家伙”,也正因為這樣,策略路由的應用會更加靈活一點。
路由策略和策略路由對比分析
為了更加具體的對比路由策略和策略路由,我們通過下表對兩者進行一個全方位的對比。
路由策略牛刀小試
如上圖所示,運行OSPF協議的網絡中,SwitchA從Internet網絡接收路由,并為OSPF網絡提供了Internet路由, 現在用戶希望OSPF網絡僅接收172.16.16.0/24、172.16.17.0/24和172.16.18.0/24這三條外部路由,其他的外部路由都不接收。
上述用戶需求可以通過多種方式去實現,接下來我們給出兩個比較常見的實現方式供各位參考。
下面的實驗中我們通過在SwitchA中配置黑洞路由做為測試路由,在OSPF中引入靜態路由來模擬從Internet網絡接收路由。SwitchA上的關鍵配置如下:
# ospf 1 import-route static area 0.0.0.0 network 192.168.1.0 0.0.0.255 # ip route-static 172.16.16.0 255.255.255.0 NULL0 ip route-static 172.16.17.0 255.255.255.0 NULL0 ip route-static 172.16.18.0 255.255.255.0 NULL0 ip route-static 172.16.19.0 255.255.255.0 NULL0 ip route-static 172.16.20.0 255.255.255.0 NULL0 #
通過ACL+route-policy實現路由過濾
1、定義一個ACL 2000,用于匹配需要放行的路由。
[SwitchA] acl 2000 [SwitchA-acl-basic-2000] rule 5 permit source 172.16.16.0 0 [SwitchA-acl-basic-2000] rule 10 permit source 172.16.17.0 0 [SwitchA-acl-basic-2000] rule 15 permit source 172.16.18.0 0 [SwitchA-acl-basic-2000] quit
2、創建一個route-policy,名字叫RP,同時配置一個編號為10的節點,調用ACL2000。
[SwitchA] route-policy RP permit node 10 [SwitchA -route-policy] if-match acl 2000
3、在OSPF引入靜態路由的時候調用這個route-policy
[SwitchA] ospf 1 [SwitchA-ospf-1] import-route static route-policy RP [SwitchA-ospf-1] quit
由于route-policy默認隱含deny節點,因此172.16.19.0及172.16.20.0路由由于沒有滿足if-match語句,從而不被引入到OSPF中。
配置完上述路由策略以后SwitchB的路由表如下:
[SwitchB]display ip routing-table Route Flags: R - relay, D - download to fib ----------------------------------------------------------------------------- Routing Tables: Public Destinations : 7 Routes : 7 Destination/Mask Proto Pre Cost Flags NextHop Interface 127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0 127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0 172.16.16.0/24 O_ASE 150 1 D 192.168.1.1 Vlanif10 172.16.17.0/24 O_ASE 150 1 D 192.168.1.1 Vlanif10 172.16.18.0/24 O_ASE 150 1 D 192.168.1.1 Vlanif10 192.168.1.0/24 Direct 0 0 D 192.168.1.2 Vlanif10 192.168.1.2/32 Direct 0 0 D 127.0.0.1 Vlanif10
可以看到在SwitchA上配置完路由策略以后,SwitchB的IP路由表里面只有172.16.16.0/24、172.16.17.0/24和172.16.18.0/24這三條外部路由,其他的外部路由都沒有了。
通過ip-prefix+filter-policy實現路由過濾
1、定義一個地址前綴列表,用于匹配需要放行的路由。
[SwitchA] ip ip-prefix huawei index 10 permit 172.16.16.0 24 [SwitchA] ip ip-prefix huawei index 20 permit 172.16.17.0 24 [SwitchA] ip ip-prefix huawei index 30 permit 172.16.18.0 24
2、在SwitchA的OSPF視圖中,通過filter-policy對發布的路由進行過濾。
[SwitchA] ospf 1 [SwitchA -ospf-1] filter-policy ip-prefix huawei export [SwitchA-ospf-1] quit
由于ip-prefix默認隱含deny節點,因此172.16.19.0及172.16.20.0路由由于不在ip-prefix允許的范圍內,所以在SwitchA向SwitchB發布路由的時候,僅發布在ip-prefix允許的范圍內的路由,其他的所有路由都不發布。
配置完上述配置以后SwitchB的路由表如下:
[SwitchB] display ip routing-table Route Flags: R - relay, D - download to fib ----------------------------------------------------------------------------- Routing Tables: Public Destinations : 7 Routes : 7 Destination/Mask Proto Pre Cost Flags NextHop Interface 127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0 127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0 172.16.16.0/24 O_ASE 150 1 D 192.168.1.1 Vlanif10 172.16.17.0/24 O_ASE 150 1 D 192.168.1.1 Vlanif10 172.16.18.0/24 O_ASE 150 1 D 192.168.1.1 Vlanif10 192.168.1.0/24 Direct 0 0 D 192.168.1.2 Vlanif10 192.168.1.2/32 Direct 0 0 D 127.0.0.1 Vlanif10
可以看到在SwitchA上配置完路由filter-policy以后,SwitchB的IP路由表里面只有172.16.16.0/24、172.16.17.0/24和172.16.18.0/24這三條外部路由,其他的外部路由都沒有了。