HCIE(MPLS解決BGP路由黑洞的原理)

這是MPLS的一個故事。。。。

衆所周知:
在一個AS中,如果要傳送BGP路由,由於IBGP水平分割的原因,所以我們通常會使得所有的設備都爲BGP設備並進行全互聯或者採用反射器聯盟等等去解決傳送BGP路由的問題
但是:
這種較爲理想的情況一般只會存在於我們的模擬實驗環境中,因爲在一個AS中的全部設備都運行BGP是很不現實的,因爲BGP設備很貴。所以往往是隻會在AS的邊境部署較爲昂貴的BGP設備,內部則爲無BGP的普通設備
熟悉BGP的同學知道:BGP之間可以通過TCP進行非直連的建鄰,進行BGP路由的傳遞
這就導致出現了一個現象:BGP路由黑洞


如下圖
在這裏插入圖片描述

  1. AR1和AR3是BGP設備,其上各有兩個環回,一個用來BGP非直連建鄰用,一個是BGP路由進行宣告
  2. AR2不是BGP設備
  3. 底層用ospf鋪設

現在AR1將BGP路由傳送給AR3


詳解:在控制平面,BGP的路由可以通過中間一系列的設備傳送到AR3,中間的設備不會去拆解BGP的包,它們只負責傳送數據包;在數據層面,收到BGP路由的AR3發現這條路由是由AR1傳送來的,路由的下一跳是AR2,AR3就會將路由給AR2,AR2拿到後就傻眼了,因爲AR2並不知道AR1的這條BGP路由,因爲AR1在OSPF中只宣告了建鄰的那個環回地址,並沒有宣告BGP路由的那個環回,所以路由就在AR2這塊丟了,AR2就成了一個黑洞


分析後發現:是因爲中間沒運行BGP的設備並不知道AR1的BGP路由
那麼在以前就出現了一種解決方法:同步。就是將BGP的路由同步到IGP中,這樣AR2通過IGP就知道了AR1的BGP路由,就可以到達了,這樣就解決的路由黑洞。可是在邊界運行的BGP設備,它負責收集來自其他AS的BGP路由,所以BGP路由表會很龐大,而IGP只是負責內部的路由,這樣看來,BGP相當於一輛大貨車,IGP相當於一輛小汽車,將BGP同步到IGP,會把IGP整死的;這個方法逐漸的就不被怎麼使用了;下來就迎來了MPLS的機會


MPLS(多標籤分發技術)
有了這個標籤分發技術,就可以在2層與3層之間弄出一個2.5層,路由器通過MPLS的壓標籤彈標籤進行路由的傳遞,來解決BGP路由黑洞的問題。這大家也知道,沒啥好說的
但是有個大家忽略的小細節我談談
路由器只會基於自己的FIB表進行標籤的分發,也就是:如果上游傳來的路由自己的FIB表中有,它纔會給該條路由分配標籤,如果FIB表沒有也是不會爲路由分配標籤的;所以這纔是我寫這篇博客的緣故
即:FIB中沒有AR1的BGP路由,MPLS又是怎麼給這條BGP路由打標籤,解決BGP的路由黑洞?


我想可能大多數人沒有想過這個問題,我之前也沒有想過,就那樣含糊的理解與記憶,但問題始終還是要尋根問底的,現在我來闡述一下MPLS究竟是怎麼解決路由黑洞的
原因其實很簡單:
AR3收到AR1的BGP路由,它發現自己的FIB表並沒有這條路由,這時AR3會基於這條路由進行本地的遞歸查找,最後遞歸發現AR3本地的FIB表中有這條BGP路由的下一跳,即AR1的BGP建鄰環回地址,這樣就會給AR1的BGP路由貼上環回的標籤,通過這條環回的MPLS的標籤隧道,從AR3->AR2->AR1,到了AR1後撕掉建鄰環回的標籤,發現是要到本地的另一個環回,這樣就可以訪問到了,所以MPLS是這樣從根本解決BGP路由黑洞的


所以這裏的關鍵點就是遞歸查找和MPLS標籤隧道,最終是要路由器進行遞歸查找並最終進入標籤隧道
所以只需要滿足上面的兩點,MPLS就不侷限於BGP了


如下實驗:

在這裏插入圖片描述
在AR1上有兩個環回:
lo0 -> 1.1.1.1/32
lo100 -> 100.100.100.100/32
在AR3上有兩個環回:
lo0 -> 3.3.3.3/32
lo100 -> 200.200.200.200/32

要求:

  1. 三臺設備都不能配置動態路由協議
  2. 中間的AR2不能配置靜態路由
  3. AR1的lo0100可以訪問AR3的lo0100

思路:

  1. 三臺設備均啓用MPLS
  2. 在三臺設備上,用靜態ldp打通AR1的lo0到AR3的lo0的lsp隧道
  3. 在AR1上書寫兩條靜態,通過遞歸查找將去往AR3的lo100的路由引入隧道中;AR3同AR1

配置:

AR1

mpls lsr-id 1.1.1.1
mpls
interface GigabitEthernet0/0/0
 ip address 12.1.1.1 255.255.255.0 
 mpls
#
interface GigabitEthernet0/0/1
#
interface GigabitEthernet0/0/2
#
interface LoopBack0
 ip address 1.1.1.1 255.255.255.255 
#
interface LoopBack100
 ip address 100.100.100.100 255.255.255.255 
#
ip route-static 3.3.3.3 255.255.255.255 12.1.1.2
ip route-static 200.200.200.200 255.255.255.255 3.3.3.3
#
route recursive-lookup tunnel
#
static-lsp ingress a destination 3.3.3.3 32 nexthop 12.1.1.2 out-label 100
static-lsp egress b incoming-interface GigabitEthernet0/0/0 in-label 201

AR2

mpls lsr-id 2.2.2.2
mpls
#
interface GigabitEthernet0/0/0
 ip address 12.1.1.2 255.255.255.0 
 mpls
#
interface GigabitEthernet0/0/1
 ip address 23.1.1.1 255.255.255.0 
 mpls
#
static-lsp transit a incoming-interface GigabitEthernet0/0/0 in-label 100 nextho
p 23.1.1.2 out-label 101
static-lsp transit b incoming-interface GigabitEthernet0/0/1 in-label 200 nextho
p 12.1.1.1 out-label 201

AR3

mpls lsr-id 3.3.3.3
mpls
interface GigabitEthernet0/0/0
 ip address 23.1.1.2 255.255.255.0 
 mpls
#
interface LoopBack0
 ip address 3.3.3.3 255.255.255.255 
#
interface LoopBack100
 ip address 200.200.200.200 255.255.255.255 
#
ip route-static 1.1.1.1 255.255.255.255 23.1.1.1
ip route-static 100.100.100.100 255.255.255.255 1.1.1.1
#
route recursive-lookup tunnel
#
static-lsp egress a incoming-interface GigabitEthernet0/0/0 in-label 101
static-lsp ingress b destination 1.1.1.1 32 nexthop 23.1.1.1 out-label 200

測試

在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述
紅線劃出的便是AR1去往AR3的200.200.200.200進的隧道ID,上下兩個隧道ID相同說明進的就是AR1的lo0到AR3的lo0的lsp隧道

切記

在非MPLS VPN的環境下BGP設備上需敲以下命令

route recursive-lookup tunnel
這個命令是開啓遞歸查找

在MPLS VPN環境中該命令是默認開啓的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章