MPLS 高階應用 sham-link

實驗目的:

理解sham-link使用場景

sham-link命令用來配置偽連線,並配置偽連線的引數

使用場景:

本命令僅在VPN場景下使用。

使用sham-link命令建立偽連線,使VPN流量優先經過VPN骨幹區域的路由,避免在同一個OSPF區域內屬於同一個VPN之間的通訊總是透過OSPF區域內路由轉發。

配置影響

在VPN PE間配置偽連線後,偽連線將被視為OSPF區域內路由。用於使經過MPLS VPN骨幹網的路由成為OSPF區域內路由,避免VPN流量經這條路由轉發。偽連線的源地址和目的地址使用32位掩碼的Loopback介面地址,該Loopback介面需要繫結到VPN例項中,並透過BGP釋出。

注意事項

配置偽連線時,偽連線端點地址的路由不能透過私網的OSPF程序釋出到對端PE上。如果偽連線端點地址的路由透過私網的OSPF程序釋出到對端PE上,則對端PE將同時存在兩條到該偽連線端點地址的路由。其中一條是透過私網OSPF學習到的,另一條是透過MP-BGP學習到的。OSPF路由比BGP路由優先順序高,對端PE錯誤地選擇了OSPF路由,所以偽連線無法建立成功。

實驗環境:

MPLS 高階應用 sham-link

如圖:基礎環境配置:

R1-2-3-4-5, R1和R5 是CE,R2和R4是PE,R2-R3-R4之間執行MPLS+LDP,

PE和CE之間執行EBGP,R2 和R4 之間執行IBGP,AS號100,MPLS域內執行OSPF 1, 這個OSPF 1 是用作底層路由的, 其中R1 和R5 之間連線一根後門鏈路, 也宣告進OSPF 110 area 0

需求:

正常的資料轉發, 走MPLS 鏈路, 當MPLS鏈路不可用, 再走後門鏈路。

分析原因:

由於R2 把OSPF100的路由引入到BGP100 ,傳遞到R4 ,再從R4 的BGP程序中引入到OSPF100, 同理, 反過來的路由也是一樣,而MPLS在OSPF中是看做超級骨幹區域的,當R1-2之家的OSPF程序號和R4-5 之間的程序號一樣, 就看作是傳遞額3類LSA,兩邊程序號不一樣, 就看作是5類LSA,這樣導致兩邊的路由型別是區域間路由, 而R1-5之間是宣告進同一個區域的, 是1/2類路由,是區域內路由,由於區域內路由優於區域間路由, 導致所有的流量全部走後門鏈路, 不走MPLS區域,

配置環境

首先R2-3-4之間的OSPF 鄰居沒有問題,

PE2-4 之間建立IBGP鄰居關係, R3 不需要啟用BGP

配置:基礎配置過程省略

——————————————————————————————————————

配置vpn instance

首先配置vpn instance 並且關聯到與CE相連的PE 介面上:

在R2 上:

ip vpn-instance 1

ipv4-family

route-distinguisher 100:100

vpn-target 200:400 export-extcommunity

vpn-target 400:200 import-extcommunity

interface GigabitEthernet0/0/0

ip binding vpn-instance 1

ip address 12。1。1。2 255。255。255。0

#

在R4 上:

#

ip vpn-instance 1

ipv4-family

route-distinguisher 100:100

vpn-target 400:200 export-extcommunity

vpn-target 200:400 import-extcommunity

interface GigabitEthernet0/0/1

ip binding vpn-instance 1

ip address 45。1。1。4 255。255。255。0

——————————————————————————————————————

CE-PE 之間執行OSPF

接下來在R1 和R2 之間執行OSPF

[R1-ospf-100]display this

[V200R003C00]

#

ospf 100 router-id 1。1。1。1

area 0。0。0。0

network 12。1。1。1 0。0。0。0

[R2-ospf-100]display this

[V200R003C00]

#

ospf 100 vpn-instance 1

area 0。0。0。0

network 12。1。1。2 0。0。0。0

#

R4 :

ospf 100 router-id 4。4。4。4 vpn-instance 1

area 0。0。0。0

network 45。1。1。4 0。0。0。0

R5:

[R5-ospf-100]display this

[V200R003C00]

#

ospf 100 router-id 5。5。5。5

area 0。0。0。0

network 45。1。1。5 0。0。0。0

#

——————————————————————————————————————————

BGP部分:PE 上BGP中匯入OSPF路由

R2

[R2]bgp 100

ipv4-family vpn-instance 1

import-route ospf 100

R4

[R4]bgp 100

ipv4-family vpn-instance 1

import-route ospf 100

——————————————————————————————————————————

OSPF 部分,PE上OSPF中匯入BGP路由

在R2和R4 的OSPF 100 中分別引入BGP

[R2]ospf 100

[R2-ospf-100]import-route bgp

[R4]ospf 100

[R4-ospf-100]import-route bgp

首先關閉後門鏈路, 檢視R1 路由表,

可以看到R1 已經收到了所有路由, 同理,R5 也收到了對應的路由

MPLS 高階應用 sham-link

MPLS 高階應用 sham-link

測試沒有問題, 連通性問題解決了

————————————————————————————————————

檢視R1 收到的OSPF路由更新中攜帶的屬性

接下來在R1 上抓包, 在R5 上把5。5。5。5/32 先撤銷, 再重新宣告一下,

R5 上操作:

[R5-ospf-100-area-0。0。0。0]undo network 5。5。5。5 0。0。0。0

[R5-ospf-100-area-0。0。0。0]network 5。5。5。5 0。0。0。0

MPLS 高階應用 sham-link

從這張圖中可以看到, OSPF 撤銷路由使用的是LS age=3600 的更新,這條需要撤銷的路由是3類LSA, 字首是5。5。5。5/32, ADV router 是12。1。1。2, DN 位已經置位,這個位是用來防環的。

MPLS 高階應用 sham-link

可以看到撤銷後, LSA的更新報文中LS age欄位是1,這是一條路由通告

————————————————————————————————————————-

檢視BGP 報文更新中攜帶的路由屬性

由於OSPF 程序ID不同可以建立鄰居,還有很多場景, 開銷值如何攜帶,OSPF 有很多的區域規則, 防環機制,

我們再在R2 0/0/1 口抓包

MPLS 高階應用 sham-link

——————————————————————————————————————————

分析路由流向

接下來我們分析一下。

在這個環境中, 中間執行的是MPLS, 右邊LSA1/2傳遞給左邊的LSA, 左邊收到後是幾類LSA,

MPLS 高階應用 sham-link

思科認為是3類LSA,華為認為是5類的,

因為在PE上, 需要把OSPF 路由重分發進BGP,把BGP中的路由重分發進OSPF,重分發後相當於是外部路由,就是一個5類LSA,華為認為是3類LSA,只有ABR 會產生3類LSA,這裡PE可以看成是ABR,中間這個MPLS 可以看成是一個超級骨幹區域,雖然左邊也是area 0 , 但是等級要比area 0 等級高一點,

比如在這個環境中, 左邊程序1 , 右邊程序2, 程序不影響鄰居建立,但是影響路由的型別, 影響區域的概念,

MPLS 高階應用 sham-link

今天我們這裡討論的是兩邊區域ID 相同的情景。

如圖, 兩個CE, 如果啟用後門鏈路, 左右區域號一致, 後門鏈路傳遞1/2類LSA,流量不走MPLS 區域,如果區域號不一致, 傳遞3類LSA,由於MPLS 傳遞的也是3類LSA, 這個時候就需要比較cost,

對於左右區域相同的,情況, 流量不會走MPLS, 會全部走後門鏈路, 對於這種情況, 需要在PE1-2之間啟用sham-link,sham-link 可以在兩個PE之間建立一條邏輯隧道, 這條隧道, 可以把3類LSA 以1/2類LSA 傳遞過去。

接下來我們把後門鏈路啟用,宣告進OSPF 100 area 0。 驗證一下

————————————————————————————————-

配置sham-link

MPLS 高階應用 sham-link

在新新增的這條線兩端配置15。1。1。0/24地址,並測試連通性

分別在R1和R5上將這個鏈路宣告進OSPF 100 area 0 檢視鄰居, 沒有問題。

MPLS 高階應用 sham-link

現在鄰居起來了, 我們看一下路由

MPLS 高階應用 sham-link

透過檢視路由表, 發現R1 上去往R5 下一跳直接是G0/0/1, 去往R5

因為這條R1 上的5。5。5。5 是1類LSA,

我們檢視OSPF LSDB, 發現這個5。5。5。5/32 是1類LSA,

MPLS 高階應用 sham-link

這個時候, 我們把R1 g0/0/1介面關閉, 發現R1 上關於R5 5。5。5。5/32

MPLS 高階應用 sham-link

可以看到透過走MPLS, 這個5。5。5。5 的LSA 是3類的,可以看到, 當R1-5之間的鄰居起來後, 直接把從MPLS 過來的3類LSA 覆蓋了, 沒有了。

————————————————————————————————————

配置sham-link

接下來我們配置sham-link,位置在PE上, R2 和R5 , 要單獨建立一個loopback, 而且必須是32位掩碼, 關聯vpn 例項, 並且這個環回口要在BGP的vpn 例項中通告出去

R2 :

interface LoopBack1

ip binding vpn-instance 1——-建立sham-link的環回口要和vpn instance 關聯

ip address 22。22。22。22 255。255。255。255

bgp 100

#

ipv4-family vpn-instance 1 ————要在vpn instance中操作

network 22。22。22。22 255。255。255。255 在BGP中通告建立sham-link的環回口

import-route ospf 100————————重分發OSPF 100

ospf 100 vpn-instance 1——-建立關聯vpn instance 的ospf

import-route bgp——————重分發BGP

area 0。0。0。0 ——-都宣告進area 0,如果兩邊宣告的區域ID不一樣, 會導致問題

network 12。1。1。2 0。0。0。0

sham-link 22。22。22。22 44。44。44。44 啟用shamlink

R4:

interface LoopBack1

ip binding vpn-instance 1

ip address 44。44。44。44 255。255。255。255

bgp 100

ipv4-family vpn-instance 1

network 44。44。44。44 255。255。255。255

ospf 100 router-id 4。4。4。4 vpn-instance 1

import-route bgp

area 0。0。0。0

network 45。1。1。4 0。0。0。0

sham-link 44。44。44。44 22。22。22。22

MPLS 高階應用 sham-link

檢視R1 路由表, 發現R1 去往R5 5。5。5。5 還是走下邊, 因為出介面是g0/0/1,

MPLS 高階應用 sham-link

我們現在分析一下, R1 現在可以收到MPLS 和下邊的OSPF 的LSA 都是1/2類的,而上下的頻寬都是一樣的, 開銷都一樣, 但是上邊比下邊跨越的路由器多一些, 所以選擇了,下邊, 現在我們在R1/5的G0/0/1口增加ospf cost,

[R1-GigabitEthernet0/0/1]ospf cost 10

[R5-GigabitEthernet0/0/1]ospf cost 10

MPLS 高階應用 sham-link

MPLS 高階應用 sham-link

可以看到R1 可以收到關於這個網路5。5。5。5 的1/3類LSA,透過檢視這個3類LSA, 發現option中的欄位DN位是置位的。

MPLS 高階應用 sham-link

如果把sham-link去掉, 可以看到, 還是走下邊路徑的

[R2-ospf-100-area-0。0。0。0]undo sham-link 22。22。22。22 44。44。44。44

MPLS 高階應用 sham-link

MPLS 高階應用 sham-link

驗證了sham-link 的作用, 是在R2 和R4 之間建立了一條邏輯隧道, 實現了把R5 上的一類LSA 5。5。5。5從R4 傳遞到R2 上, 是以1/2類LSA傳遞的。