07-策略路由配置
本章節下載: 07-策略路由配置 (388.42 KB)
與單純依照IP報文的目的地址查找路由表進行轉發不同,策略路由是一種依據用戶製定的策略進行路由轉發的機製。策略路由可以對於滿足一定條件(ACL規則等)的報文,執行指定的操作(設置報文的下一跳、出接口、缺省下一跳和缺省出接口等)。
(1) 首先根據配置的策略路由,查找滿足匹配條件的節點。
(2) 若找到了匹配的節點,並且該節點是permit(允許)模式:
a. 根據策略路由中配置的下一跳和出接口指導報文轉發。
b. 若節點未配置下一跳和出接口,或根據下一跳和出接口指導報文轉發失敗,則根據路由表中除缺省路由之外的路由來轉發報文。
c. 若未找到除缺省路由之外的路由,或路由轉發失敗,則根據策略路由中配置的缺省下一跳和缺省出接口指導報文轉發。
d. 若節點未配置缺省下一跳和缺省出接口,或根據缺省下一跳和缺省出接口指導報文轉發失敗,則根據缺省路由來轉發報文。
(3) 若找不到匹配的節點,或找到了匹配的節點,但該節點是deny(拒絕)模式,則根據路由表指導報文轉發。
根據作用對象的不同,策略路由可分為本地策略路由和轉發策略路由:
· 本地策略路由:對設備本身產生的報文(比如本地發出的ping報文)起作用,指導其發送。
策略用來定義報文的匹配規則,以及對報文執行的操作。策略由節點組成。
· 每個節點的具體內容由if-match子句和apply子句來指定。if-match子句定義該節點的匹配規則,apply子句定義該節點的動作。
· 每個節點對報文的處理方式由匹配模式決定。匹配模式分為permit(允許)和deny(拒絕)兩種。
在一個節點中可以配置多條if-match子句,同一類型的if-match子句隻能配置一條。
同一個節點中的不同類型if-match子句之間是“與”的關係,即報文必須滿足該節點的所有if-match子句才算滿足這個節點的匹配規則。同一類型的if-match子句之間是“或”的關係,即報文隻需滿足一條該類型的if-match子句就算滿足此類型if-match子句的匹配規則。
同一個節點中可以配置多條apply子句,但不一定都會執行。多條apply子句之間的關係請參見“1.3.3 配置策略節點的動作”。
一個節點的匹配模式與這個節點的if-match子句、apply子句的關係如表1-1所示。
表1-1 節點的匹配模式、if-match子句、apply子句三者之間的關係
permit(允許模式) |
deny(拒絕模式) |
|
· 如果節點配置了apply子句,則執行此節點apply子句 · 如果節點沒有配置apply子句,則不會執行任何動作,且不再匹配下一節點,報文將根據路由表來進行轉發 |
不執行此節點apply子句,不再匹配下一節點,報文將根據路由表來進行轉發 |
|
不執行此節點apply子句,繼續匹配下一節點 |
不執行此節點apply子句,繼續匹配下一節點 |
如果一個節點中沒有配置任何if-match子句,則認為所有報文都滿足該節點的匹配規則,按照“報文滿足所有if-match子句”的情況進行後續處理。
策略路由通過與Track聯動,增強了應用的靈活性和對網絡環境變化的動態感知能力。
策略路由可以在配置報文的下一跳、出接口、缺省下一跳、缺省出接口時與Track項關聯,根據Track項的狀態來動態地決定策略的可用性。策略路由配置僅在關聯的Track項狀態為Positive或NotReady時生效。關於策略路由與Track聯動的詳細介紹和相關配置,請參見“可靠性配置指導”中的“Track”。
設備收到某些目的為本設備的IP報文後,如果策略路由匹配該報文,會在報文上送CPU處理前先按策略節點動作處理。
在MPLS L3VPN組網或IPv6 MPLS L3VPN組網中,設備上的VLAN接口作為PE的公網側接口時,該接口上配置的策略路由不生效。有關MPLS L3VPN和IPv6 MPLS L3VPN的詳細介紹,請參見“MPLS”中的“MPLS L3VPN”。
應用策略路由時,當策略路由指定的下一跳需要經過隧道,若存在如下任一情況,策略路由無法生效:
· 該隧道的公網路由存在等價路由,並且該等價路由經過共同的物理接口時,對各等價路由上的報文封裝不同內容(例如同一個物理接口上封裝不同VLAN值);
· 該隧道的公網出端口,也在被其他隧道使用,並且兩條隧道的封裝內容不同(例如同一個物理接口上封裝不同VLAN值)。
全局應用轉發策略 |
policy-based-route policy-name [ deny | permit ] node node-number |
||
(可選)設置當前策略節點的描述信息 |
description text |
缺省情況下,未設置當前策略節點的描述信息 |
policy-based-route policy-name [ deny | permit ] node node-number |
||
設置ACL匹配規則 |
缺省情況下,未設置ACL匹配規則 |
|
設置IP報文QoS本地ID值匹配規則 |
if-match qos-local-id local-id-value qppb-manipulation |
缺省情況下,未設置IP報文QoS本地ID值匹配規則 |
設置服務鏈匹配規則 |
if-match service-chain { path-id service-path-id [ path-index service-path-index ] } |
缺省情況下,未設置服務鏈匹配規則 需要注意的是: · 如果在三層以太網接口和三層以太網聚合接口上應用策略路由,策略節點不能同時配置if-match service-chain和apply default-next-hop子句 · 三層以太網子接口和三層以太網聚合子接口不支持服務鏈功能 |
if-match子句中使用ACL時,將忽略ACL規則的permit/deny動作,隻使用ACL中的匹配規則來匹配報文。如果使用的ACL不存在,則不匹配任何報文。
用戶通過配置apply子句指導策略節點的動作。
影響報文轉發路徑的apply子句有四條,優先級從高到低依次為:
(1) apply next-hop
(2) apply output-interface
(3) apply default-next-hop
(4) apply default-output-interface
表1-5 配置策略節點的動作
policy-based-route policy-name [ deny | permit ] node node-number |
||
設置IP報文的IP優先級 |
apply precedence { type | value } |
缺省情況下,未設置IP報文的優先級 |
設置指導報文轉發的下一跳和缺省下一跳的工作模式為負載分擔模式 |
apply loadshare { next-hop | default-next-hop } |
缺省情況下,工作模式為主備模式 下一跳和缺省下一跳的工作模式有兩種:主備模式、負載分擔模式 · 主備模式:按照配置順序,以第一個配置(下一跳或缺省下一跳)作為主用,指導報文轉發。當主用失效時,按配置順序選擇後續的第一個有效配置指導報文轉發 · 負載分擔模式:出接口的負載分擔方式,如果不匹配快速轉發表,則按照配置順序逐包輪流選擇有效的出接口指導報文轉發;如果匹配快速轉發表,則按照配置順序逐流輪流選擇有效的出接口指導報文轉發。 負載分擔模式隻對策略路由配置的多個下一跳或缺省下一跳生效 |
apply next-hop [ vpn-instance vpn-instance-name ] { ip-address [ direct ] [ track track-entry-number ] [ service-chain path-id service-path-id [ path-index service-path-index ] ] }&<1-8 > |
用戶可以同時配置多個下一跳(通過一次或多次配置本命令實現),起到主備的作用 每個節點最多可以配置4個下一跳 三層以太網子接口和三層以太網聚合子接口不支持服務鏈功能 當配置了多個下一跳做主備,主下一跳匹配失敗後,設備會先匹配主下一跳對應的網段路由轉發報文,當網段路由匹配失敗後,再匹配配置的備下一跳 |
|
設置指導報文轉發的出接口 |
缺省情況下,未設置指導報文轉發的出接口 出接口隻能指定為NULL 0接口 |
|
apply default-next-hop [ vpn-instance vpn-instance-name ] { ip-address [ direct ] [ track track-entry-number ] [ service-chain path-id service-path-id [ path-index service-path-index ] ] }&<1-8> |
用戶可以同時配置多個缺省下一跳(通過一次或多次配置本命令實現),起到主備的作用 每個節點最多可以配置4個缺省下一跳 三層以太網子接口和三層以太網聚合子接口不支持服務鏈功能 當配置了多個下一跳做主備,主下一跳匹配失敗後,設備會先匹配主下一跳對應的網段路由轉發報文,當網段路由匹配失敗後,再匹配配置的備下一跳 |
|
設置指導報文轉發的缺省出接口 |
apply default-output-interface null 0 [ track track-entry-number ] |
缺省情況下,未設置指導報文轉發的缺省出接口 缺省出接口隻能指定為NULL 0接口 |
設置報文的服務鏈規則 |
apply service-chain path-id service-path-id [ path-index service-path-index ] |
缺省情況下,未設置報文的服務鏈規則 三層以太網子接口和三層以太網聚合子接口不支持服務鏈功能 |
設置報文鏡像到指定目的地址的隧道 |
apply mirror-to-destination |
缺省情況下,未設置報文鏡像到下一跳 某些組網中,要將報文通過隧道(如GRE隧道)鏡像到指定的網絡設備,以便於對報文進行分析和監控。本功能用來滿足該需求。配置本功能後,策略節點為匹配的報文封裝外層頭,通過隧道將報文轉發給目的網絡設備 策略節點中隻要配置了此動作,所有匹配該策略節點匹配條件的報文都會被鏡像到指定目的地址的隧道 |
設置策略節點統計匹配成功的次數 |
apply statistics |
缺省情況下,未配置策略節點統計匹配成功的次數 開啟本功能後,管理員可以通過display命令查看當前匹配成功的總次數 策略節點中隻要配置了此動作,就一定會執行 |
· 策略路由通過查詢FIB表中是否存在下一跳或缺省下一跳地址對應的條目,判斷設置的報文轉發下一跳或缺省下一跳地址是否可用。策略路由周期性檢查FIB表,設備到下一跳的路徑發生變化時,策略路由無法及時感知,可能會導致通信發生短暫中斷。
· 當同時配置了apply service-chain和apply loadshare { default-next-hop | next-hop }時,apply loadshare命令不生效。
· 當配置apply next-hop或者apply default-next-hop命令指定service-chain參數時,同時配置的apply loadshare { default-next-hop | next-hop }命令不生效。
當VLAN接口的類型為Super VLAN時,在該接口下發的策略路由會對Super VLAN關聯的所有Sub VLAN接口生效。
通過本配置,可以將已經配置的策略應用到本地,指導設備本身產生報文的發送。應用策略時,該策略必須已經存在,否則配置將失敗。
對本地報文隻能應用一個策略。應用新的策略前必須刪除本地原來已經應用的策略。
若無特殊需求,建議用戶不要對本地報文應用策略。否則,有可能會對本地報文的發送造成不必要的影響(如ping、telnet服務的失效)。
通過本配置,可以將已經配置的策略應用到接口,指導接口接收的所有報文的轉發。應用策略時,該策略必須已經存在,否則配置將失敗。
對接口轉發的報文應用策略時,一個接口隻能應用一個策略。應用新的策略前必須刪除接口上原來已經應用的策略。
通過本配置,可以將已經配置的策略應用到設備的所有接口,指導這些接口接收的所有報文的轉發。
一台設備隻能應用一條全局策略,應用新的全局策略前必須通過執行undo ip global policy-based-route命令取消應用的全局策略。
如果同時應用了全局策略和轉發策略,則接口優先使用接口的轉發策略處理報文;如果接口上的報文不匹配轉發策略,則使用全局策略處理報文。
表1-8 全局應用轉發策略
操作 |
命令 |
說明 |
進入係統視圖 |
system-view |
- |
全局應用轉發策略 |
ip global policy-based-route policy-name |
缺省情況下,未對接口轉發的報文應用全局策略 |
在完成上述配置後,在任意視圖下執行display命令可以顯示配置策略路由後的運行情況,通過查看顯示信息驗證配置的效果。
在用戶視圖下執行reset命令可以清除策略路由的統計信息。
表1-9 策略路由顯示和維護
顯示全局策略路由的配置信息和統計信息(獨立運行模式) |
display ip policy-based-route global [ slot slot-number ] |
顯示全局策略路由的配置信息和統計信息(IRF模式) |
display ip policy-based-route global [ chassis chassis-number slot slot-number ] |
display ip policy-based-route local [ chassis chassis-number slot slot-number ] |
|
display ip policy-based-route interface interface-type interface-number [ slot slot-number ] |
|
reset ip policy-based-route statistics [ policy policy-name ] |
通過策略路由控製Switch A產生的報文:
· 指定所有TCP報文的下一跳為1.1.2.2;
其中,Switch A分別與Switch B和Switch C直連(保證Switch B和Switch C之間路由完全不可達)。
# 創建VLAN 10和VLAN 20。
[SwitchA] vlan 10
[SwitchA-vlan10] quit
[SwitchA] vlan 20
[SwitchA-vlan20] quit
# 配置接口Vlan-interface10和Vlan-interface20的IP地址。
[SwitchA] interface vlan-interface 10
[SwitchA-Vlan-interface10] ip address 1.1.2.1 24
[SwitchA-Vlan-interface10] quit
[SwitchA] interface vlan-interface 20
[SwitchA-Vlan-interface20] ip address 1.1.3.1 24
[SwitchA-Vlan-interface20] quit
# 定義訪問控製列表ACL 3101,用來匹配TCP報文。
[SwitchA-acl-adv-3101] rule permit tcp
[SwitchA-acl-adv-3101] quit
# 定義5號節點,指定所有TCP報文的下一跳為1.1.2.2。
[SwitchA] policy-based-route aaa permit node 5
[SwitchA-pbr-aaa-5] if-match acl 3101
[SwitchA-pbr-aaa-5] apply next-hop 1.1.2.2
[SwitchA-pbr-aaa-5] quit
# 在Switch A上應用本地策略路由。
[SwitchA] ip local policy-based-route aaa
# 創建VLAN 10
[SwitchB] vlan 10
[SwitchB-vlan10] quit
# 配置接口Vlan-interface10的IP地址。
[SwitchB] interface vlan-interface 10
[SwitchB-Vlan-interface10] ip address 1.1.2.2 24
#創建VLAN 20
[SwitchC] vlan 20
[SwitchC-vlan20] quit
# 配置接口Vlan-interface20的IP地址。
[SwitchC] interface vlan-interface 20
[SwitchC-Vlan-interface20] ip address 1.1.3.2 24
從Switch A上通過Telnet方式登錄Switch B(1.1.2.2/24),結果成功。
從Switch A上通過Telnet方式登錄Switch C(1.1.3.2/24),結果失敗。
從Switch A上ping Switch C(1.1.3.2/24),結果成功。
由於Telnet使用的是TCP協議,ping使用的是ICMP協議,所以由以上結果可證明:Switch A發出的TCP報文的下一跳為1.1.2.2,接口Vlan-interface20不發送TCP報文,但可以發送非TCP報文,策略路由設置成功。
通過策略路由控製從Switch A的接口Vlan-interface11接收的報文:
· 指定所有TCP報文的下一跳為1.1.2.2;
其中,Switch A分別與Switch B和Switch C直連(保證Switch B和Switch C之間路由完全不可達)。
(1) 配置IP地址和單播路由協議,配置前請確保Switch B和Host A,Switch C和Host A之間路由可達,具體配置過程略。
# 定義訪問控製列表ACL 3101,用來匹配TCP報文。
[SwitchA-acl-adv-3101] rule permit tcp
[SwitchA-acl-adv-3101] quit
# 定義5號節點,指定所有TCP報文的下一跳為1.1.2.2。
[SwitchA] policy-based-route aaa permit node 5
[SwitchA-pbr-aaa-5] if-match acl 3101
[SwitchA-pbr-aaa-5] apply next-hop 1.1.2.2
[SwitchA-pbr-aaa-5] quit
# 在接口Vlan-interface11上應用轉發策略路由,處理此接口接收的報文。
[SwitchA] interface vlan-interface 11
[SwitchA-Vlan-interface11] ip policy-based-route aaa
[SwitchA-Vlan-interface11] quit
從Host A上通過Telnet方式登錄Switch B,結果成功。
從Host A上通過Telnet方式登錄Switch C,結果失敗。
從Host A上ping Switch C,結果成功。
由於Telnet使用的是TCP協議,ping使用的是ICMP協議,所以由以上結果可證明:從Switch A的接口Vlan-interface11接收的TCP報文的下一跳為1.1.2.2,接口Vlan-interface20不轉發TCP報文,但可以轉發非TCP報文,策略路由設置成功。
Switch D分別與Switch A、Switch B、Switch C、Switch E和Switch F直連(保證Switch E到Switch F之間路由不可達)。通過全局策略路由控製從Switch D的所有接口接收的報文:
· 指定所有TCP報文的下一跳為1.1.4.2;
· 其它報文仍然按照查找路由表的方式進行轉發。
(1) 如圖1-3所示,配置各設備接口的IP地址,配置步驟略。
(2) 確保Switch A和Switch E,Switch A和Switch F,Switch B和Switch E,Switch B和Switch F,Switch C和Switch E,Switch C和Switch F之間路由可達。
(3) 配置Switch D
# 定義訪問控製列表ACL 3101,用來匹配從1.1.1.0/24,1.1.2.0/24和1.1.3.0/24網段中的源設備發來的TCP報文。
<SwitchD> system-view
[SwitchD] acl advanced 3101
[SwitchD-acl-ipv4-adv-3101] rule permit tcp source 1.1.1.0 0.0.0.0.255
[SwitchD-acl-ipv4-adv-3101] rule permit tcp source 1.1.2.0 0.0.0.0.255
[SwitchD-acl-ipv4-adv-3101] rule permit tcp source 1.1.3.0 0.0.0.0.255
[SwitchD-acl-ipv4-adv-3101] quit
# 配置策略路由aaa,定義5號節點,指定所有TCP報文的下一跳為1.1.4.2。
[SwitchD] policy-based-route aaa permit node 5
[SwitchD-pbr-aaa-5] if-match acl 3101
[SwitchD-pbr-aaa-5] apply next-hop 1.1.4.2
[SwitchD-pbr-aaa-5] quit
# 在Switch D上應用全局策略路由aaa,處理Router D上所有接口接收的報文。
[SwitchD] ip global policy-based-route aaa
從Switch A上通過Telnet方式登錄Switch E,結果成功,登錄Switch F,結果失敗。
從Switch B上通過Telnet方式登錄Switch E,結果成功,登錄Switch F,結果失敗。
從Switch C上通過Telnet方式登錄Switch E,結果成功,登錄Switch F,結果失敗。
從Switch A上ping Switch F,結果成功。
從Switch B上ping Switch F,結果成功。
從Switch C上ping Switch F,結果成功。
由於Telnet使用的是TCP協議,ping使用的是ICMP協議,所以由以上結果可證明:從Switch D的VLAN接口1、VLAN接口2和VLAN接口3接收的TCP報文的下一跳為1.1.4.2,全局策略路由設置成功。
不同款型規格的資料略有差異, 詳細信息請向具體銷售和400谘詢。H3C保留在沒有任何通知或提示的情況下對資料內容進行修改的權利!