以前介紹了路由抓取工具(ACL,Prefix-List)和一些路由控制工具(Distribute-list,Filter-List和offset-List)。有須要的能夠關注一下以前的文章。redis
《路由策略專題(一)之路由抓取工具(Access-List和Prefix-List) 》《路由策略專題(二)之分發列表(Distribute-List) 》《路由策略專題(三)之偏移列表(Offset List)》《路由策略專題(四)之列表過濾列表(Filter-List) 》網絡
因爲Route-Map內容過於多,我將分篇介紹,本篇博文之中咱們將介紹Route-map的理論知識並結合一個使用場景(重分佈)進行簡單的介紹。其餘的使用場景將在後續博文中放出負載均衡
首先來看一下Route-map在路由策略地位工具中的地位。咱們能夠把它看作路由策略工具中的王者,其餘的路由工具雖然在各個方面的用途和使用場景與之相比有所不一樣,可是Route-map在路由策略中的地位是不容撼動的。這是由他的強大的功能性和使用範圍所決定的。它不只僅能夠和以前路由策略工具同樣,進行路由的過濾和修改,甚至還能夠修改路由包括的屬性等等乃至在數據層面均可以對流量產生影響。ide
下文將對Route-map進行全面可是簡單而簡單的分析:工具
1、理論篇
oop
咱們來看一下Route-map的使用場景和搭檔。spa
使用場景:orm
重分發期間進行路由過濾或執行策略router
PBR(策略路由)blog
NAT(網絡地址轉換)
BGP中的策略部署
其餘用途(如和其餘路由工具搭配例如distribute-list)
再來看一下它的能力:
與傳統的路由控制工具備所不一樣的是,Route-map不只僅侷限在對路由的抓取和過濾。還能夠給某些路由信息添加某些屬性的值(如tag,BGP的各類屬性等)。
不只侷限在IP層面的捕捉,也能夠針對某個接口、甚至數據包的下一跳和某些屬性進行抓取。
不止能夠對路由信息進行某些值的修改,甚至在轉發層面也能夠進行修改(搭配PBR)
在最具操做性的路由協議(BGP)中也扮演着很重要的地位。
接着,來看一下Route-map匹配與操做規則:
同Access-list相似,是一個從上而下的匹配機制,進行逐級向下的比對,若是某一條匹配不成功那麼將進行下一條的比對,直到整個Route-map的結尾。所以這裏咱們也要注意書寫的順序。
在每一條目中有兩個重要的組成部分:Match(條件)和Set(動做)。只有當條件匹配的狀況下才回去執行相應的動做。在一個條目中能夠有多個條件和多個動做;並且,若是隻做爲路由的過濾時使用的話可能只有Match沒有Set,所以Set也不是必須的。和Access-list同樣,在末尾隱含着一條Deny Any。所以,若是放行全部須要在末尾加入一個空條目。
最後,看一下Route-Map的技術特色總結:
match命令匹配特定條件,Set修改相關屬性或者分組
按自上而下的順序執行,相似ACL的方式而且末尾有Deny Any
route-map默認爲Permit,默認序號爲10,而且不會主動遞增,須要手動設置。若是須要Deny也須要設置
當一條match語句包括多個條件時採用邏輯或運算(OR);存在多條match語句時,各條match語句之間使用邏輯和運算(AND)
若是要放行全部能夠在末尾加一個空的條目
2、配置篇
配置命令:
具體的書寫規範:
*****************************************************
** route-map my-map permit/deny 10 **
** match A **
** match B C **
** set X **
*****************************************************
1.建立一個Route-map:
Route-map {Route map tag} {permit|deny} {sequence number}
這個全局配置命令建立一個route-map,使用自定義的字符串來表示這個route-map,你能夠在一個route-map下定義多個序列號。序列號在進行匹配動做時具備優先順序。
Permit/deny關鍵字在不一樣的部署場合中做用有所不一樣
結合幾個例子來看一下:
route-map my-map permit 10
建立了一個route-map,route-map的tag(理解爲名字)爲my-map,建立第十條條目而且爲permit(容許)
route-map my-map deny 20
在名爲my-map的route-map插入第二十條,這條爲Deny(拒絕)
route-map my-map 30
在名爲my-map的route-map插入第三十條,沒有明確說明permit仍是deny,這裏是Permit由於默認爲permit
注意當咱們進入具體某個條目的時候命令提示符會變動,以下圖所示
2.定義匹配條件:
match條件
語句 |
說明 |
match ip address |
匹配訪問列表或前綴列表 |
match length |
根據分組的第三層長度進行匹配 |
match interface |
匹配下一跳出接口爲指定接口之一的路由 |
match ip next-hop |
匹配下一跳地址爲特定訪問列表中被容許的那些路由 |
match metric |
匹配具備指定度量值的路由 |
match route-type |
匹配指定類型的路由 |
match community |
匹配BGP共同體社區屬性 |
match tag |
根據路由的標記進行匹配 |
3.定義動做
Set動做
語句 |
說明 |
set metric |
設置路由協議的度量值 |
set metric-type |
設置目標路由協議的度量值類型 |
set default interface |
指定如何發送這樣的分組 |
set interface |
指定如何發送這樣的分組 |
set ip default next-hop |
指定轉發的下一跳 |
set ip next-hop |
指定轉發的下一跳 |
set next-hop |
指定下一跳的地址,指定BGP的下一跳 |
set as-path |
BGP屬性 |
set community |
BGP屬性 |
set local-preference |
BGP屬性 |
set weight |
BGP屬性 |
set origin |
BGP屬性 |
set tag |
3、實驗篇
場景一:重分佈的場景中(實驗1)
環境說明:
OSPF中R1有四條路由,咱們用4個Loopback接口指代,咱們手工在接口上修改cost值分別爲十、50、20、60
如今要求R3上收到這些路由時分別爲右圖表中所示。
這顯然經過原生的重分佈命令沒法作到。這時就須要來Route-map來作了。
配置以前咱們先查看一下R2的路由表:
因爲R1和R2之間鏈路Cost爲10,所以咱們獲得的ospf路由cost值分別是依次是20、60、30、70。
這裏咱們能夠有兩種方式來作,一種是利用抓取Cost值在必定範圍的路由,一種是直接抓取路由信息。
具體配置以下:
按Cost值抓取的方式:
R2(config)#route-map OSPF-RIp permit 10
#抓取OSPF cost值小於60的路由
R2(config-route-map)#match metric 30 +- 29 #Match OSPF 的Metric(Cost)注意這裏用了加減號意思是匹配cost值爲30+-29暨(cost值在1到59之間的Cost 值)
R2(config-route-map)#set metric 2 #Set RIP中的Metric(Hop-Count)
R2(config-route-map)#route-map OSPF-RIp permit 20
#抓取OSPF cost值爲60和70的路由
R2(config-route-map)#match metric 60 70 #這裏利用了通條匹配時採用邏輯或運算,表示匹配OSPF中Cost值爲60或者70的路由。
R2(config-route-map)#set metric 4
R2(config)#router rip
R2(config-router)#redistribute ospf 1 route-map OSPF-RIp
這裏也能夠用匹配路由的方式作:
#抓取跳數應設置爲2的路由(可以使用Prefix-list或ACL)
R2(config)#ip prefix-list HOP2 seq 5 permit 192.168.1.0/24
R2(config)#ip prefix-list HOP2 seq 10 permit 192.168.3.0/24
#抓取跳數應設置爲4的路由(可以使用Prefix-list或ACL)
R2(config)#ip prefix-list HOP4 seq 5 permit 192.168.2.0/24
R2(config)#ip prefix-list HOP4 seq 10 permit 192.168.4.0/24
#配置router-map
R2(config)#route-map OSPF-RIP2 permit 10
R2(config-route-map)#match ip address prefix-list HOP2
R2(config-route-map)#set metric 2
R2(config-route-map)#match ip address prefix-list HOP4
R2(config-route-map)#set metric 4
#在RIP進程下調用
R2(config)#router rip
R2(config-router)#redistribute ospf 1 route-map OSPF-RIP2
來查看一下R3的路由表進行一下驗證:
上一個情景中咱們瞭解如何使用在重分佈場景下使用的Route-map的具體配置
咱們就結合一個經典案例看一下:
三層拓撲圖以下:
環境簡單說明:
R1和R2分別鏈接三層交換機SW1和SW2;SW1和SW2分別同OA網和Produce網相連。
假設R一、R2到生產網絡和辦公網絡分別使用靜態路由
R1上有靜態路由10.0.1.0/24和10.0.2.0/24 指向SW1的三層口10.0.254.1
R2上有靜態路由10.0.1.0/24和10.0.2.0/24 指向SW1的三層口10.0.254.5
R一、R二、R3有運行OSPF,R一、R2分別將靜態路由重分佈到OSPF中。
在沒有作任何修改的狀況下R3應該收到的10.0.1.0/24和10.0.2.0/24是負載均衡的,如今咱們要求OA流量按綠線放想走,Produce流量按藍線方向走。
這時候就要咱們的Route-map介入了在出現鏈路斷路的狀況時流量能夠進行切換。這時候咱們就能夠採用能夠走R1和R2之間的備份路線。
查看下R3的路由驗證一下初始路由。
R1:
#使用ACL抓取路由
access-list 1 permit 10.0.1.0
access-list 2 permit 10.0.2.0
#建立Route-map匹配路由10.0.1.0並設置Metric爲10
route-map my-map permit 10
match ip address 1
set metric 10
#建立Route-map另外一條條目,匹配路由10.0.2.0並設置Metric值爲20
route-map my-map permit 20
match ip address 2
set metric 20
#在OSPF進程中調用Route-map
router ospf 1
redistribute static route-map my-map subnet
R2:
access-list 1 permit 10.0.1.0
access-list 2 permit 10.0.2.0
route-map my-map permit 10
match ip address 1
set metric 20
route-map my-map permit 20
match ip address 2
set metric 10
router ospf 1
redistribute static route-map my-map subnet
在配置以後咱們再來看一下以前R3上路由的變化,發現如咱們所想要的走的方式同樣,OA網走R1,Produce網走R2
這裏咱們進行一下故障分析,假設R3和R1之間的鏈路出現故障
查看R3路由表咱們能夠發現一個有趣的現象,那就是路由的Metric值沒變可是下一跳改變了。這是因爲雖然R1,R3的路徑斷了,可是R1上依然經過R1和R2之間的鏈路重分佈進了OSPF,所以,R1上的路由依然能夠以OE2的形式傳遞出來。因此Metric值沒有變。
這時候好奇的小夥伴就有個疑問,那麼到底流量是走R3->R2->R1->SW1->OA網呢,仍是R3->R2->SW2->OA網呢?請看下面的分析
那麼若是同時R2到SW2的這段鏈路也出現問題了呢?
那流量到R2以後會按藍線,給到R1嗎?在咱們這個環境中是沒有辦法的,R2會直接將這個數據直接丟棄。
那麼解決辦法是什麼呢,這時候就可使用咱們以前講過的BFD。具體解決辦法請參考BFD的文檔:《雙向鏈路檢測(BFD)之靜態路由篇》
設置了BFD以後,即可以按照R3->R2->R1->SW1->OA網的路徑進行傳播
因爲篇幅的關係,其餘Route-map的場景中應用咱們將會分篇來說。
本篇文檔就介紹到這裏,但願能幫助到你。須要實驗拓撲的小夥伴能夠關注一下我,給我私信或者加個人QQ,我能夠將個人實驗拓撲分享給你。謝謝