1. 程式人生 > 實用技巧 >BGP(3)選路由原則

BGP(3)選路由原則

BGP的選路由原則13條

1、Weight 權重越大越優思科私有

2、local-prefence本地優先順序預設100越大越優

3、本地優先 任何條目都沒有本地優先

4、As-path越短越優,

5、origin 起源

6、med

7、ebgp優於ibgp

8、優選next-hop最近的路由

9、BGP負載均衡//不做為選路原則

10、old bgp 關係越老越優

11、rid越小越優

12、cluster-list越短越優

13、neighbor的ip越小的越優

首先你要明白,什麼時候需要選路,如果就有一條鏈路中更新過來的東西,還有必須選嗎?當然沒有必要,這是必須要先搞清楚的,當有多條線中更新過來有重複的條目時,就要進行選取最優條目,這

13條原則,就是幫助/執行決策,然後放入路由的。


1 weight 權重值,越大越優

權重,本地裝置有效,預設值為0,【cisco私有】

具體的配置思路要使用route-map進行呼叫

思路,既然只能設定本地有效,且只能是in方向,肯定是在有路由有基礎之上才可以做

1 ACL/prefix-list抓取相應的條目

1route-map 條目

2給特定的鄰居定義策略並指定應用方向

實驗IBGP部份

全網支援bgp,使用as100,建立IBGP關係,另外由R1和R3分別宣告兩個條目,方式要相同。

配置方面直接略過,直接 R2上查BGP表,

這時你會發現 兩個條目的weight都是0,如果不參照其它因素,肯定是無法進行比較的,

那怎麼辦呢?

好辦,現在它優選的是R1更新過來的條目,我們通過配置策略,把這個優選改成R3的

R2(config)#access-list 1 per 10.0.0.0      //抓取路由字首
R2(config)#route-map weight per 10     //明明weight的條目
R2(config-route-map)#ma ip add 1    //指定ACL列表序號
R2(config-route-map)#set weight 30    //設定權重值—30,<-65535>
R2(config-route-map)#exit
R2(config)#route-map weight per 20
//千萬不要忘了,要放行其它條目,因為現實中不可能就你這一條 R2(config)#router bgp 100 ///進入BGP程序 R2(config-router)#nei 3.3.3.3 route-map weight in //針對3.3.3.3呼叫策略應用在in 方向

再來檢視一下是否生效了呢~

有了,沒問題

數值改了,best也過去了,

如果是應用在out方向上會怎麼樣呢?之前說過,這個weight是本地裝置有效,不可能去傳遞給其它裝置,所以,只能配置在in 方向上,不信咱們可以試一下

加深一下印象而已嘛~

針對於1.1.1.1 應用out策略

看到了吧,直接就報錯,not supported,不支援這樣操作。

這也充分驗證了,weight屬性是可選非傳遞的,裝置不一定認識,而且也可以不傳遞,看來只有針對於本地才有效的。

實驗EBGP部份

其實換湯不換藥,還是一樣的道理,只不過就是EBGP的配置與IBGP的配置不相同而已,策略部份全都一樣的.

咱們直接應用策略

可以看到ebgp環境下,weight同樣預設是為0,還是那句話,這是本地,本裝置有效的,不會傳遞給其它裝置的,

我們來配置一下策略,讓4.4.4.4 成為最優,那麼就直接給4.4.4.4 這個peer設定route-map即可,set weight

R5(config)#do show ip access
Standard IP access list 1
    10 permit 100.0.0.0 (4 matches)
R5(config)#do show run | se route-
route-map weight permit 10
 match ip address 1
 set weight 10
route-map weight permit 20
R5(config)#router bgp 500 R5(config-router)#nei 4.4.4.4 route-map weight in

OK,no problem,不管你是ibgp,還是ebgp,只要是我在本地進行設定weight就可以對你這個條目生效。


2 local-prefen 本地優先順序

預設資料100,越大越優。

本地優先順序,這裡的本地指的是本AS內部,也就可以理解為在AS內部生效,在外部的話就是不生效的。也可以直接理解為在as內部不管是In/out 都應該生效,而對於EBGP只有IN是生效的

行不行的,咱們來測試一下,就知道了,用事實說話

慣例,先執行ibgp(之前的所有策略均已清除)

實驗IBGP部份

清除所有的策略

現在系統選取的是1.1.1.1為最優,那我們通過對3.3.3.3的localpre進行修改,看看能不能將最優改過來

Standard IP access list 1
    10 permit 10.0.0.0 (2 matches)
R2(config)#route-map local per 10
R2(config-route-map)#ma ip add 1
R2(config-route-map)#set local-preference 200
R2(config-route-map)#exit
R2(config)#route-map local per 20
R2(config)#router bgp 100
R2(config-router)#nei 3.3.3.3 route-map local in

Clear ip bgp * soft 加快BGP的收斂速度,觸發更新

IBGP的IN方向沒有任何的問題,數值也變了,BEST也變了,生效了

再來看一下IBGP的out方向是否可以

現在最優的是3.3.3.3,那我們再把1.1.1.1的條目加大local-pre,應用在out,上看能否生效

R1(config)#access-list 1 per 10.0.0.0    //抓取字首
R1(config)#route-map local1 per 10   //定義名字為local1
R1(config-route-map)#ma ip add 1
R1(config-route-map)#set local 300   //配置local-pre為300
R1(config-route-map)#exit
R1(config)#route-map local1 per 20    //允許其它
R1(config-route-map)#exit
R1(config)#router bgp 100    //進入程序
R1(config-router)#nei 2.2.2.2 route-map local1 out  //在out方向對2.2.2.2 應用策略

看看是否會生效呢~

OK ,同樣是生效的,證明我們之前的推斷是正確的。

實驗EBGP部份

首先先要明確一點,對於EBGP而言,更新到本地的路由,預設localpre是空的,空的,不是零,是空的,證明什麼?LOCAL-pre是本地AS的優先順序,和EBGP關係不大,你在AS內部就算再大,到了我EBGP的那裡,也是空的。

現在優選於4.4.4.4 的條目,我們通過對6.6.6進行策略部署,看能否生效,現在是in方向

R5(config)#do show ip access
Standard IP access list 1
    10 permit 100.0.0.0 (5 matches)
R5(config)#route-map local per 10
R5(config-route-map)#ma ip add 1
R5(config-route-map)#se local-preference 200  
R5(config-route-map)#exit     
R5(config)#route-map local per 20
R5(config-route-map)#exit
R5(config)#router bgp 500
R5(config-router)#nei 6.6.6.6 route-map local in

檢視配置是否生效

沒問題,數值可以修改,且策略也生效,看來EBGP的IN方向是沒有問題的

那麼Out方向呢?在4.4.4.4 上做,配置out方向為300看會怎麼樣

R4(config)#access-list 1 per 100.0.0.0
R4(config)#route-map local per 10
R4(config-route-map)#ma ip add 1
R4(config-route-map)#set local 300
R4(config-route-map)#exit
R4(config)#route-map local per 20
R4(config)#router bgp 400
R4(config-router)#nei 5.5.5.5 route-map local out
R4(config-router)#end

哎呀,可以配置,沒問題啊,生效嗎?

好像並不生效,

嘿嘿,沒錯,就是不生效,配置是一方面,但是策略能否生效,又是另一回事兒了,

記住,local-pre只在本AS內部進行傳遞,不會在update資訊中包含這一屬性到達別的AS中,所在EBGP關係中,local-pre只對in 生效,因為Local prefen不會被放到update資訊中來進行更新到其它AS,所以就得到上了面的結果


3本地優先 任何條目都沒有本地優先

無論你是ebgp,還是ibgp,都不可能有我的本地network條目優先,是這為什麼?

咱們可以看一下,

實驗IBGP | EBGP 部份

全網為IBGP鄰居關係,R1和R3分別向BGP網路中宣告10.0.0.0/24條目,

R2上也宣告一個同樣的BGP條目,看看效果會怎麼樣?

如果在本裝置上宣告同網段後,肯定會出現這樣的現象,

1 next-hop 0.0.0.0 ,本地為下一跳地址,

2 weight 權重值,本地的為32768

如果你想要比這個還優的話,可以進行修改其它條目的weight,但是真的會管用嗎?

行不行的咱們試一下就知道了

比如我們修改一個來自於R1的weight為32769(只要比32768大就可以了)

OK ,可以改啊,之前也作過關於weight的配置,完全沒有問題

但是會發現有些不對,條目的最前邊,由原來的* 變成了r,

r的意思,是rib-failure,放入路由表失敗,這個就有點兒意思了,

你是在BGP表裡最優的,但是你不是路由表裡最優的,

不要忘了,我本地可是有這個條目存在的。

所以根本就不會把你放到我的路由表中。

各種協議的AD值還記得嗎?回憶一下?

直連Connect AD=0

靜態 Static AD=1

RIP AD=120

EIGRP AD=90/170

OSPF AD=110

IBGP=200

EBGP=20

相同路由不同路徑比協議,相同路由相同協議比度量值,稍微一比,BGP就被C甩了幾條街。沒有可比性。

其實無論是EBGP,還是IBGP,修改比本地優先的辦法就是去調整weight值,

然而,並沒有什麼用。

EBGP我們就不試驗了,等於是重複操作。有興趣的可以自己測試一下


4 As-path越短越優

AS-path,這一路徑屬性,之前提到過,現在再次重申,

AS-PATH有兩個作用, 用於標記所經過的AS號

用於IBGP防環

其實對於EBGP同樣奏效

這一路徑屬性,只針對於EBGP而定的,因為只有EBGP才會牽扯到經過AS

還記得我在最開始畫下的那個圖嗎?

如圖中所求,R1有一個更新發往R4,請問哪條線路最好呢?

答案無可厚非,肯定是上面,

為什麼?

因為上面只經過了兩個AS就到了,

而下面要經過三個AS才可以,

再次重申,BGP協議看的不是經過的路由裝置個數,而是經過的AS個數。

所謂越短越優,就是經過的AS越少,則被BGP視為最優路徑

當然也可以通過set命令來進行修改,但是修改的時候有一個小技巧,咱們來看一下實驗

實驗EBGP IN部份

此時不做任何的配置,R4和R6釋出相同路由字首到EBGP中,在R5上看到的是有兩條相同的條目

這裡比的是個數、數量,而不是序號的大小,請注意哦~

現在優選6.6.6.6 ,那我們可以對這個條目的6.6.6.6進行策略控制,讓它經過的AS變多,從而使4.4.4.4發過來的條目變成best

怎麼做呢?

前文提過,AS-PATH為公認必遵的屬性,那麼任何一個update包中必須包含的,那麼應該說無論是in 還是out,都應該是沒問題的

配置思路

ACL抓取條目

定義route-map 關聯條目

set as-path

允許其它條目經過

調整用策略(in/out方向)

配置如下

R5(config)#route-map as per 10
R5(config-route-map)#ma ip add 1
R5(config-route-map)#set as-path prepend 600 600  //為了防止和其它AS衝突,使用自己本地的,當然可以多加幾個      
R5(config-route-map)#exit
R5(config)#route-map as per 20
R5(config)#router bgp 500
R5(config-router)#nei 6.6.6.6 route-map as in

再到R5上檢視一下BGP表

兩點結果,

1 可以看到6.6.6.6的條目上,經過了3個600AS

2 best條目也已經變成了4.4.4.4

至此證明IN方向部署策略是沒有問題的。

實驗EBGP OUT部份

接上面的配置

我們在4.4.4.4的裝置上進行配置,經過5個400,使6.6.6.6成為best

R4#show ip access
Standard IP access list 1
    10 permit 100.0.0.0 (4 matches)
R4(config)#route-map as per 10
R4(config-route-map)#ma ip add 1
R4(config-route-map)#set as-path prepend 400 400 400 400 400
R4(config-route-map)#exit
R4(config)#route-map as per 20
R4(config-route-map)#exit
R4(config)#router bgp 400
R4(config-router)#nei 5.5.5.5 route-map as out

再到R5上看一下

同樣也是沒問題的,

OK ,看來,in/out都是OK的


5 origin 起源

起源屬性,屬於公認必遵,所有的BGP裝置都必須要支援的,那麼就很好理解了,對於策略的部署,可以使用out,也可以使用in了,因為update包是必須攜帶這個屬性值的。

當然,除了通過配置策略來使它的型別變成incomplete,還有一種可能,就是在將路由宣告進 BGP時就是使用的重分佈,這樣直接就是incomplete形式的,

起源的型別

i—IGP BGP內部,這可不是IGP協議啊~你可以理解為internal

e—egp EGP,BGP的前身,現在已經被淘汰了

?—incomplete 重分佈形式

體的關鍵字提醒,,在show ip bgp 的時候可以很清楚的看到

Origin 屬性如果需要設定,需要和route-map進行關聯

配置思路

ACL抓取

Route-map定義

Set origin

針對於鄰居呼叫,因為是公認必遵屬性,所以in/out都無所謂的,但要注意所在位置

實驗IBGP部份

此時在R2上看到的條目是這樣的

現在我們要做的是將1.1.1.1這個條目的起源型別改成e,使用in 方向進行呼叫策略

Standard IP access list 1
    10 permit 10.0.0.0 (5 matches)
R2(config)#route-map origin per 10
R2(config-route-map)#ma ip add 1
R2(config-route-map)#set origin egp 500  //配置EGP時,要加上AS號
R2(config)#route-map origin per 20
R2(config)#router bgp 100
R2(config-router)#nei 1.1.1.1 route-map origin in

那麼再到R2上檢視一下BGP表,看會是什麼樣的

發現1.1.1.1的條目,起源變成了e,那麼i>e>?

此時我們在到R3上設定out方向的策略,將它改成incomplete,來看一下會發生什麼.

這時發現1.1.1.1的優先權又回來了,

R3(config)#access-list 1 per 10.0.0.0
R3(config)#route-map origin per 10
R3(config-route-map)#ma ip add 1
R3(config-route-map)#set ori incomplete
R3(config-route-map)#exit
R3(config)#route-map origin per 20
R3(config-route-map)#exit
R3(config)#router bgp 100
R3(config-router)#nei 2.2.2.2 route-map origin out

實驗EBGP部份

預設情況下不進行任何的屬性修改,在R5上檢視配置是這樣兒的

 Standard IP access list 1
    10 permit 100.0.0.0 (9 matches)
R5(config)#route-map ori per 10
R5(config-route-map)#ma ip add 1
R5(config-route-map)#set ori egp 100  //配置EGP時也要加上AS號
R5(config-route-map)#exit
R5(config)#route-map ori per 20
R5(config)#router bgp 500
R5(config-router)#nei 6.6.6.6 route-map ori in

檢視配置

對於ebgp而言,in方向測試成功

再來測試一下out方向,我們再將4改成?

R4(config)#route-map ori per 10
R4(config-route-map)#ma ip add 1
R4(config-route-map)#set ori incomplete  //修改起源為重分佈方式
R4(config-route-map)#exit
R4(config)#route-map ori per 20
R4(config-route-map)#exit
R4(config)#router bgp 400
R4(config-router)#nei 5.5.5.5 route-map ori out

再到R5上看一下配置

沒有任何的問題

總結:

可以再次的確認,這種公認必遵屬性的好處就是無認你是in 還是out方向上部署策略,都很靈活.


6、med(可選非傳遞)

Med,說白了就是BGP的metric值,如果是本地宣告的話,那麼預設就是0,越小越優

但如果是由IGP學習到的條目再進行宣告,會繼承IGP的metric

如下圖

此時,R2—R3執行eigrp和BGP,且關係為IBGP,

那麼在R2上show ip route 可以看到3.3.3.0為D的條目

那麼在R2上,進入BGP宣告這條路由,會是什麼樣的後果呢?

我們到R1上看一下BGP表

409600,好眼熟的數字 ,我們到R2上檢視一下EIGRP的路由表

R2上看到的metric,IGP 條目 eigrp協議的metric就是409600

所以驗證了我們剛才所說的,如果條目是從IGP學到的,再宣告到BGP中,那麼MED會繼承IGP的metric。無論你是 static, ospf eigrp rip,都是一樣,因為他們都屬於IGP協議。

還是一樣的方式帶著思考往下走,

可選非傳遞的路由屬性,那麼是否可以認為 out方向不可以呢?

實驗IBGP部份

R4-R5-R6同時執行BGP,關係為IBGP,

R4和R6同時宣告10.0.0.0/24條目,在R5上進行測試

先來看一下R5的BGP表

都是本地始發的,也沒有從其它的IGP協議中學習到,那麼此時的metric預設就是0,

之前說過,預設為0 ,越小越優,

現在最優的為4.4.4.4,那麼我們通過策略來給4.4.4.4發來的條目增加metric,看看會有什麼樣的後果。

配置思路

ACL抓取條目

Route-map定義

Set metric

程序調整用(in/out)

R5(config)#access-list 1 per 10.0.0.0
R5(config)#route-map med per 10
R5(config-route-map)#ma ip add 1
R5(config-route-map)#set metric 10   //加大MED值 
R5(config-route-map)#exit
R5(config)#route-map med per 20
R5(config)#router bgp 456
R5(config-router)#nei 4.4.4.4 route-map med in  

再來檢視R5的BGP表,發現4.4.4.4條目的metric值 被修改了,變成了10,10比0大,那麼0優先,所以6.6.6.6的條目更優先,至於前面的r,先不用管,是因為我在宣告eigrp的時候使用的是network 0.0.0.0,eigrp比ibgp更優。所以寫入路由表失敗了。但這不是我們現在要說的重點,請忽略。

In 方向沒有問題那麼out方向呢?試一下,我們再把R6的metric改成20看一下

R6(config)#access-list 1 per 10.0.0.0
R6(config)#route-map med per 10
R6(config-route-map)#ma ip add 1
R6(config-route-map)#set metric 20
R6(config-route-map)#exit
R6(config)#route-map med per 20
R6(config-route-map)#exit
R6(config)#router bgp 456
R6(config-router)#nei 5.5.5.5 route-map med out

,看起來同樣的奏效,,對於IBGP而言,無論是in 還是out,都生效的,

實驗EBGP部份

EBGP的環境中去修改metric,看能不能是IBGP的效果

R2(config)#access-list 1 per 10.0.0.0
R2(config)#route-map med per 10
R2(config-route-map)#ma ip add 1
R2(config-route-map)#set metric 10
R2(config-route-map)#exit
R2(config)#route-map med per 20
R2(config-route-map)#exit
R2(config)#router bgp 200
R2(config-router)#nei 1.1.1.1 route-map med in

照常一樣的配置,那麼會生效嗎/

可以看到,雖然metric值已經被修改過來了,但是你會發現,並沒有對best條目進行干預,

為什麼?

因為在ebgp的環境中,如果想要讓metric起做用,還要有一條特殊的命令。

R2(config-router)#bgp always-compare-med //總是比較med,這一點有點特殊,請記住

輸入完命令以後會怎麼樣呢?

OK,沒有問題,metric值也改變了,best條目也發生了變化

看來ebgp的關係下,修改metric是需要特殊命令,但是也可以生效

再來看一下out方向

由於metric越小越優,那我們再把3.3.3.3的條目metric值加大到20

看下效果,always-compare-med肯定是要跟上的

R3(config)#access-list 1 per 10.0.0.0
R3(config)#route-map med per 10
R3(config-route-map)#ma ip add 1
R3(config-route-map)#set me 20
R3(config-route-map)#exit
R3(config)#route-map med per 20
R3(config-route-map)#exit  
R3(config)#router bgp 300
R3(config-router)#nei 2.2.2.2 route-map med out //針對於鄰居2.2.2.2應用out方向策略
R3(config-router)#bgp always-compare-med

R2上檢視一下BGP表

OK,妥妥的,沒問題。

看來無認是IBGP,還是EBGP,對於bgp的med值(metric)來說,都是適用的,它是一個可選非傳遞的路徑屬性。


7、ebgp優於ibgp

如圖所示,R7和R8R9都是ebgp鄰居關係,

R8R9為IBGP關係,現在在R7上network一個條目,

R8R9都會收到,且會轉給自己的IBGP鄰居。

我們在R9上檢視BGP表,看看會發生什麼

實驗EBGP+IBGP

R7(config-router)#network 100.1.1.0 mas 255.255.255.0

只在R7上宣告100.1.1.0網段,

此時R8 會將從EBGP學來的條目發給自己的IBGP鄰居,R9,但是下一跳地址同樣是R7,這個之前講過,是IBGP的next-hop特性,

我們還可以在R8上設定一個self,看看會有什麼影響

無論你改成什麼,效果都是一樣的,EBGP就是比IBGP更優。且會被放入到路由表中。

注意,此時比較的並不是管理距離,因為還沒有到路由表那一步,

這是BGP在設計的時候就這麼安排 的,因為BGP 的主要作用就是在AS之間傳遞。


8、優選next-hop最近的路由

這裡說到的next-hop,其實指的是IGP協議的度量值 ,IGP的各協議參考依據是否還記得起來?

舉例來說明

實驗IBGP部份

R4R5R6全部執行EIGRP協議,

然後由R4和R6分別宣告BGP條目,

R5上檢視,

此時優選走的是4.4.4.4

那麼如何來檢視哪邊是到達next-hop的最近呢?

BGP中可以檢視一下具體條目的明細

Show ip bgp 10.0.0.0(具體條目的明細資訊)

R5#show ip bgp 10.0.0.0
BGP routing table entry for 10.0.0.0/24, version 7
Paths: (2 available, best #2, table Default-IP-Routing-Table, RIB-failure(17))
Flag: 0x4800
  Not advertised to any peer
  Local
6.6.6.6 (metric 409600) from 6.6.6.6 (6.6.6.6)
下一跳地址 metric值 來自6.6.6.6的更新RID為6.6.6.6
      Origin IGP, metric 0, localpref 100, valid, internal
     起源 IGP,i, med=0 本地優先順序100 ,有效 ibgp
  Local
4.4.4.4 (metric 409600) from 4.4.4.4 (4.4.4.4)
來自4.4.4.4(RID4.4.4.4)的條目,下一跳為4.4.4.4
      Origin IGP, metric 0, localpref 100, valid, internal, best //最優,不是在這比出來的

到這裡你會發現,前面的都一樣,到第8個選路原則的時候同樣是比不出來的,

因為兩條鏈路的metric是相同的,都是409600

我們這樣做,針對於eigrp協議,我們可以人為的干預其metric的數值,針對於介面修改bandwith

現在最優的是4.4.4.4,那我們就把它這個介面的metric改大。

圖中所示,和R4相連的是f0/0口,

OK

R5(config)#inter f0/0
R5(config-if)#bandwidth 100  //不是修改的實際頻寬,只是用做選路用

再來看一下BGP表,有沒有其它的變化

可以看到4.4.4.4 條目的metric值變大了,

eigrp中,參考的主要有頻寬和延遲,metric越大,說明頻寬越小,

頻寬越小,在eigrp中才不會被優選,

所以EIGRP就會認為這是一個相對於R6而言較遠的路徑,

而對於BGP而言,next-hop也就更遠,

誰近我就選擇誰

實驗EBGP部份

還是一樣的情況,三個裝置都運行了eigrp的底層協議,

然後,在其基礎之上再執行ebgp,

可以看到在R2上檢視BGP表,兩個EBGP鄰居發來的metric值 都是一樣的.

其修改方式是一樣的

就不在贅述了


9、BGP負載均衡

首先宣告,這一條就不是用於做決策的,

當有兩條全完一樣的條目,(這裡指的完全一樣是有條件的),會將兩個條目都放到路由表中,

實現負責均衡(當然,預設還是基於cef的負載均衡)

必須相同的路徑屬性包括

weight

Local prefen

As-path(不僅是長度相同,就連號碼都要相同)

Origin

Med

IGP distance IGP的距離

只有以上條件都一樣時,才可以成為BGP 的負載均衡

當然還有一條比較廢話的要求 ,

就是每條路由的next-hop不相同,//是不是很費話,一個人也不可能給我發兩條同樣的啊

這裡面的條件中包含了一個as-path,有了這個資料,就會很容易的想到,這是一個ebgp的關係,那IBGP會存在嗎?當然會存在負載

實驗EBGP部份

R8和R9同時向R7宣告一個相同的網段,

看看會是什麼樣兒的,(其它的什麼配置都不要做)

這是正常情況下R7所收到的100.0.0.0的條目

我們可以對比一下之前所提到的值 ,

weight=0 localpre=空 as-path=89,號碼相同,距離相同

origin code=i, med=0 IGPmetric 都是 409600

條件滿足,且不是一個next-hop地址

所以可以實現負載均衡

但是功能預設是關閉的,需要我們手動的進行開啟才OK

R7(config-router)#maximum-paths 2    ///後面的2表示兩條,最大可以有16條
在maximun-path後面還可以加ibgp關鍵字,如果不加預設只對EBGP有效

來看一下效果吧

其它沒有什麼變化,

但是你會發現,在條目詳細資訊的最後面,出現了一個關鍵字,multipath,多路徑

檢視一下路由表,看看傳說中的負載均衡.

出來了,出來了,

可是,這裡必須要加一個可是

有沒有發現,即使是在路由表中出現了負責均衡,可是在BGP表中,只有一條被選為BEST,

那條沒有被選中的條目,是不會傳遞給別人的.

實驗IBGP部份

對於IBGP的負責,和之前是一樣的條件,

但唯獨不同的就是最後的命令有些不同

R5(config-router)#maximum-paths ibgp 2

No problem,妥妥的,出現了multipath關鍵字。

但由於IBGP的AD=200,eigrp=90,所以沒能該條目放到路由表中。遺憾啊


10、old bgp 關係越老越優

OLD 老的意思,越老越優先,越老交情越好,這裡指的老,並不是裝置老,而是建立BGP鄰居的時間相對較老。

注意,這一條原則,IBGP的環境是不支援的。

不過通常我們是不讓它選擇這個的,因為不確認因素太多,

一般都是跳過,

只要咱們知道有這個事兒就行,

配置讓其跳過這個選項,直接進入下一個

R5(config-router)#bgp bestpath compare-routerid
   BGP最優路徑比較router-id (也就是第十一條)


11、rid越小越優

先宣告一下在BGP中的router-id,其實和OSPF的一樣一樣的,

可以自動選舉,也可以手動指定,通常我們都是手動指定的,用於標記裝置用

那麼當出現兩條相同路徑進行比較時,rid也是一項參考依據,RID越小的越優。

可以看目前優選的是4.4.4.4,具體是因為什麼呢?

我們可以檢視一下詳細資訊

bgp表中的是下一跳地址(也就是所謂的更新源地址,因為我們使用的是loopback介面)

而在詳細資訊中顯示的更加直接 ,()內的ID,是裝置的RID。

那我們此時把4.4..4.4的rid改大,看會怎麼樣

R4(config)#router bgp 456
R4(config-router)#bgp rou 40.40.40.40

再到R5上來看看吧

此時發現,修改過RID以後,就會出現神奇的一幕,

原來的best,變成了6.6.6.6


12、cluster-list越短越優

Cluster-list,即路由器射器所經過的ID數量 ,

cluster-list共生存在的還有一個屬性,那就是orignitor,發起者。

我們先來了解一下什麼是路由器射器

路由反射器的定義,

由於IBGP關係中存在防環機制(水平分割),也就是說一個BGP路由器從鄰居處學習到的條目,不會發給它的IBGP鄰居,

而路由反射器的出現,得以破解這個限制,

但是破解了,還要再加上自己的限制

1、 如果接收到條目中,會進行originator的地址,

如果和自己的想同,則拒收,

如果和自己的不同,則接收

2、cluster-list中顯示的是每經過一個RR反射器就會加一個標記(用RID進行標記),和AS-PATH的方式一樣,每經過一個都要加一個

通過一個實驗來進行理解

說到這裡也大概能知道了,這玩意兒,只出現在IBGP的環境中,因為EBGP根本就不存在反射器的必要。

路由反射器

全網執行BGP

R4-R5為IBGP R5—R6為IBGP,

那麼如果此時R4有一個新的網段宣告進來,會怎麼樣?

R5上可不可以收到?

R6上可不可以收到?

用事實說話

R4(config)#router bgp 456
R4(config-router)#network 4.4.4.0 mas 255.255.255.0

可以看到4.4.4.0/24的這個條目,R5是沒有問題的,

R6呢?

連毛都沒有,這就是IBGP水平分割的魔性,就是不給你.

,我們現在使用路由反射器

反射器共有兩個角色

中轉裝置: 就是執行中轉任務的裝置

客戶端 :中轉裝置的IBGP鄰居

如上圖所示,R5就成為了路由反射器,他需要將R4的更新過來的條目反射給R6

怎麼操作呢?

其實很簡單,就一條命令

R5(config)#router bgp 456
R5(config-router)#nei 4.4.4.4 route-reflector-client   //將4.4.4.4 設定為我的客戶端

此時再到R6上檢視一下BGP表

有了,有了

但是別急,

這個條目可不一般哦~

來看一下它的詳細資訊

可以看到originator: 發起者為40.40.40.40,是R4,

cluster list 是5.5.5.5,經過的反射器只有5.5.5.5一臺

那麼問題來了

如果拓撲圖是這樣的,

實驗1

R1—R2直連,建立IBGP關係

R2—R3直連,建立IBGP關係

R1—R3非直連,建立 IBGP關係

R1宣告一個網段進來,R2做反射器,

R3會選擇誰是最優路徑

R1(config-if)#router bgp 100
R1(config-router)#network 10.10.10.0 mas 255.255.255.0

R3上檢視

看到了兩條,有點一時間摸不到頭腦有沒有,

因為兩個next-hop是一樣的,

沒關係,咱們進到詳細資訊裡面看一下就知道了

如果一個路徑中攜帶了originator屬性(始發者),那麼就要用這條路徑的originator值 和另一條路徑的RID進行比較,,此時originator充當的是RID,

如果二者不相同,則遵循第十一條原則,RID小的優選

如果二者相同,則需要對比第十二項,cluster-list,

可以看到圖中我進行了標記,

Cluster-list = 2.2.2.2,這說明兩個問題,

1 經過了反射器它的RID是2.2.2.2

2 它只經過了這一個反射器

那麼對比這個cluster-list後,不難發現,上面那條是經過反射學來的,

而下面這條根本就沒有cluster-list的值 ,所以,被best了.當然會被優選.

實驗2

此圖中R2為反射器,client---R1

R3為反射器,clent---R1

R4為反射器client---R3

R1更新條目,請問哪邊為最優線路

R2(config-router)#nei 1.1.1.1 route-reflector-client 

R3(config-router)#nei 1.1.1.1 route-reflector-client 

R4(config-router)#nei 3.3.3.3 route-reflector-client

BGP表中啥也看不出來,我們必須要看詳細列表

這裡就是所提到的,每經過一個cluster-list,就會有一個標記,其實學到這裡,越來越覺得bgp是根據RIP來開發的,(開個玩笑)


13、neighbor的ip越小的越優

實驗1

R2和R1,R3互為IBGP鄰居,

此時,假設前面12條都比不出來,那麼就要比較誰的IP小了

這時的IP,有些特殊,是在配置bgp時,neighbor指定的那個IP,

我們先把RID去掉,以確保能夠達成實驗效果

為什麼會是1呢?

咱們逐一來看,

因為之前並沒有配置過任何的策略,

那我們也要從頭到尾的看一下,

1weight ,都是0

2local pre 都是100

3本地優先,此時沒有本地條目

4as-path,這是IBGP的環境不存在as-path

5origin 都是i的,

6med,沒動過都是0

7ebgp優於ibgp,現在的環境沒有EBGP

8next-hop最近的優選,此時並沒有配置修改過metric,兩端也是相同的

9BGP負載均衡,跳過,咱們都沒有配置

10old bgp,這條咱們越過了

11 rid越小越優, ///唉,可以看一下RID,因為之前的RID,被我取消了,那麼RID是可以自己選舉出來的,看一下吧

會發現,兩臺裝置過來的RID都是10.10.10.10,咋整,繼續往下比,

12cluster-list 此環境中不存在反射器

到了最後一條

13,neighbor的IP越小越優

來看一下我們是怎麼指的neighbor

,終於找到了,在這兒呢~ 1.1.1.1<3.3.3.3,所以它被優先了,

實驗2

不指定更新源,不配置lo 介面,,全部用直連建立 IBGP關係

R1和R3宣告網段,看R2上看到底是誰優選

BGP表中,可以看到是12.0.0.1 被選為最優,

再來看看詳細的資訊

最後再看的話,只能是看配置了,不防再多看一眼吧

可以看到在建立鄰居的時候,12.0.0.1就已經比23.0.0.3小了。所以才會優選它為最優

實驗3

使用 45.0.0.4 ----45.0.0.5

54.0.0.4 ----54.0.0.5 進行直連,然後建立IBGP鄰居

完全是遵照著我們的意思在前進,哈哈哈哈哈哈!!!


總結

13條選路原則,不是要你死記硬背,而是要熟練的掌握裡面的奧妙,

而且它們是從上至下的順序,如果說你要進行策略修改的話,最好是先從公認必遵的屬性開始,這是個人的一個看法.因為相對要靈活一些,無論是in 還是out,都是OK 的.

--------------------------------------

CCIE成長之路 ---梅利