上篇文檔中咱們詳細介紹了Route-map,並結合瞭如何在重分佈中的應用進行分析,感興趣的同窗請移步《路由策略專題(五)之屠龍寶刀Route-map①》。本篇博文咱們將詳細闡述一下結合基於策略的路由(PBR)中的應用。網絡
PBR(Policy-based Routing):策略路由,也是route-map的重要使用途徑之一。準確說應該PBR應該是基於策略的路由。ide
傳統的路由是基於目的地址的路由方式,將數據包中的目的IP地址按照路由選路的原則,對比本身的路由表,而後將數據包按本地路由表中的信息轉發至出接口,當沒有路由的時候將數據包丟棄。與傳統的IP網絡路由有所不一樣,PBR比傳統的路由方式更加靈活,並且對於使用者的目的的執行能力也更強。也擺脫了傳統IP路由的缺陷,不只僅依靠目的IP地址進行數據包的轉發。工具
那麼PBR如何具備如此強大路由能力呢?這與策略工具中的王者「Route-map」息息相關。正是因爲Route-map的強大能力,而造就了PBR能夠擺脫傳統IP目的路由的強大的路由、轉發功能。oop
那麼咱們來看一下PBR的工做流程:spa
PBR應用的技術特色:3d
PBR應用在路由器的數據入站接口上orm
利用Route-map針對感興趣流進行抓取,而後執行某些動做(如指定下一跳等等)blog
PBR是數據層面的控制遞歸
因爲是數據層面,咱們抓取流量的時候要使用ACL而不要使用Prefix-list、cost值等路由控制層面的工具接口
配置命令:
配置命令這裏咱們着重看一下經常使用的SET動做,其餘的咱們簡要帶過。
1.#建立Route-map
route-map {route-map tag} {permit/deny} {sequence number}
2.#匹配感興趣流,注意一下使用ACL。
match ip address {acl number|name}
3.#經常使用SET動做
動做 |
解釋 |
set interface 如set ge0/1 |
指定數據的出接口(只適用於P2P鏈接,暨串口 ) |
set ip next-hop {ip address | recursive ip address} 如 set ip next-hop 10.1.1.1 10.2.1.1 set ip next-hop recursive 10.3.1.1 set ip next-hop 10.1.1.1 recursive 10.3.1.1 |
|
set ip next-hop verify-availability [next-hop-address {ip add} sequence {1-65535} track {object number}] |
1.若是不使用後面的參數那麼將默認使用CDP檢測下一跳的可達性,若是下一跳沒有開啓CDP則切換至下一個next-hop若是沒有下一個next hop將進行傳統路由 2.使用object tracking 來檢測一個遠端設備的可達性,當採用這個的時候若是第一個下一跳不匹配,則匹配第二個下一跳。若是沒有一個下一跳存活將不會進行傳統路由,將數據包丟棄。 3.若同時set了verify availability 和availability object tracking則以object tracking爲主。 |
set ip default next-hop 如set ip default next-hop 10.1.1.1 |
與set ip next-hop不一樣的僅僅是路由的優先級,在理論部分咱們有講過。這裏再次強調一下 普通路由>set ip default next-hop>默認路由 set ip next-hop>普通路由>默認路由 |
4.#進入接口下調用開啓PBR並調用以前的route-map
ip policy route-map [route-map tag]
5.#針對本地始發的流量開啓PBR,在全局模式下。
ip local policy route-map [route-map tag]
下面咱們進入實驗環節
實驗一:
這裏的實驗拓撲以下圖所示,針對這個拓撲圖咱們簡單的看一下幾個經常使用SET動做。
路由器R1,R2,R3,R4運行OSPF
R3和R4的lo0接口地址均爲8.8.8.8模擬一個雲端地址,而且這個接口不宣告進OSPF.
所以R1均不會收到,8.8.8.8來自兩端任何一段的8.8.8.8路由
R2上寫一條靜態路由8.8.8.8/32下一跳設置爲24.1.1.4
R5模擬用戶,只有一個默認理由指向15.1.1.1。
咱們先來看一下R1的路由表。
咱們這裏的實驗一的操做均在R1上完成。
R1上配置了
access-list 1 permit 15.1.1.0 0.0.0.255
--------------我是情景分割線--------------------
情景一:使用set ip next-hop。
配置以下:
route-map PBR1 permit 10
match ip address 1
set ip next-hop 13.1.1.3
int e0/0
ip policy route-map PBR1
咱們來觀察一下實驗現象:
R5:
先ping一下8.8.8.8觀察一下路徑R1->R3這條路
在來看一下ping 12.1.1.2這個路徑,這時候咱們會發現一個有趣的現象
實際流量走了這個路徑,這是因爲在PBR中咱們使用了set ip next-hop 這個命令,其中路由的優先級爲[PBR]>精準路由>默認路由的緣故。
那麼若是R3中的接口down掉又會怎麼辦呢?
這時候咱們手動關閉R3的E0/0接口,模擬一下
這時候咱們看到,R5並不可以ping通8.8.8.8了這時候咱們的全部的數據包在R1上仍然瘋狂的往E0/2口送可是到達鏈路以後接收端接口Down掉並不可以訪問的到。需求的地址。在鏈路上數據就被丟棄了。
這時候就須要用到咱們的下一個set命令verify-availability了,下面咱們看一下情景二
--------------我是情景分割線--------------------
情景二:配合verify-availability使用
R1:
route-map PBR2 permit 10
match ip address 1
#設置兩個下一跳,第一個爲R3地址,第二個爲R2地址。這裏因爲運行了動態路由協議其實能夠不用寫兩個下一跳。
set ip next-hop 13.1.1.3 12.1.1.2
set ip next-hop verify-availability
int e0/0
ip policy route-map PBR2
咱們繼續來觀察一下狀態
首先在R3 E0/0沒有shut的狀況下,發現走的是R1->R3這個路徑。
而後在R3 E0/0 shut的狀況下,這時候就能夠智能的進行切換到R1->R2->R4這個路徑了
咱們再次打開R3的E0/0接口,可是咱們關閉R3的CDP功能
R3:
no cdp run
再次觀察,發現如同以前所描述,在set命令中若是使用ip next-hop verify-availability命令不加參數,將使用cdp進行確認。那麼若是不是思科的設備咱們該怎麼作呢。
具體配置以下:
#配置sla,經過ping包查看
ip sla 1
icmp-echo 13.1.1.3 source-interface Ethernet0/2
frequency 5
#配置sla1的schdule
ip sla schedule 1 start-time now life forever
# 設置一個track實例,並關聯相關sla
track 1 ip sla 1 reachability
#修改PBR2的相關條目
route-map PBR2 permit 10
no set ip next-hop verify-availability
set ip next-hop verify-availability 13.1.1.3 1 track 1
咱們再在R5上驗證一下,咱們就發現如今就算沒有在R3上開啓CDP或者R3不支持CDP也能夠走R1->R3這個路徑了。
可是這裏有個問題,就是當R3E0/0口down掉的時候不會自動切換到R2爲下一跳。
這是因爲在route-map中咱們Verify-availability生效了可是裏面沒有關於R1,R2之間鏈路的檢測,所以默認爲只檢測R1和R3之間鏈路的連通性,若是R一、R3斷了咱們在Set中的第二跳也不會生效了,R1將把數據包在自身丟棄。所以咱們還要加入關於R2的相關track的配置。
具體以下:
ip sla 2
icmp-echo 12.1.1.2 source-interface Ethernet0/1
frequency 5
ip sla schedule 2 life forever start-time now
track 2 ip sla 2 reachability
route-map PBR2 permit 10
set ip next-hop verify-availability 12.1.1.2 2 track 2
這時候咱們就能夠當R1和R3之間的鏈路有問題的時候就能夠成功的切換到R1和R2之間的這條鏈路了。
--------------我是情景分割線--------------------
情景三:
這裏咱們來看一下如何使用遞歸路由地址做爲下一跳。
具體配置以下:
ip sla 1
icmp-echo 13.1.1.3 source-interface Ethernet0/2
frequency 5
ip sla schedule 1 life forever start-time now
track 1 ip sla 1 reachability
ip sla 3
icmp-echo 24.1.1.4 source-interface Ethernet0/1
frequency 5
ip sla schedule 3 life forever start-time now
track 3 ip sla 3 reachability
route-map PBR3 permit 10
match ip address 1
set ip next-hop verify-availability 13.1.1.3 1 track 1
#注意了這裏咱們仍然使用的是12.1.1.2做爲下一跳的檢測,由於去往遞歸地址24.1.1.4的下一跳實際爲12.1.1.2纔對。所以上面給出的關於ip sla3的配置是個迷惑誤導項你們格外注意了,我在作實驗的時候就犯了這個錯誤致使排錯排了半個多小時才找出這個錯點。請你們格外注意。
set ip next-hop verify-availability 12.1.1.2 2 track 2
set ip next-hop 13.1.1.3
#配置遞歸路由下一跳
set ip next-hop recursive 24.1.1.4
inte0/0
ip policy PBR3
這樣咱們就能夠成功的經過遞歸路由進行經過R1->R2->R4到達8.8.8.8了
我這裏在強調一下,使用遞歸路由進行下一跳的時候,須要在R1存在到往遞歸下一跳地址的路由(也能夠是默認路由)。遞歸下一跳的主要用途是能夠節省配置量。在實際中遞歸下一跳的應用基本很是少見,所以你們瞭解一下這個用法就能夠了。
--------------我是情景分割線--------------------
情景四:
這是這個實驗的最後一個情景,咱們將要驗證遊戲set ip default next-hop的用法。
咱們先將全部的接口狀態還原。
咱們先來查看一下R1的路由表,這裏沒有任何一條關於8.8.8.8的路由。
R1配置:
route-map PBR4 permit 10
match ip address 1
set ip default next-hop 13.1.1.3
這時咱們在R5 traceroute 8.8.8.8 能夠發現:路徑爲R1->R3->8.8.8.8
這時咱們在R1上插入一條默認路由,指向R2
R1:
ip route 0.0.0.0 0.0.0.0 12.1.1.2
繼續在R5上Traceroute能夠看出,路徑依舊爲R1->R3->8.8.8.8,這裏說明選路權重ip default next-hop>默認路由權重
咱們再在R1上插入一條路由爲8.0.0.0/8的路由指向 R2
R1:
ip route 8.0.0.0 255.0.0.0 12.1.1.2
再次在R5上Traceroute能夠看出,路徑依舊爲R1->R2_>R4->8.8.8.8,說明選路權重 細路由權重>ip default next-hop>默認路由權重
關於set ip next-hop的權重問題,感興趣的話本身進行驗證,這裏就再也不過多的進行說明了。
實驗一到此結束
實驗二
典型應用案例:內網分流
拓撲圖以下
實驗環境分析:
R1,R2,R3運行OSPF,其中全部loop back不口均參與OSPF進程。
R1模擬R1自己,有一條靜態路由爲192.168.0.0/22指向R4。
R2模擬GW1,包括一個lo0接口地址爲8.8.8.8/32模擬互聯網。向R1下發默認路由
R3模擬GW2,包括一個lo0接口地址爲8.8.8.8/32模擬互聯網。向R1下發默認路由
R4模擬E0/0的下行網段,R4上有兩個Loopback口,Lo1=192.168.1.1模擬紅網段,Lo=192.168.2.1模擬綠網段。
咱們但願在R1上作分流,在線路正常時要求紅色的流量走網關設備GW1,綠色的流量走網關設備GW2。當某一個線路故障能夠自動切換。
咱們先來驗證一下R1的路由表,查看的確存在來自兩臺網關設備的默認路由
實驗配置:
R1:
route-map traffic-split permit 10
match ip address 1
set ip next-hop 10.1.0.2
set ip next-hop verify-availability
route-map traffic-split permit 20
match ip address 2
set ip next-hop 10.2.0.3
set ip next-hop verify-availability
int e0/0
ip policy route-map traffic-split
這樣就能夠了。有些小夥伴會比較疑惑,爲何能夠只設置一跳?有這個疑問的小夥伴請回顧一下文章開頭的表格。
固然,若是網關設備不是思科設備,那麼咱們也要使用sla進行連通性驗證,相對的配置也多一些。
!
ip sla 1
icmp-echo 10.1.0.2 source-ip 10.1.0.1
frequency 5
ip sla schedule 1 life forever start-time now
track 1 ip sla 1
!
ip sla 2
icmp-echo 10.2.0.3 source-ip 10.2.0.1
frequency 5
ip sla schedule 2 life forever start-time now
track 2 ip sla 2
!
route-map traffic-split permit 10
match ip address 1
set ip next-hop verify-availability 10.1.0.2 1 track 1
set ip next-hop verify-availability 10.2.0.3 2 track 2
set ip next-hop 10.1.0.2 10.2.0.3
route-map traffic-split permit 20
match ip address 2
set ip next-hop verify-availability 10.2.0.3 1 track 2
set ip next-hop verify-availability 10.1.0.2 2 track 1
set ip next-hop 10.2.0.3 10.1.0.2
!
int e0/0
ip policy route-map traffic-split
咱們關於PBR的搭配和route-map在PBR中的應用就介紹到之這裏。
本篇文檔就介紹到這裏,但願能幫助到你。須要實驗拓撲的小夥伴能夠關注一下我,給我私信或者加個人QQ,我能夠將個人實驗拓撲環境給你。謝謝關注支持