■ 南京 張韜
編者按:策略路由中定義的不同配置方式會對數據包最終實際的轉發產生完全不一樣的效果,掌握好相關的策略路由技術以及它和傳統查找路由表之間的優先轉發順序,可以大大提高我們工作的靈活性和效率。
策略路由(Policy Route)其實就是一種復雜的靜態路由,既可以基于數據包頭中源IP地址向指定的下一跳路由器轉發數據包,又可以基于協議類型和端口號進行路由選擇,而且只會影響配置了策略路由的路由器。但是策略路由中定義的不同配置方式卻會對數據包最終實際的轉發產生完全不一樣的效果。
1.配置route-map
首 先 使 用“routemap name [permit|deny][sequence-number]”命令創建配置路由映射表(routemap),route-map中 包 含 了規定數據轉發的各種策略。當route-map子句被配置為permit,則表示對符合條件的報文執行策略路由;當子句中遇到匹配的deny節點,則表示對符合條件的報文不執行策略路由,報文信息按照正常的路由表進行轉發,并不是將報文丟棄;如果沒有在route-map中找到匹配規則的報文,也將按照正常的路由選擇操作而被轉發,報文并不會被丟棄。
如果與指定條件不匹配的報文,希望它不要被正常轉發,而是要丟棄,則可以在路由映射表的最后配置一條set語句,將報文發到接口null 0。
2.配置match命令
配 置“match ip address {access-listnumber|name}”命令,使用訪問控制列表來指定報文的匹配條件。
此外,還可以使用“match length min max”命令指定基于報文長度的匹配條件。
3.配置set命令
如果滿足match語句的條件,則可以使用一個或多個set語句來指定對報文的操作。當配置了多個設置下一跳地址或本地出接口的set語句后,只有第一條set語句會被執行,其余set語句將被忽略。
具體而言,當使用“set ip next-hop ip-address[…ip address]”命令時,將檢查路由表,以確定是否可以可以到達下一跳地址,而不會去檢查路由表中是否存在前往報文目標地址的顯示路由。
ip-address […ip address]則提供了一個IP地址列表,用于指定報文前往目的地路徑中相鄰下一跳路由器的地址。如果指定了多個下一跳地址,當出現與第一個下一跳地址相關聯的本地接口狀態為down時,路由器則會按照順序輪流嘗試后續的下一跳地址。
同 樣,當 使 用“set interface interface […interface]”命令時,則提供了一個接口列表,用于指定報文被轉發的本地出接口。如果指定了多個出接口,第一個狀態為up的接口將用于轉發報文,如果接口為down,路由器將嘗試后續的出接口。
當 使 用“set ip default next-hop ip-address […ip address]”命令時,如果指定了多個下一跳地址,當與第一個下一跳地址相關聯的本地接口狀態為down時,路由器也會按照順序輪流嘗試后續的下一跳地址。和set ip nexthop ip-address […ip address]命令相比較而言,雖然只多了一個default關鍵字,但是此時卻表示僅當路由表中沒有到達報文目標地址的顯式路由時,才將報文轉發到指定的默認下一跳地址。

圖1 策略執行案例拓撲圖

圖2 R1配置

圖3 R2配置

圖4 PC1測試到達PC2的連通性
同 理, 使 用“set default interface interface […interface]”命令時,也提供了一個默認接口列表,如果指定了多個出接口,則第一個狀態為up的接口將用于轉發報文;如果接口狀態為down,路由器則會嘗試后續的出接口,并且僅當路由表中沒有前往報文目標地址的顯式路由時,才將報文轉發到命令指定的默認出接口。
4.在接口上調用策略路由
在路由器報文的入接口下使用命令“ip policy routemap”調用配置的策略路由,但是只有配置在路由器的入接口才會對數據包的轉發產生作用。
如圖1所示,R1和R2路由器之間使用默認路由實現PC1和PC2之間互連通信,這里路由器以銳捷RSR20-14E型號為例(圖中的fastethernet口實際為gigabitethernet口,Serial0/2/0口實際為serial2/0口),具體R1上配置如圖2,R2配置如圖3。
現在PC1可以正常訪問PC2,如圖4所示。
當在R1路由器上配置如下策略路由后,則PC1訪問PC2的數據包流量會被R1強制轉發到Server,而不是按照默認路由的方式進行轉發,造成無法ping通PC2,說明定義的策略路由起到了效果,如圖5所示。
R1(config)#routemap abc //配 置route-map
R1(config-routemap)#match ip address 1
R1(config-routemap)#set ip default nexthop 10.1.1.10
R1(config-routemap)#exit
R1(config-if-GigabitEthernet 0/1)#ip policy route-map abc //調用策略路由
如果上面的R1路由器這里不是采用默認路由的配置方式,而是采用靜態路由或者其他動態路由協議的配置方式,此時效果又不一樣,這里把上述配置的默認路由改成靜態路由,策略路由配置不變。
R1(config)#no ip route 0.0.0.0 0.0.0.0 192.168.1.2

圖5 PC1無法訪問PC2

圖6 PC1又可以訪問PC2

圖7 PC1無法訪問路由器R2的直連接口S2/0
R1(config)#ip route 201.1.1.0 255.255.255.0 192.168.1.2
這時候發現PC1又可以訪問PC2,說明路由表中的明細路由(不包括默認路由)優先于策略路由中的set ip default next-hop 下一跳地址,如圖6所示。
由于R2路由器的Serial0/2/0接口和R1路由器是直連的,R1路由器本身通過直連路由信息就可以轉發到192.168.1.0網段中,如果在R1上配置了如下不帶default關鍵字的策略路由信息后,此時可以清楚地看到PC1又無法訪問PC2,甚至連直連網絡R2路由器的Serial0/2/0接口都無法ping通,如圖7所示。因為策略路由 中set ip next-hop下一跳地址的策略路由要優于明細路由,即使是和R1路由器直連,數據包流量也會被R1按照策略路由中定義的規則被強制轉發到Server,而沒有按照路由表中本身的明細路由進行轉發,所以造成網絡不通。
R1(config)#route-map xyz //配置route-map
R1(config-routemap)#match ip address 1
R1(config-routemap)#set ip next-hop 10.1.1.10
R1(config-routemap)#exit
R1(config)#accesslist 1 permit 200.1.1.0 0.0.0.255
R1(config-if-GigabitEthernet 0/1)#ip policy route-map xyz//調用策略路由
但如果此時這里是使用帶有default關鍵字的策略路由信息,則
【】【】
結果又會大相徑庭,PC1仍然可以ping通192.168.1.2,因 為set ip default next-hop優先級低于路由中的明細路由。
策略路由可以可以使報文不按照傳統查找路由表的方式進行數據轉發,而是根據配置的策略將數據包發送到相應路徑上。在策略路由中,數據轉發優先級規則按照如下順序進行選擇 :set ip next-hop( 或interface) >明細路由> set ip default nexthop(或interface) > 默認路由。掌握好相關的策略路由技術以及它和傳統查找路由表之間的優先轉發順序,可以大大提高我們工作的靈活性和效率,起到事半功倍的效果。