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越小的越優
首先你要明白,什麼時候需要選路,如果就有一條鏈路中更新過來的東西,還有必須選嗎?當然沒有必要,這是必須要先搞清楚的,當有多條線中更新過來有重複的條目時,就要進行選取最優條目,這
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成長之路 ---梅利