注:PBR之前是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
啓用策略路由:
1.
開始配置route-map。使用route-map map-tag [permit | deny] [sequence-number]進入route-map的配置模式。
2.
使用match語句定義感興趣的流量,若是不定義則指所有流量。match length min max and/or match ip address {access-list-number | name}[...access-list-number | name]
3.
使用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]
4.
這裏要注意set ip next-hop與set ip default next-hop、set interface與set default interface這兩對語句的區別,不含default的語句,是不查詢路由表就轉發數據包到下一跳IP或接口,而含有default的語句是先查詢路由表,在找不到精確匹配的路由條目時,才轉發數據包到default語句指定的下一跳IP或接口。
5.
進入想應用策略路由的接口。interface xxx
6.
應用所定義的策略。注意必須在定義好相關的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語句,但其有下面的兩個限制:
1.
不支持set ip default next-hop 與 set default interface命令。
2.
若是在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接口進入的流量,在沒有「精確路由」匹配的狀況下,把源地址爲
配置以下:
access-list 1 permit i
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,並設置下一跳地址。對於
配置以下:
access-list 1 permit i
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
一個route map由擁有相同route-map名的route-map statements集合構成。這些語句能夠用permit和deny來標識是否執行策略路由。若是一個數據包所匹配的statement的標準是deny,則做爲一般的目的地址路由來進行轉發。若是是permit,則全部其上的set命令被應用。
讓咱們看一個demo:
route-map demo permit 10
match X Y Z
match A
set B
set C
route-map demo permit 20
match Q
set R
route-map demo permit 30
任何與X、Y、Z匹配的數據包都執行set B和C,若是沒有任何匹配,也就不會執行任何set命令。
下面咱們具體看一下命令:
1、使用route-map命令建立route map
Router(config)#route-map [permit|deny][]
參數map-tag指定了route map的名字
參數permit和deny指定了若是條件匹配將執行的動做
參數sequence-number用於區分每個route map statement,不一樣的statement擁有不一樣的sequence number。經過這個參數你能夠在一個route map的特定位置插入或刪除一條route map statement,而且能夠單獨的編輯它。
一個route map能夠包含多個route map statement,這些語句的執行順序像ACL同樣是從上到下。對於一個路由,先匹配的先執行。
2、使用match route map命令定義檢查條件
Router(config-route-map)#match {}
3、使用set route-map配置命令定義若是條件匹配後的行爲
Router(config-route-map)#set {}
一個route map能夠包含多個route map statement,一個match語句能夠包含多個條件。若是一個條件爲真,則認爲這個條件匹配;然而,必須全部的條件都匹配,才認爲這個route map statement匹配。
序列號參數決定了進行條件匹配的順序。只有序列號爲10的語句沒有匹配,纔會檢查序列號爲20的語句才被檢查。
一個route map的最後默認"deny any"。這個deny的使用結果依賴於這個route map是怎樣使用的。若是一個數據包對於route map沒有匹配項,它會按照正常的目的地址路由轉發。若是你想丟棄這個包,須要包含一個set語句路由這個包到一個null接口。這條語句應該被放在route map的最後。
Match
用來在route-map中執行匹配的標準包括:
1、 IP訪問列表中的源和目的地址
2、 三層數據包長度
1、標準訪問列表和擴展訪問列表均可用來創建策略路由的匹配標準。
要使用IP訪問列表來實現策略路由,可使用match ip address命令:
Router(config-route-map)#match ip address {|} [...|]
若是定義了多個訪問控制列表,任何一個訪問列表被匹配都認爲這條語句被匹配。
2、使用match route map命令定義檢查條件
Router(config-route-map)#match {}
3、使用set route-map配置命令定義若是條件匹配後的行爲
Router(config-route-map)#set {}
一個route map能夠包含多個route map statement,一個match語句能夠包含多個條件。若是一個條件爲真,則認爲這個條件匹配;然而,必須全部的條件都匹配,才認爲這個route map statement匹配。
序列號參數決定了進行條件匹配的順序。只有序列號爲10的語句沒有匹配,纔會檢查序列號爲20的語句才被檢查。
一個route map的最後默認"deny any"。這個deny的使用結果依賴於這個route map是怎樣使用的。若是一個數據包對於route map沒有匹配項,它會按照正常的目的地址路由轉發。若是你想丟棄這個包,須要包含一個set語句路由這個包到一個null接口。這條語句應該被放在route map的最後。
Match
用來在route-map中執行匹配的標準包括:
1、 IP訪問列表中的源和目的地址
2、 三層數據包長度
1、標準訪問列表和擴展訪問列表均可用來創建策略路由的匹配標準。
要使用IP訪問列表來實現策略路由,可使用match ip address命令:
Router(config-route-map)#match ip address {|} [...|]
若是定義了多個訪問控制列表,任何一個訪問列表被匹配都認爲這條語句被匹配。
2、使用match route map命令定義檢查條件
Router(config-route-map)#match {}
3、使用set route-map配置命令定義若是條件匹配後的行爲
Router(config-route-map)#set {}
一個route map能夠包含多個route map statement,一個match語句能夠包含多個條件。若是一個條件爲真,則認爲這個條件匹配;然而,必須全部的條件都匹配,才認爲這個route map statement匹配。
序列號參數決定了進行條件匹配的順序。只有序列號爲10的語句沒有匹配,纔會檢查序列號爲20的語句才被檢查。
一個route map的最後默認"deny any"。這個deny的使用結果依賴於這個route map是怎樣使用的。若是一個數據包對於route map沒有匹配項,它會按照正常的目的地址路由轉發。若是你想丟棄這個包,須要包含一個set語句路由這個包到一個null接口。這條語句應該被放在route map的最後。
Match
用來在route-map中執行匹配的標準包括:
1、 IP訪問列表中的源和目的地址
2、 三層數據包長度
1、標準訪問列表和擴展訪問列表均可用來創建策略路由的匹配標準。
要使用IP訪問列表來實現策略路由,可使用match ip address命令:
Router(config-route-map)#match ip address {|} [...|]
若是定義了多個訪問控制列表,任何一個訪問列表被匹配都認爲這條語句被匹配。
2、match length 命令用來基於三層包長度來創建匹配。
Router(config-route-map)#match length
參數 定義了三層包的最大和最小長度。當一個包的長度在這兩個值之間,匹配成立。
可使用match length命令來區分傳輸類型,例如:交互數據包和文件傳輸數據包,文件傳輸數據包每每比較大。
Set
可使用一系列的set命令來定義當匹配語句知足時,數據包如何經過路由器進行轉發。
1、 set ip next-hop
2、 set interface
3、 set ip default next-hop
4、 set ip default interface
5、 set ip tos
6、 set ip precedence
一些set命令隻影響路由表裏有明顯路由的數據包;其餘的set命令隻影響路由表裏沒有明顯路由的數據包。下面咱們來仔細看一下:
(1) Router(config-route-map)#set ip next-hop [...]
Set ip next hop 命令設定流出端口的數據包的下一跳地址。
這個地址必須是鄰接路由器的ip地址。若是配置了多個接口,則使用第一個相關的可用接口。這個命令將影響全部的數據包類型而且一直使用。
(2) Router(config-route-map)#set interface [... ]
Set interface 命令爲數據包設定出向端口。 參數指定接口的類型和編號。若是定義了多個接口,則使用第一個被發現的up接口。
有時,路由表可能不包含到一個數據包目的地址的明顯的路由(例如:廣播包或者目的地址未知的數據包),這種狀況下,命令將不影響到這些數據包或者說命令忽略這些數據包。
(3)Router(config-route-map)# set ip default next hop [...]
set ip default next hop命令用於當路由表裏沒有到數據包目的地址的明顯路由時,設定它的下一跳地址。
(4)Router(config-route-map)# set default interface [...]
若是到目的地址沒有明顯路由,set default interface命令爲這些數據包設定output接口。
一旦目的地址或接口被選擇,其餘的default set 命令被忽略。
(5)Router(config-route-map)# set ip tos
Set ip tos 用來設定IP數據包的IP ToS值。能夠設定如下值:
<0 - 15>
|
Type of sevice value
|
Max-reliability
|
Set max reliable ToS (2)
|
Max-throughput
|
Set max throughput ToS (4)
|
Min-delay
|
Set min delay ToS (8)
|
Min-monetary-cost
|
Set min monetary cost ToS (1)
|
normal
|
Set normal ToS (0)
|
(6) Router(config-route-map)#set ip precedence [|]
Set ip precedence 命令用來設定IP數據包的優先級。可設定值以下表:
Value
|
Name
|
0
|
Routine
|
1
|
Priority
|
2
|
Immediate
|
3
|
Flash
|
4
|
Flash-override
|
5
|
Critical
|
6
|
Internet
|
7
|
Network
|
這個表顯示了可以使用的優先級值和相應的名字。
如前面的demo所示這些set命令能夠結合起來使用。