實驗目的:
理解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路由,所以偽連線無法建立成功。
實驗環境:
如圖:基礎環境配置:
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 也收到了對應的路由
測試沒有問題, 連通性問題解決了
————————————————————————————————————
檢視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
從這張圖中可以看到, OSPF 撤銷路由使用的是LS age=3600 的更新,這條需要撤銷的路由是3類LSA, 字首是5。5。5。5/32, ADV router 是12。1。1。2, DN 位已經置位,這個位是用來防環的。
可以看到撤銷後, LSA的更新報文中LS age欄位是1,這是一條路由通告
————————————————————————————————————————-
檢視BGP 報文更新中攜帶的路由屬性
由於OSPF 程序ID不同可以建立鄰居,還有很多場景, 開銷值如何攜帶,OSPF 有很多的區域規則, 防環機制,
我們再在R2 0/0/1 口抓包
——————————————————————————————————————————
分析路由流向
接下來我們分析一下。
在這個環境中, 中間執行的是MPLS, 右邊LSA1/2傳遞給左邊的LSA, 左邊收到後是幾類LSA,
思科認為是3類LSA,華為認為是5類的,
因為在PE上, 需要把OSPF 路由重分發進BGP,把BGP中的路由重分發進OSPF,重分發後相當於是外部路由,就是一個5類LSA,華為認為是3類LSA,只有ABR 會產生3類LSA,這裡PE可以看成是ABR,中間這個MPLS 可以看成是一個超級骨幹區域,雖然左邊也是area 0 , 但是等級要比area 0 等級高一點,
比如在這個環境中, 左邊程序1 , 右邊程序2, 程序不影響鄰居建立,但是影響路由的型別, 影響區域的概念,
今天我們這裡討論的是兩邊區域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
在新新增的這條線兩端配置15。1。1。0/24地址,並測試連通性
分別在R1和R5上將這個鏈路宣告進OSPF 100 area 0 檢視鄰居, 沒有問題。
現在鄰居起來了, 我們看一下路由
透過檢視路由表, 發現R1 上去往R5 下一跳直接是G0/0/1, 去往R5
因為這條R1 上的5。5。5。5 是1類LSA,
我們檢視OSPF LSDB, 發現這個5。5。5。5/32 是1類LSA,
這個時候, 我們把R1 g0/0/1介面關閉, 發現R1 上關於R5 5。5。5。5/32
可以看到透過走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
檢視R1 路由表, 發現R1 去往R5 5。5。5。5 還是走下邊, 因為出介面是g0/0/1,
我們現在分析一下, 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
可以看到R1 可以收到關於這個網路5。5。5。5 的1/3類LSA,透過檢視這個3類LSA, 發現option中的欄位DN位是置位的。
如果把sham-link去掉, 可以看到, 還是走下邊路徑的
[R2-ospf-100-area-0。0。0。0]undo sham-link 22。22。22。22 44。44。44。44
驗證了sham-link 的作用, 是在R2 和R4 之間建立了一條邏輯隧道, 實現了把R5 上的一類LSA 5。5。5。5從R4 傳遞到R2 上, 是以1/2類LSA傳遞的。