18-策略路由配置
本章節下載: 18-策略路由配置 (280.29 KB)
與單純依照IP報文的目的地址查找路由表進行轉發不同,策略路由是一種依據用戶製定的策略進行路由轉發的機製。策略路由可以基於報文的源地址、長度等信息靈活地控製報文的發送:對於滿足一定條件(報文長度、ACL規則等)的報文,將執行指定的操作(設置報文的出接口和下一跳、設置報文的缺省出接口和下一跳等)。
報文到達後,係統首先根據策略路由轉發,若沒有配置策略路由或配置了策略路由但找不到匹配的表項時,再根據路由表來轉發報文。
根據作用對象的不同,策略路由可分為本地策略路由和轉發策略路由:
· 本地策略路由:對設備本身產生的報文(比如本地發出的ping報文)起作用,指導其發送。
· 轉發策略路由:對接口接收的報文起作用,指導其轉發。
策略用來定義報文的匹配規則,以及對報文執行的操作。策略由節點組成。
一個策略可以包含一個或者多個節點。節點的構成如下:
· 每個節點由節點編號來標識。節點編號越小節點的優先級越高,優先級高的節點優先被執行。
· 每個節點的具體內容由if-match子句和apply子句來指定。if-match子句定義該節點的匹配規則,apply子句定義該節點的動作。
· 每個節點對報文的處理方式由匹配模式決定。匹配模式分為permit(允許)和deny(拒絕)兩種。
應用策略後,係統將根據策略中定義的匹配規則和操作,對報文進行處理:係統按照優先級從高到低的順序依次匹配各節點,如果報文滿足這個節點的匹配規則,就執行該節點的動作;如果報文不滿足這個節點的匹配規則,就繼續匹配下一個節點;如果報文不能滿足策略中任何一個節點的匹配規則,則根據路由表來轉發報文。
策略路由提供了兩種if-match子句,作用如下:
· if-match acl:設置ACL匹配規則。
· if-match packet-length:設置IP報文長度匹配規則。
在一個節點中可以配置多條if-match子句,同一類型的if-match子句最多隻能有一條。
同一個節點中的各if-match子句之間是“與”的關係,即報文必須滿足該節點的所有if-match子句才算滿足這個節點的匹配規則。
策略路由提供了七種apply子句,同一個節點中可以配置多條apply子句,但配置的多條apply子句不一定都會執行。apply子句的含義以及執行優先情況等說明如表1-1所示。
表1-1 apply子句的含義以及執行優先情況等說明
子句 |
含義 |
執行優先情況/詳細說明 |
apply ip-df zero |
將IP報文頭中的DF(Don’t Fragment,不分片)標誌置為0,表示允許對該報文進行分片 |
隻要配置了該子句,該子句就一定會執行 |
apply ip-precedence |
設置IP報文優先級 |
隻要配置了該子句,該子句就一定會執行 |
apply output-interface和apply ip-address next-hop |
設置報文的出接口、下一跳 |
apply output-interface的優先級高於apply ip-address next-hop。當兩條子句同時配置並且都有效時,係統隻會執行apply output-interface子句 |
apply output-interface ip-address next-hop dhcpc |
設置報文的出接口和下一跳,下一跳為通過DHCP方式學到的網關地址 |
在點對點的情況下,報文的下一跳即是對端地址,此時可以采用apply output-interface僅指定報文的出接口 在非點對點的情況下,如果指定出接口,還需要知道下一跳。如果指定的出接口是通過DHCP方式獲取地址的,由於下一跳未知,此時就可以通過命令apply output-interface ip-address next-hop dhcpc,在指定出接口的同時,將報文的下一跳指定為通過DHCP方式學到的網關地址 |
apply default output-interface和apply ip-address default next-hop |
設置報文的缺省出接口、缺省下一跳 |
apply default output-interface的優先級高於apply ip-address default next-hop。當兩條子句同時配置並且都有效時,係統隻會執行apply default output-interface子句 執行缺省出接口和下一跳的前提是:在策略中沒有配置出接口或者下一跳,或者配置的出接口和下一跳無效,並且在路由表中沒有找到與報文目的IP地址匹配的路由表項 |
一個節點的匹配模式與這個節點的if-match子句、apply子句的關係如表1-2所示。
表1-2 節點的匹配模式、if-match子句、apply子句三者之間的關係
· 如果一個節點中沒有配置任何if-match子句,則認為所有報文都滿足該節點的匹配規則。
· 如果一個permit模式的節點沒有配置apply子句,當報文滿足此節點的所有if-match子句時,將不會執行任何動作,且不再繼續匹配下一節點,報文將根據路由表來進行轉發。
· 如果一個節點沒有配置任何if-match子句和apply子句,則所有報文都滿足該節點的匹配規則,但不會執行任何動作,且不再繼續匹配下一節點,報文將根據路由表來進行轉發。
策略路由通過與Track聯動,增強了應用的靈活性和對網絡環境變化的動態感知能力。策略路由可以在配置報文的出接口、缺省出接口、下一跳、缺省下一跳時與Track項關聯,根據Track項的狀態來動態地決定策略的可用性。策略路由配置僅在關聯的Track項狀態為Positive或Invalid時生效。
關於策略路由與Track聯動的的詳細介紹和相關配置,請參見“可靠性配置指導”中的“Track”。
表1-3 策略路由配置任務簡介
配置任務 |
說明 |
詳細配置 |
|
配置策略 |
創建策略節點 |
必選 |
|
配置策略節點的匹配規則 |
|||
配置策略節點的動作 |
|||
應用策略 |
對本地報文應用策略 |
必選 用戶可根據實際情況進行選擇 |
|
對接口轉發的報文應用策略 |
表1-4 創建策略節點
操作 |
命令 |
說明 |
進入係統視圖 |
system-view |
- |
創建策略節點,並進入策略節點視圖 |
policy-based-route policy-name [ deny | permit ] node node-number |
必選 |
表1-5 配置策略節點的匹配規則
操作 |
命令 |
說明 |
進入係統視圖 |
system-view |
- |
進入策略節點視圖 |
policy-based-route policy-name [ deny | permit ] node node-number |
- |
設置ACL匹配規則 |
if-match acl acl-number |
可選 |
設置IP報文長度匹配規則 |
if-match packet-length min-len max-len |
可選 |
if-match子句中使用ACL時,如果ACL規則的動作為permit,則該子句可以用來匹配報文;如果使用的ACL不存在或者ACL規則的動作為deny,則所有報文都不能滿足該子句。
表1-6 配置策略節點的動作
操作 |
命令 |
說明 |
進入係統視圖 |
system-view |
- |
進入策略節點視圖 |
policy-based-route policy-name [ deny | permit ] node node-number |
- |
將IP報文頭中的DF標誌置為0,表示允許對該報文進行分片 |
apply ip-df zero |
可選 |
設置報文的優先級 |
apply ip-precedence value |
可選 |
設置報文的出接口 |
apply output-interface interface-type interface-number [ track track-entry-number ] [ interface-type interface-number [ track track-entry-number ] ] |
可選 用戶可以同時配置兩個出接口,這兩個出接口同時有效,可以起到負載分擔的作用 |
設置報文的出接口和下一跳,下一跳為通過DHCP方式學到的網關地址 |
apply output-interface interface-type interface-number ip-address next-hop dhcpc |
可選 |
設置報文的下一跳 |
apply ip-address next-hop ip-address [ direct ] [ track track-entry-number ] [ ip-address [ direct ] [ track track-entry-number ] ] |
可選 用戶可以同時配置兩個下一跳,這兩個下一跳同時有效,可以起到負載分擔的作用 |
設置報文缺省出接口 |
apply default output-interface interface-type interface-number [ track track-entry-number ] [ interface-type interface-number [ track track-entry-number ] ] |
可選 用戶可以同時配置兩個缺省出接口,這兩個出接口同時有效,可以起到負載分擔的作用 |
設置報文缺省下一跳 |
apply ip-address default next-hop ip-address [ track track-entry-number ] [ ip-address [ track track-entry-number ] ] |
可選 用戶可以同時配置兩個缺省下一跳,這兩個下一跳同時有效,可以起到負載分擔的作用 |
通過本配置,可以將已經配置的策略應用到本地,指導設備本身產生報文的發送。
對本地報文隻能應用一個策略。多次配置命令,生效的是最新的配置。
若無特殊需求,建議用戶不要對本地報文應用策略。
表1-7 對本地報文應用策略
操作 |
命令 |
說明 |
進入係統視圖 |
system-view |
- |
對本地報文應用策略 |
ip local policy-based-route policy-name |
必選 缺省情況下,對本地報文沒有應用策略 |
如果配置時策略不存在,命令可以配置成功但不生效,當策略創建後,該配置才真正生效。
通過本配置,可以將已經配置的策略應用到接口,指導接口接收的所有報文的轉發。
對接口轉發的報文應用策略時,一個接口隻能應用一個策略。多次配置命令,生效的是最新的配置。
一個策略可以同時被多個接口應用。
表1-8 對接口轉發的報文應用策略
操作 |
命令 |
說明 |
進入係統視圖 |
system-view |
- |
進入接口視圖 |
interface interface-type interface-number |
- |
對接口轉發的報文應用策略 |
ip policy-based-route policy-name |
必選 缺省情況下,對接口轉發的報文沒有應用策略 |
如果配置時策略不存在,命令可以配置成功但不生效,當策略創建後,該配置才真正生效。
在完成上述配置後,在任意視圖下執行display命令可以顯示配置策略路由後的運行情況,通過查看顯示信息驗證配置的效果。
在用戶視圖下,用戶可以執行reset命令清除策略路由的統計信息。
表1-9 策略路由顯示和維護
操作 |
命令 |
顯示已經配置的策略 |
display policy-based-route [ policy-name ] [ | { begin | exclude | include } regular-expression ] |
顯示本地策略路由和轉發策略路由的應用情況 |
display ip policy-based-route [ | { begin | exclude | include } regular-expression ] |
顯示已經應用的策略路由的設置情況 |
display ip policy-based-route setup { interface interface-type interface-number | local | policy-name } [ | { begin | exclude | include } regular-expression ] |
顯示策略路由的統計信息 |
display ip policy-based-route statistics { interface interface-type interface-number | local } [ | { begin | exclude | include } regular-expression ] |
清除策略路由的統計信息 |
reset policy-based-route statistics [ policy-name ] |
通過策略路由控製AC產生的報文:
· 所有TCP報文的下一跳為1.1.2.2;
· 其它報文仍然按照查找路由表的方式進行轉發。
其中,AC分別與Switch A和Switch B直連。
圖1-1 基於報文協議類型的本地策略路由的配置舉例組網圖
(1) 配置AC
# 創建VLAN 10及其對應的VLAN接口,並為該接口配置IP地址1.1.2.1/24。
[AC] vlan 10
[AC-vlan10] quit
[AC] interface vlan-interface 10
[AC-Vlan-interface10] ip address 1.1.2.1 24
[AC-Vlan-interface10] quit
# 創建VLAN 20及其對應的VLAN接口,並為該接口配置IP地址1.1.3.1/24。
[AC] vlan 20
[AC-vlan20] quit
[AC] interface vlan-interface 20
[AC-Vlan-interface20] ip address 1.1.3.1 24
[AC-Vlan-interface20] quit
# 定義訪問控製列表ACL 3101,用來匹配TCP報文。
[AC-acl-adv-3101] rule permit tcp
[AC-acl-adv-3101] quit
# 定義5號節點,指定所有TCP報文的下一跳為1.1.2.2。
[AC] policy-based-route aaa permit node 5
[AC-pbr-aaa-5] if-match acl 3101
[AC-pbr-aaa-5] apply ip-address next-hop 1.1.2.2
[AC-pbr-aaa-5] quit
# 在AC上應用本地策略路由。
[AC] ip local policy-based-route aaa
(2) 配置Switch A
# 創建VLAN 10及其對應的VLAN接口,並為該接口配置IP地址1.1.2.2/24。
[SwitchA] vlan 10
[SwitchA-vlan10] quit
[SwitchA] interface vlan-interface 10
[SwitchA-Vlan-interface10] ip address 1.1.2.2 24
[SwitchA-Vlan-interface10] quit
(3) 配置Switch B
# 創建VLAN 20及其對應的VLAN接口,並為該接口配置IP地址1.1.3.2/24。
<SwitchB> system-view
[SwitchB] vlan 20
[SwitchB-vlan20] quit
[SwitchB] interface vlan-interface 20
[SwitchB-Vlan-interface20] ip address 1.1.3.2 24
[SwitchB-Vlan-interface20] quit
從AC上通過Telnet方式登錄Switch A(1.1.2.2/24),結果成功。
從AC上通過Telnet方式登錄Switch B(1.1.3.2/24),結果失敗。
從AC上ping Switch B(1.1.3.2/24),結果成功。
由於Telnet使用的是TCP協議,ping使用的是ICMP協議,所以由以上結果可證明:AC產生的TCP報文的下一跳為1.1.2.2,VLAN接口Vlan-int20不發送TCP報文,但可以發送非TCP報文,策略路由設置成功。
通過策略路由控製從AC的接口Vlan-interface10接收的報文:
· 所有TCP報文的下一跳為1.1.2.2;
· 其它報文仍然按照查找路由表的方式進行轉發。
(1) 配置AC
# 創建VLAN 10及其對應的VLAN接口,並為該接口配置IP地址10.110.0.10/24。
<AC> system-view
[AC] vlan 10
[AC-vlan10] quit
[AC] interface vlan-interface 10
[AC-Vlan-interface10] ip address 10.110.0.10 24
[AC-Vlan-interface10] quit
# 創建VLAN 20及其對應的VLAN接口,並為該接口配置IP地址1.1.2.1/24。
<AC> system-view
[AC] vlan 20
[AC-vlan20] quit
[AC] interface vlan-interface 20
[AC-Vlan-interface20] ip address 1.1.2.1 24
[AC-Vlan-interface20] quit
# 創建VLAN 30及其對應的VLAN接口,並為該接口配置IP地址1.1.3.1/24。
<AC> system-view
[AC] vlan 30
[AC-vlan30] quit
[AC] interface vlan-interface 30
[AC-Vlan-interface30] ip address 1.1.3.1 24
[AC-Vlan-interface30] quit
# 定義訪問控製列表ACL 3101,用來匹配TCP報文。
[AC-acl-adv-3101] rule permit tcp
[AC-acl-adv-3101] quit
# 定義5號節點,指定所有TCP報文的下一跳為1.1.2.2。
[AC] policy-based-route aaa permit node 5
[AC-pbr-aaa-5] if-match acl 3101
[AC-pbr-aaa-5] apply ip-address next-hop 1.1.2.2
[AC-pbr-aaa-5] quit
# 在接口Vlan-interface10上應用轉發策略路由,處理此接口接收的報文。
[AC] interface vlan-interface10
[AC-Vlan-interface10] ip policy-based-route aaa
[AC-Vlan-interface10] quit
(2) 配置Switch A
# 創建VLAN 20及其對應的VLAN接口,並為該接口配置IP地址1.1.2.2/24。
<SwitchA> system-view
[SwitchA] vlan 20
[SwitchA-vlan20] quit
[SwitchA] interface vlan-interface 20
[SwitchA-Vlan-interface20] ip address 1.1.2.2 24
[SwitchA-Vlan-interface20] quit
# 配置到網段10.110.0.0/24的靜態路由。
[SwitchA] ip route-static 10.110.0.0 24 1.1.2.1
(3) 配置Switch B
# 創建VLAN30及其對應的VLAN接口,並為該接口配置IP地址1.1.3.2/24。
<SwitchB> system-view
[SwitchB] vlan 30
[SwitchB-vlan30] quit
[SwitchB] interface vlan-interface 30
[SwitchB-Vlan-interface30] ip address 1.1.3.2 24
[SwitchB-Vlan-interface30] quit
# 配置到網段10.110.0.0/24的靜態路由。
[Switch B] ip route-static 10.110.0.0 24 1.1.3.1
將Host A的IP地址配置為10.110.0.20/24,網關地址配置為10.110.0.10。
從Host A上通過Telnet方式登錄Switch A,結果成功。
從Host A上通過Telnet方式登錄Switch B,結果失敗。
從Host A上ping Switch B,結果成功。
由於Telnet使用的是TCP協議,ping使用的是ICMP協議,所以由以上結果可證明:從AC的接口Vlan-interface10接收的TCP報文的下一跳為1.1.2.2,VLAN接口Vlan-int30不轉發TCP報文,但可以轉發非TCP報文,策略路由設置成功。
通過策略路由控製從AC的接口Vlan-interface10接收的報文:
· 長度為64~100字節的報文以150.1.1.2/24作為下一跳IP地址;
· 長度為101~1000字節的報文以151.1.1.2/24作為下一跳IP地址;
· 所有其它長度的報文都按照查找路由表的方式轉發。
(1) 配置AC
# 創建VLAN 10及其對應的VLAN接口,並為該接口配置IP地址150.1.1.1/24。
<AC> system-view
[AC] vlan 10
[AC-vlan10] quit
[AC] interface vlan-interface 10
[AC-Vlan-interface10] ip address 150.1.1.1 24
[AC-Vlan-interface10] quit
# 創建VLAN 20及其對應的VLAN接口,並為該接口配置IP地址15.1.1.1/24。
<AC> system-view
[AC] vlan 20
[AC-vlan20] quit
[AC] interface vlan-interface 20
[AC-Vlan-interface20] ip address 151.1.1.1 24
[AC-Vlan-interface20] quit
# 創建VLAN 30及其對應的VLAN接口,並為該接口配置IP地址192.1.1.1/24。
<AC> system-view
[AC] vlan 30
[AC-vlan30] quit
[AC] interface vlan-interface 30
[AC-Vlan-interface30] ip address 192.1.1.1 24
[AC-Vlan-interface30] quit
# 配置動態路由協議RIP。
[AC-rip-1] network 192.1.1.0
[AC-rip-1] network 150.1.0.0
[AC-rip-1] network 151.1.0.0
[AC-rip-1] quit
# 配置策略lab1,將長度為64~100字節的報文轉發到下一跳150.1.1.2,而將長度為101~1000字節的報文轉發到下一跳151.1.1.2。
[AC] policy-based-route lab1 permit node 10
[AC-pbr-lab1-10] if-match packet-length 64 100
[AC-pbr-lab1-10] apply ip-address next-hop 150.1.1.2
[AC-pbr-lab1-10] quit
[AC] policy-based-route lab1 permit node 20
[AC-pbr-lab1-20] if-match packet-length 101 1000
[AC-pbr-lab1-20] apply ip-address next-hop 151.1.1.2
[AC-pbr-lab1-20] quit
# 在接口Vlan-interface10上應用定義的策略lab1,處理此接口接收的報文。
[AC] interface vlan-interface 10
[AC-Vlan-interface 10] ip policy-based-route lab1
[AC-Vlan-interface 10] quit
# 創建VLAN 10及其對應的VLAN接口,並為該接口配置IP地址150.1.1.2/24。
<RouterA> system-view
[RouterA] vlan 10
[RouterA-vlan10] quit
[RouterA] interface vlan-interface 10
[RouterA-Vlan-interface10] ip address 150.1.1.2 24
[RouterA-Vlan-interface10] quit
# 創建VLAN 20及其對應的VLAN接口,並為該接口配置IP地址15.1.1.2/24。
<RouterA> system-view
[RouterA] vlan 20
[RouterA-vlan20] quit
[RouterA] interface vlan-interface 20
[RouterA-Vlan-interface20] ip address 151.1.1.2 24
[RouterA-Vlan-interface20] quit
# 配置Loopback接口的IP地址。
[RouterB] interface loopback 0
[RouterB-LoopBack0] ip address 10.1.1.1 32
[RouterB-LoopBack0] quit
# 配置動態路由協議RIP。
[RouterB-rip-1] network 10.0.0.0
[RouterB-rip-1] network 150.1.0.0
[RouterB-rip-1] network 151.1.0.0
[RouterB-rip-1] quit
# 在AC上使用debugging ip policy-based-route命令監視策略路由。
<AC> debugging ip policy-based-route
<AC> terminal debugging
<AC> terminal monitor
# 從Host A上Ping Router A的Loopback0,並將報文數據字段長度設為64字節。
Pinging 10.1.1.1 with 64 bytes of data:
Reply from 10.1.1.1: bytes=64 time=1ms TTL=64
Ping statistics for 10.1.1.1:
Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 1ms, Maximum = 1ms, Average = 1ms
從AC上顯示的策略路由調試信息如下:
*Jun 26 12:04:33:519 2012 AC PBR4/7/PBR Forward Info: -MDC=1; Policy:lab1, Node:
10,match succeeded.
*Jun 26 12:04:33:519 2012 AC PBR4/7/PBR Forward Info: -MDC=1; apply next-hop 150
.1.1.2.
以上策略路由信息顯示,AC在接收到報文後,根據策略路由確定的下一跳為150.1.1.2,也就是說將報文從VLAN接口Vlan-in10轉發出去。
# 從Host A上Ping Router A的Loopback0,並將報文數據字段長度設為200字節。
C:\> ping –n 1 -l 200 10.1.1.1
Pinging 10.1.1.1 with 200 bytes of data:
Reply from 10.1.1.1: bytes=200 time=1ms TTL=64
Ping statistics for 10.1.1.1:
Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 1ms, Maximum = 1ms, Average = 1ms
從AC上顯示的策略路由調試信息如下:
*Jun 26 12:20:33:610 2012 AC PBR4/7/PBR Forward Info: -MDC=1; Policy:lab1, Node:
20,match succeeded.
*Jun 26 12:20:33:610 2012 AC PBR4/7/PBR Forward Info: -MDC=1; apply next-hop 151
.1.1.2.
以上策略路由信息顯示,AC在接收到報文後,根據策略路由確定的下一跳為151.1.1.2,也就是說將報文從VLAN接口Vlan-int20轉發出去。
· AC的下行口連接Switch A,上行口GigabitEthernet1/0/5連接到Internet。
· AC的子接口GigabitEthernet1/0/5.1通過DHCP方式獲取IP地址。
要求:Router上的管理報文SNMP和SNMP Trap通過子接口GigabitEthernet1/0/5.1進行轉發。
圖1-4 指定出接口和下一跳的本地策略路由配置舉例組網圖
# 配置子接口GigabitEthernet1/0/5.1的地址獲取方式為DHCP。
<AC> system-view
[AC] interface gigabitethernet1/0/5.1
[AC-GigabitEthernet1/0/5.1] ip address dhcp-alloc
[AC-GigabitEthernet1/0/5.1] vlan-type dot1q vid 1
[AC-GigabitEthernet1/0/5.1] quit
# 定義ACL 3000匹配管理報文(SNMP和SNMP Trap報文)。
[AC] acl number 3000
[AC-acl-adv-3000] rule 0 permit udp source-port eq snmp
[AC-acl-adv-3000] rule 5 permit udp destination-port eq snmptrap
[AC-acl-adv-3000] quit
# 定義策略,使管理報文從GigabitEthernet1/0/5.1接口轉發(由於該子接口使用DHCP方式獲取地址,配置時不知道下一跳地址,因此需要將下一跳配置為通過DHCP學到的網關地址)。
[AC] policy-based-route management permit node 1
[AC-pbr-management-1] if-match acl 3000
[AC-pbr-management-1] apply output-interface gigabitethernet1/0/5.1 ip-address next-hop dhcpc
[AC-pbr-management-1] quit
# 在Router上應用本地策略路由。
[AC] ip local policy-based-route management
不同款型規格的資料略有差異, 詳細信息請向具體銷售和400谘詢。H3C保留在沒有任何通知或提示的情況下對資料內容進行修改的權利!