我們學習過靜態路由、RIP、RIPng、OSPFv2、OSPFv3、IS-IS和BGP路由時就經常在一些功能配置命令中見到要調用特定的路由策略來進行路由過濾或路由屬性配置,本章節就要具體創建“路由策略”的創建和策略規則的配置與管理方法。另外,本章節還將介紹用於改變數據報文轉發路由的“策略路由”功能的配置和管理方法。
“路由策略”與“策略路由”之間的一個主要區別就在於它們的主體(或者叫“作用對象”)不同,路由策略的主體是“路由”,是對符合條件路由(主要)銅鼓修改路由屬性來執行響應的策略動作(如允許通過、拒絕通過、接收、引入等),是通過這些路由的數據報文按照規定的策略進行轉發;而策略路由的主體是數據報文對符合條件的數據報文(如報文的源地址、VLAN ID、協議類型、QoS優先級、報文長度和ACL規則等)按照策略規定的動作進行操作(如重新定向報文的出接口和下一跳、設置報文的備份出接口和下一跳等),然後轉發。
路由策略(Routing Policy)是通過使用不同哦匹配條件和匹配模式來進行路由信息的接收或發佈過濾,或改變路由屬性,通過改變路由屬性(包括可達性)來改變網絡流量所經過的路徑。路由策略主要應用在路由信息的發佈、接收、引入和路由屬性修改等幾個方面,具體如下。
1. 控制路由的發佈
可通過路由策略對所要發佈的路由信息進行過濾,隻允許發佈滿足條件的路由信息,可使鄰居設備所連網段用戶訪問不到特定網絡。
2. 控制路由的接收
可通過路由策略對所要接收的路由信息進行過濾,隻允許滿足條件的路由信息。這樣可以控制路由表中路由表項的數量,提高網絡的路由效率,也可以控制本地設備所連網段用戶如能訪問特定的外部網絡。
3. 控制路由的引入
可通過路由策略隻引入滿足條件的路由信息,並控制所引入的路由信息的某些屬性,使其滿足本路由協議的路由屬性要求
4. 設置路由屬性
修改通過路由策略過濾的路由屬性,使符合條件的路由具有特定的路由屬性,滿足某些特定的路由過濾,或者路由屬性配置的需要。
要實現路由策略的應用,首先要定義將要實施路由測了的路由信息的特征,即定義一組匹配規則,這就是路由策略中必須使用的過濾器(將在下節介紹,它們可以單獨使用,也可以組合使用)。可以用路由信息中的不同屬性作為過濾器的匹配依據,如路由的目的地址路由標記、路由開銷、各種BGP路由屬性等。然後將匹配規則應用於路由的發佈、接收和引入等過程的策略中。
1) 路由策略組成
路由策略是一種比較復雜的過濾器,它不僅可以匹配給定路由信息的某些屬性,還可以在條件滿足時改變路由信息的屬性。路由策略由節點號、匹配模式、if-match子句(條件語句)和apply子句(執行語句)4個部分組成。
(1)節點號
一個路由策略可以由一個或多個節點(node)構成。路由與路由策略匹配時遵循以下兩個規則。
l 順序匹配:在匹配過程中,系統按照節點號從小到大的順序依次檢查各個表項,因此在指定節點號時,要註意符合期望的匹配順序。
l 唯一匹配:路由策略各節點之間是“或”的關系,隻要通過一個節點的匹配,就認為通過該過濾器,不再進行其他節點的匹配。
一個路由策略中包含N個節點(node)。當接收或者發送的路由要應用該路由策略時,會按節點序號從小到大依次檢查與各個節點是否匹配,如圖所示。
![](https://news.xinpengboligang.com/upload/keji/fe353a13aaef771329f49d1c0bea4904.jpeg)
l 當路由與某節點的所有if-match子句都匹配成功後,進入匹配模式選擇,不再匹配其他節點。當路由與該節點的任意一個if-match子句匹配失敗後,進入下一個節點。如果該路由與所有節點都匹配失敗,則該路由信息將被拒絕通過。
(1)匹配模式
節點的匹配模式有兩種:permit和deny。
l permit指定節點的匹配模式為允許。當路由通過該節點過濾後,將執行該節點的所有apply子句,但不進入下一個節點;如果路由沒有通過該節點過濾,將進入下一節點繼續匹配。
l deny指定節點的匹配模式為拒絕。不執行該節點下的任何apply子句。當路由滿足該節點的所有if-match子句時,將被拒絕通過該節點,不進入下一個節點繼續匹配;隻要路由不滿足該節點的任意if-match子句,將進入下一個節點繼續匹配。
(2)if-match子句
if-match子句定義匹配規則,匹配對象是路由信息的一些屬性。路由策略的每一個節點可以含有一個或多個if-match子句,也可以不含有if-match子句。同一節點中的不同if-match子句間是邏輯“與”的關系,即隻有滿足節點內所有if-match子句指定的匹配條件,才能通過該節點的匹配測試。如果某個permit節點沒有配置任何if-match子句,則該節點匹配所有的路由。
(3)apply子句
apply子句用來指定動作,也就是對通過節點匹配的路由信息進行屬性設置。Router-Policy的每一個節點都可以含有一個或多個apply子句,也可以不含有apply自己。如果隻需要過濾路由,不需要設置路由的屬性,則不使用apply子句。
1) 路由策略匹配規則
路由策略中的每個節點的過濾結果要綜合以下兩點。
l 路由策略節點的匹配模式(permit或deny)
l if-match子句(如引用的地址前綴列表或者訪問控制列表)中包含的匹配條件(permit或deny)
對於每一個節點,以上兩點的排列組合會出現見表15-1所示的4種情況。
表15-1 Router-Policy的匹配規則
If-match子句中包含的匹配條件 |
節點的匹配模式 |
匹配結果 |
Permit |
Permit |
1. 匹配該節點所有if-match子句的路由在本節點允許通過,匹配結束 2. 不匹配任意if-match子句的路由進行下一個節點的匹配 |
Deny |
1. 匹配該節點所有if-match子句的路由在本節點不允許通過,匹配結束 2. 不匹配任意if-match子句的路由進行下一節點的匹配。 |
|
Deny |
Permit |
1. 匹配該節點所有if-match子句的路由在本節點不允許通過,繼續進行下一個節點的匹配。 2. 不匹配任意if-match子句的路由進行下一個節點的匹配。 |
Deny |
1. 匹配該節點所有if-match子句的路由在本節點不允許通過,繼續進行下一個節點的匹配。 2. 不匹配任意if-match子句的路由進行下一個節點的匹配。 |
【經驗之談】路由策略中,缺省所有未與路由策略任意規則匹配的路由將被拒絕通過,所以如果路由策略中定義了一個以上的節點,應保證各節點中至少有一個節點的匹配模式是permit。如果路由策略所有節點都是deny模式,則沒有任何路由信息能通過該策略。如果某路由信息沒有通過任一節點,則認為該路由信息沒有通過該路由策略,拒絕通過,相當於路由策略的最後都隱含了一條“拒絕所有”的規則。
表15-1中的前兩種比較好理解,也比較常用,但是後兩種相對難理解一點。但可以得出兩條原則,那就是:如果if-match子句中的匹配條件為permit,則節點的最終匹配結果是由節點的匹配模式決定的。如果if-match子句中的匹配條件為deny,無論節點的匹配模式是permit還是deny,節點的最終的匹配結果都是deny。下面以表15-1中的第三種情況為例進行說明。
假設if-match子句中包含的匹配條件是deny,節點對應的匹配條件permit,配置如下。
![](https://news.xinpengboligang.com/upload/keji/080f7a84433812ce4e74b2428c3cb935.jpeg)
#
acl number 2001
rule 5 deny source 172.16.16.0.0 !---拒絕172.16.16.0
#
acl number 2002
rule 5 permit source 172.16.16.0 !---拒絕172.16.16.0
#
route-Policy RP permit node 10 !---在這個節點,172.16.16.0這條路由被拒絕,繼續往下
if-match acl 2001 !---匹配條件為deny,則匹配結果是拒絕通過(不管路由策略匹配模式)
#
route-Policy RP permit node 20 !---在這個節點,172.16.16.0這條路由被允許
if-match acl 2002 !---匹配條件為permit,則路由策略的匹配模式我permit,則匹配結果是允許通過
#
這種情況下,有一個關鍵點就是在node10,在匹配的ACL 2001中,172.16.16.0這條路由被拒絕,同時會繼續往下匹配,到node20這個節點時172.1.16.0又能匹配上,其額在匹配ACL 2002中又被允許了,所以該路由策略對該條路由的最終匹配結果是允許172.16.16.0這條路由通過。