11-IPv6策略路由配置
本章節下載: 11-IPv6策略路由配置 (324.23 KB)
與單純依照IPv6報文的目的地址查找路由表進行轉發不同,策略路由是一種依據用戶製定的策略進行路由轉發的機製。策略路由可以對於滿足一定條件(ACL規則)的報文,執行指定的操作(設置報文的下一跳、出接口和缺省下一跳等)。
設備上,IPv6報文的基本轉發流程為:
(1) 首先根據配置的IPv6策略路由,查找滿足匹配條件的節點。
(2) 若找到了匹配的節點,並且該節點是permit(允許)模式:
a. 根據策略路由中配置的下一跳和出接口指導報文轉發。
b. 若節點未配置下一跳和出接口,或根據下一跳和出接口指導報文轉發失敗,則根據路由表中除缺省路由之外的路由來轉發報文。
c. 若未找到除缺省路由之外的路由,或路由轉發失敗,則根據策略路由中配置的缺省下一跳指導報文轉發。
d. 若節點未配置缺省下一跳,或根據缺省下一跳指導報文轉發失敗,則根據缺省路由來轉發報文。
(3) 若找不到匹配的節點,或找到了匹配的節點,但該節點是deny(拒絕)模式,則根據路由表指導報文轉發。
根據作用對象的不同,策略路由可分為本地策略路由和轉發策略路由:
· 本地策略路由:對設備本身產生的報文(比如本地發出的ping報文)起作用,指導其發送。
· 轉發策略路由:對接口接收的報文起作用,指導其轉發。
IPv6策略用來定義報文的匹配規則,以及對報文執行的操作。IPv6策略由節點組成。
一個IPv6策略可以包含一個或者多個節點。節點的構成如下:
· 每個節點由節點編號來標識。編號越小的節點優先被執行。
· 每個節點的具體內容由if-match子句和apply子句來指定。if-match子句定義該節點的匹配規則,apply子句定義該節點的動作。
· 每個節點對報文的處理方式由匹配模式決定。匹配模式分為permit(允許)和deny(拒絕)兩種。
應用IPv6策略後,係統將根據IPv6策略中定義的匹配規則和操作,對報文進行處理:係統按照優先級從高到低的順序依次匹配各節點,如果報文滿足這個節點的匹配規則,就執行該節點的動作;如果報文不滿足這個節點的匹配規則,就繼續匹配下一個節點;如果報文不能滿足IPv6策略中任何一個節點的匹配規則,則根據路由表來轉發報文。
在一個節點中可以配置多條if-match子句,同一類型的if-match子句最多隻能有一條,最新的配置生效。
同一個節點中的各if-match子句之間是“與”的關係,即報文必須滿足該節點的所有if-match子句才算滿足這個節點的匹配規則。
同一個節點中可以配置多條apply子句,但不一定都會執行。多條apply子句之間的關係請參見“1.4.3 配置IPv6策略節點的動作”。
一個節點的匹配模式與這個節點的if-match子句、apply子句的關係如表1-1所示。
表1-1 節點的匹配模式、if-match子句、apply子句三者之間的關係
· 如果節點配置了apply子句,則執行此節點apply子句,不再匹配下一節點 ¡ 如果節點指導報文轉發成功,則不再匹配下一節點 ¡ 如果節點指導報文轉發失敗,則繼續匹配下一節點 · 如果節點未配置apply子句,則不會執行任何動作,且不再匹配下一節點,報文將根據路由表來進行轉發 |
||
如果一個節點中未配置任何if-match子句,則認為所有報文都滿足該節點的匹配規則,按照“報文滿足所有if-match子句”的情況進行後續處理。
策略路由通過與Track聯動,增強了應用的靈活性和對網絡環境變化的動態感知能力。
策略路由可以在配置報文的下一跳、缺省下一跳時與Track項關聯,根據Track項的狀態來動態地決定策略的可用性。策略路由配置僅在關聯的Track項狀態為Positive或NotReady時生效。關於策略路由與Track聯動的詳細介紹和相關配置,請參見“可靠性配置指導”中的“Track”。
設備收到某些目的為本設備的IPv6報文後,如果IPv6策略路由匹配該報文,會在報文上送CPU處理前先按IPv6策略節點動作處理。
IPv6策略路由配置任務如下:
(1) 配置IPv6策略
a. 創建IPv6策略節點
(2) 應用IPv6策略
請選擇以下至少一項任務進行配置:
¡ 對接口轉發的報文應用IPv6策略
(1) 進入係統視圖。
system-view
(2) 創建IPv6策略節點,並進入IPv6策略節點視圖。
ipv6 policy-based-route policy-name [ deny | permit ] node node-number
(3) (可選)設置當前IPv6策略節點的描述信息。
description text
缺省情況下,未設置當前IPv6策略節點的描述信息。
(1) 進入係統視圖。
system-view
(2) 進入IPv6策略節點視圖。
ipv6 policy-based-route policy-name [ deny | permit ] node node-number
(3) 設置匹配規則。
¡ 設置ACL匹配規則。
if-match acl [ user-defined ] { ipv6-acl-number | name ipv6-acl-name }
缺省情況下,未設置ACL匹配規則。
IPv6策略路由不支持匹配二層信息的ACL匹配規則。
設置ACL匹配規則時,對於ACL規則的permit/deny動作以及time-range指定的規則生效時間段等的處理機製不再生效。
¡ 設置IP報文QoS本地ID值匹配規則。
if-match qos-local-id local-id-value
缺省情況下,未設置IP報文QoS本地ID值匹配規則。
¡ 設置服務鏈匹配規則。
if-match service-chain path-id service-path-id [ path-index service-patch-index ]
缺省情況下,未設置服務鏈匹配規則。
用戶通過配置apply子句指導IPv6策略節點的動作。
影響報文轉發路徑的apply子句有四條,優先級從高到低依次為:
(1) apply access-vpn vpn-instance
(2) apply next-hop
(3) apply output-interface
(4) apply default-next-hop
apply子句的含義、執行優先情況和詳細說明如表1-2所示。
表1-2 apply子句的含義以及執行優先情況等說明
子句 |
含義 |
執行優先情況/詳細說明 |
apply precedence |
設置IPv6報文的IP優先級 |
隻要配置了該子句,該子句就一定會執行 |
apply loadshare { next-hop | default-next-hop } |
設置指導報文轉發的下一跳和缺省下一跳的工作模式為負載分擔模式 |
下一跳和缺省下一跳的工作模式有兩種:主備模式、負載分擔模式 · 主備模式:按照配置順序,以第一個配置(下一跳或缺省下一跳)作為主用,指導報文轉發。當主用失效時,按配置順序選擇後續的第一個有效配置指導報文轉發 · 負載分擔模式:下一跳的負載分擔方式,如果不匹配快速轉發表,則按照配置順序逐包輪流選擇有效的下一跳指導報文轉發;如果匹配快速轉發表,則按照配置順序逐流輪流選擇有效的下一跳指導報文轉發。 缺省情況下,工作模式在主備模式 負載分擔模式隻對策略路由配置的多個下一跳、缺省下一跳生效 |
apply loadshare-mode { next-hop | default-next-hop } { robin | spray } |
設置多個下一跳或缺省下一跳的負載分擔方式 |
設置報文在多個下一跳或缺省下一跳的負載分擔方式: · robin表示基於數據包隨機選擇負載分擔鏈路進行轉發 · spray表示基於數據包選取當前負載分擔鏈路中負載較輕的成員鏈路進行轉發 |
apply access-vpn vpn-instance |
設置報文在指定VPN實例中進行轉發 |
報文如果匹配了其中一個VPN實例下的轉發表,報文將在該VPN實例中進行轉發 |
apply next-hop和apply output-interface |
設置報文的下一跳、出接口 |
apply next-hop的優先級高於apply output-interface。當兩條子句同時配置並且都有效時,係統隻會執行apply next-hop子句 |
apply service-chain |
設置IPv6報文的服務鏈規則 |
本子句必須在應用可達的VXLAN隧道的下一跳才生效 |
apply default-next-hop |
設置報文的缺省下一跳 |
執行缺省下一跳的前提是:在策略中未配置下一跳,或者配置的下一跳無效,並且在路由表中未找到與報文目的IPv6地址匹配的路由表項 |
apply fail-action-drop next-hop |
設置IPv6策略路由配置的下一跳失效時,設備直接丟棄該報文 |
IPv6策略路由配置的下一跳都失效時隻要配置了本子句,本功能就一定會執行 用戶在IPv6策略路由中指定的下一跳可能因為鏈路中斷、接口shutdown等事件變成失效下一跳。未執行本命令時IPv6策略路由指定的下一跳失效後,設備會繼續查找路由表進行報文轉發。在某些組網環境中,報文需要嚴格按照IPv6策略路由指定的下一跳地址轉發。配置本功能後,IPv6策略路由配置的下一跳失效時,設備就會直接丟棄報文,便於管理員快速發現問題並處理問題 |
IPv6策略路由通過查詢FIB表中是否存在下一跳或缺省下一跳地址對應的條目,判斷設置的報文轉發下一跳或缺省下一跳地址是否可用。IPv6策略路由周期性檢查FIB表,設備到下一跳的路徑發生變化時,IPv6策略路由無法及時感知,可能會導致通信發生短暫中斷。
設備不支持將DHCPv6報文引入到服務鏈中。
在同一IPv6策略節點下:若通過apply next-hop命令配置的下一跳地址為Overlay網絡的IPv6地址,且使用apply service-chain命令設置報文的服務鏈規則時,不支持到達該IPv6地址的等價路由。
指定出接口為Tunnel口時,僅支持指定為IPv6 Tunnel口。
當apply loadshare命令與apply fail-action-drop next-hop命令同時配置,即使工作在負載分擔模式下的多個下一跳或缺省下一跳全部失效,報文也不會丟棄,而是按照路由表轉發。
設置多個下一跳或缺省下一跳的負載分擔方式時,要想使得指定的spray參數配置生效,存在如下限製:
· 不支持配置下一跳或缺省下一跳的接口為聚合口。
· 不支持配置下一跳或缺省下一跳的接口速率為1GE口。
· 在IRF組網下,不支持配置多個下一跳或缺省下一跳在不同的成員設備上。
(1) 進入係統視圖。
system-view
(2) 進入IPv6策略節點視圖。
ipv6 policy-based-route policy-name [ deny | permit ] node node-number
(3) 設置IPv6報文的IP優先級。
apply precedence { type | value }
缺省情況下,未設置IPv6報文的優先級。
(1) 進入係統視圖。
system-view
(2) 進入IPv6策略節點視圖。
ipv6 policy-based-route policy-name [ deny | permit ] node node-number
(3) 配置動作。
¡ 設置報文在指定VPN實例中進行轉發。
apply access-vpn vpn-instance vpn-instance-name
缺省情況下,未設置報文在指定VPN實例中進行轉發。
每個節點最多可以配置6個VPN實例。當滿足匹配規則後,將根據第一個可用的VPN實例轉發表進行轉發。
¡ 設置報文轉發的下一跳。
apply next-hop [ vpn-instance vpn-instance-name | inbound-vpn ] { ipv6-address [ direct ] [ track track-entry-number ] } &<1-16>
缺省情況下,未設置報文轉發的下一跳。
用戶通過一次或多次配置本命令可以同時配置多個下一跳,每個節點最多可以配置16個下一跳,這些下一跳起到主備或負載分擔的作用。
當配置了多個下一跳做主備,且多個下一跳地址屬於同一個網段時,當主下一跳匹配失敗後,設備會先匹配主下一跳對應的網段路由轉發報文,當網段路由匹配失敗後,再匹配配置的備下一跳。
¡ 設置指導報文轉發的多個下一跳工作在負載分擔模式。
apply loadshare next-hop
缺省情況下,多個下一跳工作在主備模式。
¡ 設置多個下一跳的負載分擔方式。
apply loadshare-mode next-hop { robin | spray }
缺省情況下,多個下一跳的負載分擔情況以是否配置apply loadshare命令有關:如果未配置該命令則不進行負載分擔,如果配置了該命令則負載分擔情況以apply loadshare命令的配置為準。
¡ 設置指導報文轉發的出接口。
apply output-interface interface-type interface-number [ track track-entry-number ]
缺省情況下,未設置指導報文轉發的出接口。
用戶通過一次或多次配置本命令可以同時配置多個出接口,每個節點最多可以配置16個出接口,這些出接口起到主備的作用。
¡ 設置指導報文轉發的缺省下一跳。
apply default-next-hop [ vpn-instance vpn-instance-name ] { ipv6-address [ direct ] [ track track-entry-number ] }&<1-2>
缺省情況下,未設置指導報文轉發的缺省下一跳。
用戶通過一次或多次配置本命令可以同時配置多個缺省下一跳,每個節點最多可以配置2個缺省下一跳,這些缺省下一跳起到主備的作用。
¡ 設置指導報文轉發的多個缺省下一跳工作在負載分擔模式。
apply loadshare default-next-hop
缺省情況下,多個缺省下一跳工作在主備模式。
¡ 設置多個缺省下一跳的負載分擔方式。
apply loadshare-mode default-next-hop { robin | spray }
缺省情況下,多個缺省下一跳的負載分擔情況以是否配置apply loadshare命令有關:如果未配置該命令則不進行負載分擔,如果配置了該命令則負載分擔情況以apply loadshare命令的配置為準。
¡ 設置報文的服務鏈規則。
apply service-chain path-id service-path-id [ path-index service-path-index ]
缺省情況下,未設置報文的服務鏈規則。
¡ 設置IPv6策略路由配置的下一跳失效時,設備直接丟棄該報文。
apply fail-action-drop next-hop
缺省情況下,IPv6策略路由配置的下一跳失效時,設備繼續查找路由表進行報文轉發。
IPv6策略路由支持配置多個下一跳地址,當配置的所有下一跳地址都失效後,本功能才生效。這時,需要轉發到任意一個下一跳地址的報文都會被直接丟棄。
本配置對軟件轉發的報文不生效。
通過本配置,可以將已經配置的IPv6策略應用到本地,指導設備本身產生IPv6報文的發送。應用IPv6策略時,該IPv6策略必須已經存在,否則配置將失敗。
對本地報文隻能應用一個IPv6策略。應用新的IPv6策略前必須刪除本地原來已經應用的IPv6策略。
若無特殊需求,建議用戶不要對本地報文應用IPv6策略。否則,有可能會對本地報文的發送造成不必要的影響(如ping、telnet服務的失效)。
(1) 進入係統視圖。
system-view
(2) 對本地報文應用IPv6策略。
ipv6 local policy-based-route policy-name
缺省情況下,未對本地報文應用IPv6策略。
通過本配置,可以將已經配置的IPv6策略應用到接口,指導接口接收的所有IPv6報文的轉發。應用IPv6策略時,該IPv6策略必須已經存在,否則配置將失敗。
對接口轉發的報文應用IPv6策略時,一個接口隻能應用一個IPv6策略。應用新的IPv6策略前必須刪除接口上原來已經應用的IPv6策略。
一個IPv6策略可以同時被多個接口應用。
(1) 進入係統視圖。
system-view
(2) 進入接口視圖。
interface interface-type interface-number
(3) 對接口轉發的報文應用IPv6策略。
ipv6 policy-based-route policy-name
缺省情況下,未對接口轉發的報文應用IPv6策略。
在完成上述配置後,在任意視圖下執行display命令可以顯示IPv6策略路由配置後的運行情況,通過查看顯示信息驗證配置的效果。
在用戶視圖下,用戶可以執行reset命令可以清除IPv6策略路由的統計信息。
表1-3 IPv6策略路由顯示和維護
操作 |
命令 |
顯示已經配置的IPv6策略 |
display ipv6 policy-based-route [ policy policy-name ] |
顯示接口下IPv6轉發策略路由的配置信息和統計信息 |
display ipv6 policy-based-route interface interface-type interface-number [ slot slot-number ] |
顯示IPv6本地策略路由的配置信息和統計信息 |
display ipv6 policy-based-route local [ slot slot-number ] |
顯示已經應用的IPv6策略路由信息 |
display ipv6 policy-based-route setup |
清除IPv6策略路由的統計信息 |
reset ipv6 policy-based-route statistics [ policy policy-name ] |
Switch A分別與Switch B和Switch C直連(保證Switch B和Switch C之間路由完全不可達)。通過策略路由控製Switch A產生的報文:
· 指定所有TCP報文的下一跳為1::2;
· 其它IPv6報文仍然按照查找路由表的方式進行轉發。
圖1-1 基於報文協議類型的本地策略路由的配置舉例組網圖
(1) 配置Switch A
# 創建VLAN 10和VLAN 20。
<SwitchA> system-view
[SwitchA] vlan 10
[SwitchA-vlan10] quit
[SwitchA] vlan 20
[SwitchA-vlan20] quit
# 配置接口Vlan-interface10和Vlan-interface20的IPv6地址。
[SwitchA] interface vlan-interface 10
[SwitchA-Vlan-interface10] ipv6 address 1::1 64
[SwitchA-Vlan-interface10] quit
[SwitchA] interface vlan-interface 20
[SwitchA-Vlan-interface20] ipv6 address 2::1 64
[SwitchA-Vlan-interface20] quit
# 定義訪問控製列表ACL 3001,用來匹配TCP報文。
[SwitchA] acl ipv6 advanced 3001
[SwitchA-acl-ipv6-adv-3001] rule permit tcp
[SwitchA-acl-ipv6-adv-3001] quit
# 定義5號節點,指定所有TCP報文的下一跳為1::2。
[SwitchA] ipv6 policy-based-route aaa permit node 5
[SwitchA-pbr6-aaa-5] if-match acl 3001
[SwitchA-pbr6-aaa-5] apply next-hop 1::2
[SwitchA-pbr6-aaa-5] quit
# 在Switch A上應用本地策略路由。
[SwitchA] ipv6 local policy-based-route aaa
(2) 配置Switch B
# 創建VLAN 10
<SwitchB> system-view
[SwitchB] vlan 10
[SwitchB-vlan10] quit
# 配置接口Vlan-interface10的IP地址。
[SwitchB] interface vlan-interface 10
[SwitchB-Vlan-interface10] ipv6 address 1::2 64
(3) 配置Switch C
#創建VLAN 20
<SwitchC> system-view
[SwitchC] vlan 20
[SwitchC-vlan20] quit
# 配置接口Vlan-interface20的IP地址。
[SwitchC] interface vlan-interface 20
[SwitchC-Vlan-interface20] ipv6 address 2::2 64
從Switch A上通過Telnet方式登錄Switch B(1::2/64),結果成功。
從Switch A上通過Telnet方式登錄Switch C(2::2/64),結果失敗。
從Switch A上ping Switch C(2::2/64),結果成功。
由於Telnet使用的是TCP協議,ping使用的是ICMP6協議,所以由以上結果可證明:Switch A發出的TCP報文的下一跳為1::2,接口Vlan-interface20不發送TCP報文,但可以發送非TCP報文,策略路由設置成功。
Switch A分別與Switch B和Switch C直連(保證Switch B和Switch C之間路由完全不可達)。通過策略路由控製從Switch A的接口Vlan-interface11接收的報文:
· 指定所有TCP報文的下一跳為1::2;
· 其它IPv6報文仍然按照查找路由表的方式進行轉發。
圖1-2 基於報文協議類型的IPv6轉發策略路由配置舉例組網圖
(1) 配置IPv6地址和單播路由協議,確保Switch B和Host A,Switch C和Host A之間路由可達,具體配置過程略。
(2) 配置Switch A
# 定義訪問控製列表ACL 3001,用來匹配TCP報文。
[SwitchA] acl ipv6 advanced 3001
[SwitchA-acl-ipv6-adv-3001] rule permit tcp
[SwitchA-acl-ipv6-adv-3001] quit
# 定義5號節點,指定所有TCP報文的下一跳為1::2。
[SwitchA] ipv6 policy-based-route aaa permit node 5
[SwitchA-pbr6-aaa-5] if-match acl 3001
[SwitchA-pbr6-aaa-5] apply next-hop 1::2
[SwitchA-pbr6-aaa-5] quit
# 在接口Vlan-interface11上應用轉發策略路由,處理此接口接收的報文。
[SwitchA] interface vlan-interface 11
[SwitchA-Vlan-interface11] ipv6 policy-based-route aaa
在Host A上安裝IPv6協議棧,並將IPv6地址配置為10::3。
C:\>ipv6 install
Installing...
Succeeded.
C:\>ipv6 adu 4/10::3
從Host A上通過Telnet方式登錄Router B,結果成功。
從Host A上通過Telnet方式登錄Router C,結果失敗。
從Host A上ping Router C,結果成功。
由於Telnet使用的是TCP協議,ping使用的是ICMP協議,所以由以上結果可證明:從Switch A的接口Vlan-interface11接收的TCP報文的下一跳為1::2,接口Vlan-interface20不轉發TCP報文,但可以轉發非TCP報文,策略路由設置成功。
不同款型規格的資料略有差異, 詳細信息請向具體銷售和400谘詢。H3C保留在沒有任何通知或提示的情況下對資料內容進行修改的權利!