基本解釋
PBR(Policy Based Routing, 策略路由)以前是CISCO用來丟棄報文的一個主要手段。比如:設定set interface null 0,按CISCO說法這樣會比ACL的deny要節省一些開銷。這裡我提醒:
interface null 0
no ip unreachable //加入這個命令
這樣避免因為丟棄大量的報文而導致很多ICMP的不可達訊息返回。
三層設備在轉發數據包時一般都基於數據包的目的地址(目的網路進行轉發),那么策略路由有什麼特點呢?
1、可以不僅僅依據目的地址轉發數據包,它可以基於源地址、數據套用、數據包長度等。這樣轉發數據包更靈活。
2、為QoS服務。使用route-map及策略路由可以根據數據包的特徵修改其相關QoS項,進行為QoS服務。
3、負載平衡。使用策略路由可以設定數據包的行為,比如下一跳、下一接口等,這樣在存在多條鏈路的情況下,可以根據數據包的套用不同而使用不同的鏈路,進而提供高效的負載平衡能力。
策略路由影響的只是本地的行為,所以可能會引起“不對稱路由”形式的流量。比如一個單位有兩條上行鏈路A與B,該單位想把所有HTTP流量分擔到A鏈路,FTP流量分擔到B鏈路,這是沒有問題的,但在其上行設備上,無法保證下行的HTTP流量分擔到A鏈路,FTP流量分擔到B鏈路。
策略路由一般針對的是接口入(in)方向的數據包,但也可在啟用相關配置的情況下對本地所發出的數據包也進行策略路由。
本文就策略路由的以下四個方面做相關講解:
1、啟用策略路由
2、啟用Fast-Switched PBR
3、啟用Local PBR
4、啟用CEF-Switched PBR
啟用策略路由:
開始配置route-map。使用route-map map-tag [permit | deny] [sequence-number]進入route-map的配置模式。
使用match語句定義感興趣的流量,如果不定義則指全部流量。match length min max and/or match ip address {access-list-number | name}[...access-list-number | name]
使用set命令設定數據包行為。
set ip precedence [number | name]
set ip next-hop ip-address [... ip-address]
set interface interface-type interface-number [... type number]
set ip default next-hop ip-address [... ip-address]
set default interface interface-type interface-number [... type ...number]
這裡要注意set ip next-hop與set ip default next-hop、set interface與set default interface這兩對語句的區別,不含default的語句,是不查詢路由表就轉發數據包到下一跳IP或接口,而含有default的語句是先查詢路由表,在找不到精確匹配的路由條目時,才轉發數據包到default語句指定的下一跳IP或接口。
進入想套用策略路由的接口。interface xxx
套用所定義的策略。注意必須在定義好相關的route-map後才能在接口上使用該route-map,在接口啟用route-map策略的命令為:
ip policy route-map map-tag
啟用Fast-Switched PBR
在Cisco IOS Release 12.0之前,策略路由只能通過“進程轉發”來轉發數據包,這樣數據包的轉發效率是非常低的,在不同的平台上,基本在每秒1000到10,000個數據包。隨著快取轉發技術的出現,Cisco實現了Fast-Switched PBR,大大提升了數據包的轉發速度。啟用方法即在接口中使用ip route-cache policy命令。
注意:Fast-switched PBR支持所有的match語句及大多數的set語句,但其有下面的兩個限制:
不支持set ip default next-hop 與 set default interface命令。
如果在route-cache中不存在set中指定的接口相關的項,那么僅在point-to-point時set interface命令才能夠Fast-switched PBR。而且,在進行“進程轉發”時,系統還會先查詢路由條目查看該interface是不是一個合理的路徑。而在fast switching時,系統不會對此進行檢查。
啟用Local PBR
默認情況下,路由器自身所產生的數據包不會被策略路由,如果想對路由器自身產生的數據包也進行策略路由,那么需要在全局模式下使用如下命令來啟用:
ip local policy route-map map-tag
啟用CEF-Switched PBR
在支持CEF的平台上,系統可以使用CEF-Switched PBR來提高PBR的轉發速度,其轉發速度比Fast-Switched PBR更快!只要你在啟用PBR的路由器上啟用了CEF,那么CEF-Switched PBR會自動啟用。
註:ip route-cache policy僅僅適用於Fast-Switched PBR,在CEF-Switched PBR中並不需要,如果你在啟用了CEF的路由器上使用PBR時,這個命令沒有任何作用,系統會忽略此命令的存在。
PBR配置案例:
案例1:
路由器通過兩條不同的鏈路連線至兩ISP,對於從async 1接口進入的流量,在沒有“精確路由”匹配的情況下,把源地址為1.1.1.1的數據包使用策略路由轉發至6.6.6.6, 源地址為2.2.2.2的數據包轉發至7.7.7.7,其它數據全部丟棄。
配置如下:
access-list 1 permit ip 1.1.1.1
access-list 2 permit ip 2.2.2.2
!
interface async 1
ip policy route-map equal-access
!
route-map equal-access permit 10
match ip address 1
set ip default next-hop 6.6.6.6
route-map equal-access permit 20
match ip address 2
set ip default next-hop 7.7.7.7
route-map equal-access permit 30
set default interface null0
案例2
在路由器針對不同流量,修改其precedence bit,並設定下一跳地址。對於1.1.1.1產生的流量,設定precedence bit為priority,並設定其下一跳轉發地址為3.3.3.3;對於2.2.2.2產生的流量,設定precedence bit為critical,並設定其下一跳轉發地址為3.3.3.5。
配置如下:
access-list 1 permit ip 1.1.1.1
access-list 2 permit ip 2.2.2.2
!
interface ethernet 1
ip policy route-map Texas
!
route-map Texas permit 10
match ip address 1
set ip precedence priority
set ip next-hop 3.3.3.3
!
route-map Texas permit 20
match ip address 2
set ip precedence critical
set ip next-hop 3.3.3.5
分區引導記錄(Partition Boot Record,PBR)分區引導記錄(PartitionBootRecord,PBR):512位元組,位於每個非擴展主分區及每個邏輯分區的第一個扇區;可存放小段程式。
常見問題
1) 什麼是策略路由(PBR)?
策略路由是一種比基於目標網路進行路由更加靈活的數據包路由轉發機制。套用了策略路由,路由器將根據路由圖決定如何對需要路由的數據包進行處理,路由圖決定了一個數據包的下一跳轉發路由器。
2) PBR配置步驟?
配置 分成三步:
第一步:
R1(config)#access-list 1 permit 192.168.1.1
R1(config)#access-list 2 permit 192.168.1.2
第二步: ACL
R1(config)#route-map PBR permit 10 // PBR為route-map的名稱 ,序號為10。
R1(config-route-map)#match ip address 1 // 匹配ACL
R1(config-route-map)#set ip next-hop 12.1.1.2 // 滿足此ACL的,設定下一跳走12.1.1.2
R1(config-route-map)#exit
R1(config)#route-map PBR permit 20
R1(config-route-map)#match ip address 2
R1(config-route-map)#set ip next-hop 21.1.1.2 滿足ACL,設定下一跳走21.1.1.2
第三步: 綁定接口
R1(config)#interface ethernet 0/0
R1(config-if)#ip policy route-map PBR \\接口調用PBR,注意PBR只有IN方向。
3) 如何查看PBR?
R1#show route-map
route-map PBR, permit, sequence 10
Match clauses:
ip address (access-lists): 1
Set clauses:
ip next-hop 12.1.1.2
Policy routing matches: 18 packets, 1347 bytes \\有匹配項匹配到此條目
route-map PBR, permit, sequence 20
Match clauses:
ip address (access-lists): 2
Set clauses:
ip next-hop 21.1.1.2
Policy routing matches: 18 packets, 1347 bytes
4) .驗證本實驗設定PBR後的數據包路徑?
H1#traceroute 23.1.1.3
Type escape sequence to abort.
Tracing the route to 23.1.1.3
1 192.168.1.254 84 msec 64 msec 96 msec
2 12.1.1.2 176 msec 224 msec 180 msec 走下一跳12.1.1.2
3 23.1.1.3 272 msec 232 msec *
H2#traceroute 23.1.1.3
1 192.168.1.254 100 msec 172 msec 120 msec
2 21.1.1.2 288 msec 236 msec 244 msec 走下一跳21.1.1.2
3 23.1.1.3 300 msec 404 msec *
5) PBR注意事項?
- PBR優先於路由表查找。
- 默認只針對穿越流量生效,但可以通過 router(config)#ip local policy route-map AAA,讓本地起源的包生效。
- PBR只能套用在IN方向。