BGP路由優(yōu)選規(guī)則
BGP是一個應用非常廣泛的邊界網關路由協(xié)議,被部署于大型的網絡環(huán)境中。它能夠支持大規(guī)模的網絡,能夠運載IP骨干網絡中大批量的路由前綴并且在AS之間靈活的傳遞。BGP擁有豐富的路徑屬性,以及路由策略部署工具,正是由于這些特點,使得BGP在路由操控和優(yōu)選決策上變得非常機動。在BGP網絡設計中,針對BGP路由各種路徑屬性的操作和BGP網絡設計都將影響路由的優(yōu)選,從而對網絡的流量產生影響,因此掌握BGP路由的優(yōu)選規(guī)則十分之重要。本文全面、深入地探討B(tài)GP的選路規(guī)則,并且結合一個完整的實驗針對每條選路規(guī)則加以驗證,從而加深對BGP路由優(yōu)選規(guī)則的理解。
預備知識:
BGP基礎知識(BGP的概念、狀態(tài)機、鄰居關系、水平分割規(guī)則、同步規(guī)則等)
BGP路徑屬性
BGP路由策略部署工具(route-policy、手工匯總、Ip-prefix等)
BGP路由反射器及聯(lián)邦的概念及部署
一臺BGP路由器有可能學習到關于同一個目的路由前綴的多條BGP路徑,當這些BGP路徑都是valid有效時,路由器將如何優(yōu)選呢?BGP的眾多路徑屬性如何影響B(tài)GP的路徑決策呢?如何根據業(yè)務需要操控BGP路由優(yōu)選呢?BGP定義了一整套詳細的選路規(guī)則,使得BGP路由器能夠在任何復雜的、冗余的網絡環(huán)境下,決策出一條最優(yōu)(Best)的路徑:
優(yōu)選具有最大Preferred-value的路由
優(yōu)選具有最大Local_Preference的路由
優(yōu)選起源于本地的路由
優(yōu)選AS-Path最短的路由
比較Origin:(IGP 》 EGP 》 Incomplete)
優(yōu)選MED最小的路由
優(yōu)選eBGP鄰居發(fā)來的路由
優(yōu)選到BGP下一跳的IGP Metric較小的路由
BGP負載均衡
優(yōu)選Cluster-List最短的路由
優(yōu)選RouterID最小的BGP鄰居發(fā)來的路由
優(yōu)選peer ip地址最小的鄰居發(fā)來的路由
實驗環(huán)境介紹
IP地址規(guī)劃如圖所示,設備互聯(lián)IP采用10.1.xy.x/24的編址,x及y為設備編號。這種編址方式能夠在實驗過程中更好地觀察現象。同時所有的設備配置Loopback0接口,IP為x.x.x.x/32,其中x為設備編號。這個接口只作為設備RouterID以及建立IBGP鄰居關系時使用。
AS345中,R3、R4、R5運行一個IGP:OSPF,在OSPF中,各設備宣告自己的直連接口以及Loopback0接口所在網段,但R3不在接口GE0/0/0口上激活OSPF,R5不在GE0/0/1上激活OSPF,這兩個直連鏈路視為AS外的鏈路,不將其所在網段引入到OSPF中。
各設備的BGP連接情況如下:
其中,IBGP鄰居關系的建立基于Loopback0口,EBGP鄰居關系的建立基于直連物理接口。
初始化配置注:以下羅列的設備配置中,省略設備接口IP地址的配置。
R1的配置如下:
[R1]bgp100
[R1-bgp]router-id1.1.1.1
[R1-bgp]peer10.1.13.3as-number345
R2的配置如下:
[R1]bgp200
[R1-bgp]router-id2.2.2.2
[R1-bgp]peer10.1.25.5as-number345
R3的配置如下:
[R3]ospf1router-id3.3.3.3
[R3-ospf-1]area0.0.0.0
[R3-ospf-1-area-0.0.0.0]network10.1.34.30.0.0.0
[R3-ospf-1-area-0.0.0.0]network3.3.3.30.0.0.0
[R3-ospf-1-area-0.0.0.0]quit
[R3-ospf-1]quit
[R3]bgp345
[R3-bgp]router-id3.3.3.3
[R3-bgp]peer10.1.13.1as-number100
[R3-bgp]peer4.4.4.4as-number345
[R3-bgp]peer4.4.4.4connect-interfaceloopback0
[R3-bgp]peer4.4.4.4next-hop-local#R3對R4執(zhí)行next-hop-local
[R3-bgp]quit
R4的配置如下:
[R4]ospf1router-id4.4.4.4
[R4-ospf-1]area0.0.0.0
[R4-ospf-1-area-0.0.0.0]network10.1.34.40.0.0.0
[R4-ospf-1-area-0.0.0.0]network10.1.45.40.0.0.0
[R4-ospf-1-area-0.0.0.0]network4.4.4.40.0.0.0
[R4-ospf-1-area-0.0.0.0]quit
[R4-ospf-1]quit
[R4]bgp345
[R4-bgp]router-id4.4.4.4
[R4-bgp]peer3.3.3.3as-number345
[R4-bgp]peer3.3.3.3connect-interfaceloopback0
[R4-bgp]peer5.5.5.5as-number345
[R4-bgp]peer5.5.5.5connect-interfaceloopback0
[R4-bgp]quit
R5的配置如下:
[R5]ospf1router-id5.5.5.5
[R5-ospf1]area0.0.0.0
[R5-ospf-1-area-0.0.0.0]network10.1.45.50.0.0.0
[R5-ospf-1-area-0.0.0.0]network5.5.5.50.0.0.0
[R5-ospf-1-area-0.0.0.0]quit
[R5-ospf-1]quit
[R5]bgp345
[R5-bgp]router-id5.5.5.5
[R5-bgp]peer10.1.25.2as-number200
[R5-bgp]peer4.4.4.4as-number345
[R5-bgp]peer4.4.4.4connect-interfaceloopback0
[R5-bgp]peer4.4.4.4next-hop-local#R5對R4執(zhí)行next-hop-local
[R5-bgp]quit
上述配置完成后,基本的實驗環(huán)境就搭建好了,接下去我們開始逐條驗證BGP的選路規(guī)則,每個選路規(guī)則的驗證過程中都會增加一些配置用于驗證,在一條選路規(guī)則驗證完成后,將設備的配置恢復成我們現在所完成的配置,再驗證下一條規(guī)則。
規(guī)則詳解及實驗驗證優(yōu)選具有最大Preferred_value的路由
規(guī)則描述
當一臺路由器學習到關于同一個路由前綴的多條BGP路由時,首先會比較這些路由在路由器本地的Preferred_value值,優(yōu)選擁有最大Preferred_value值的路由。
Preferred_value屬性回顧
Preferred_value是一個華為私有的路徑屬性,可以理解為該路由的權重值。范圍是0-65535,默認值為0,越大越優(yōu)先。這個值的作用范圍是本路由器(不傳遞),該值既不會被包含在update消息中,也不會傳遞給任何BGP鄰居。
規(guī)則驗證
現在我們在R1和R2上各配置一個Loopback1接口,配置IP地址:100.0.1.1/24,然后將這條路由network進BGP。
R1的配置如下:
[R1]interfaceloopback1
[R1-loopback1]ipaddress100.0.1.124
[R1-loopback1]quit
[R1]bgp100
[R1-bgp]network100.0.1.024
[R1-bgp]quit
R2的配置如下:
[R2]interfaceloopback1
[R2-loopback1]ipaddress100.0.1.124
[R2-loopback1]quit
[R2]bgp200
[R2-bgp]network100.0.1.024
[R2-bgp]quit
如此一來,R1將會傳遞BGP路由100.0.1.0/24給R3,而R3從自己的eBGP鄰居R1學習到的這條路由也會更新給R4;同理R5也會將學習自eBGP鄰居R2的路由100.0.1.0/24更新給R4,那么對于R4來說就同時從R3及R5學習到100.0.1.0/24的路由,R4將如何優(yōu)選?現在,我們希望通過操控路由的Preferred_valuel值來讓R4優(yōu)選R5傳遞過來的路由。
在R4上配置上述命令,事實上是將R5傳遞過來的所有路由的preferred-value都設置為10,而R3傳遞過來的路由的preferred-value則在本地賦予默認值0,這么一對比,當然是優(yōu)選R5所傳遞過來的路由了。但是這個方法“顆粒度”太大,如果我們只是想針對特定的路由設置preferred-value呢?例如:
在R1及R2上新增100.0.2.0/24網段并注入BGP。R1、R2的新增配置這里不再贅述。
那么實現上圖描述的需求,R4的配置可以變更成:
[R4]ipip-prefix1permit100.0.1.024
[R4]ipip-prefix2permit100.0.2.024
[R4]route-policyRP1permitnode10
[R4-route-policy]if-matchip-prefix1
[R4-route-policy]applypreferred-value10#設置所匹配路由的Preferred_value
[R4]route-policyRP1permitnode20#匹配其他路由
[R4]route-policyRP2permitnode10
[R4-route-policy]if-matchip-prefix2
[R4-route-policy]applypreferred-value10
[R4]route-policyRP2permitnode20
bgp345
peer3.3.3.3route-policyRP1import
peer5.5.5.5route-policyRP2import
注意:上述配置中route-policy RP1 permit node 20及route-policy RP2 permit node 20必須配置,因為route-policy隱含deny any,因此如果這兩個node不加的話,相當于是只放行node 10中match住的路由。完成配置后:
[R4]displaybgprouting-table
BGPLocalrouterIDis4.4.4.4
Statuscodes:*-valid,>-best,d-damped,
h-history,i-internal,s-suppressed,S-Stale
Origin:i-IGP,e-EGP,?-incomplete
TotalNumberofRoutes:4
NetworkNextHopMEDLocPrfPrefValPath/Ogn
*>i100.0.1.0/243.3.3.3010010100i
*i5.5.5.501000200i
*>i100.0.2.0/245.5.5.5010010200i
*i3.3.3.301000100i
我們看到,在R4上,100.0.1.0/24的路由,優(yōu)選的是R3傳遞過來的;100.0.2.0/24的路由,優(yōu)選的是R5傳遞過來的。這就實現了我們的需求。事實上還可以進一步查看路由的詳細信息,例如查看100.0.1.0/24這條路由:
[R4]displaybgprouting-table100.0.1.0
BGPlocalrouterID:4.4.4.4
LocalASnumber:345
Paths:2available,1best,1select
BGProutingtableentryinformationof100.0.1.0/24:#路徑1
From:3.3.3.3(3.3.3.3)
RouteDuration:00h01m43s
RelayIPNexthop:10.1.34.3
RelayIPOut-Interface:GigabitEthernet0/0/0
Originalnexthop:3.3.3.3
Qosinformation:0x0
AS-path100,originigp,MED0,localpref100,pref-val10,valid,internal,best,select,
active,pre255,IGPcost1#best字樣表示本路徑被優(yōu)選
Notadvertisedtoanypeeryet
BGProutingtableentryinformationof100.0.1.0/24:#路徑2
From:5.5.5.5(5.5.5.5)
RouteDuration:00h01m43s
RelayIPNexthop:10.1.45.5
RelayIPOut-Interface:GigabitEthernet0/0/1
Originalnexthop:5.5.5.5
Qosinformation:0x0
AS-path200,originigp,MED0,localpref100,pref-val0,valid,internal,pre255,IGPcost
1,notpreferredforPreVal#這里說明了本路徑沒被優(yōu)選的原因:Pre_Val值
Notadvertisedtoanypeeryet
OK,完成了規(guī)則一的測試后,我們將用于驗證本條規(guī)則的相關配置刪除(恢復到本實驗的初始化配置),繼續(xù)看下一條規(guī)則。
- 優(yōu)選具有最大Local_Pref的路由
規(guī)則描述
當一臺BGP路由器學習到關于同一個路由前綴的多條BGP路由時,首先會比較這些路由在本地的Preferred_value值,優(yōu)選擁有最大Preferred_value值的路由。如果路由的Preferred_value值都相等,則比較各自攜帶的Local_preference值,優(yōu)選具有最大Local_preference值的路由。
Local_Preference屬性回顧
Local_preference是公認自決屬性,值越大越優(yōu)先。Local_Preference值只能在IBGP Peer之間傳遞,不能在EBGP Peer之間傳遞。本地始發(fā)的路由默認Local_Preference值為100。可用bgp default local-preference 修改默認值。
BGP路由器在向其EBGP鄰居發(fā)送路由更新時,不能攜帶LP屬性,但是對方會在本地為這條路由賦一個默認值,也就是100,然后再傳遞給自己的IBGP鄰居。
本地network及重發(fā)布的路由,LP默認100,并能在AS內向其他IBGP鄰居傳輸,傳輸過程中除非部署策略,否則LP不變。
規(guī)則驗證
現在實驗環(huán)境恢復成初始化環(huán)境(刪除上一個選路規(guī)則驗證所做的配置)。在R1及R2上都配置Loopback1口,IP為100.0.1.1/24,兩臺路由器都將這個子網network進BGP。
R1的配置如下:
[R1]interfaceloopback1
[R1-loopback1]ipaddress100.0.1.124
[R1-loopback1]quit
[R1]bgp100
[R1-bgp]network100.0.1.024
[R1-bgp]quit
R2的配置如下:
[R2]interfaceloopback1
[R2-loopback1]ipaddress100.0.1.124
[R2-loopback1]quit
[R2]bgp200
[R2-bgp]network100.0.1.024
[R2-bgp]quit
我們要通過操控Local_Preference讓R4優(yōu)選R3傳遞過來的100.0.1.0/24路由。那么可以在R3上對R4做export方向的策略,修改路由的LP值,將該值設置為200;而R5這頭則保持默認,也就是100。如此一來在R4上,關于100.0.1.0/24的兩條BGP路徑,首先Preferred_Value值相等,那么繼續(xù)比較Local_Preference,優(yōu)選值更大的,因此來自R3的路由被優(yōu)選。
R3的配置變更如下:
[R3]ipip-prefix1permit100.0.1.024
[R3]route-policyRPpermitnode10
[R3-route-policy]if-matchip-prefix1
[R3-route-policy]applylocal-preference200
[R3]route-policyRPpermitnode20
[R3-route-policy]quit
[R3]bgp345
[R3-bgp]peer4.4.4.4route-policyRPexport
在R4上驗證一下:
[R4]displaybgprouting-table
BGPLocalrouterIDis4.4.4.4
Statuscodes:*-valid,>-best,d-damped,
h-history,i-internal,s-suppressed,S-Stale
Origin:i-IGP,e-EGP,?-incomplete
TotalNumberofRoutes:4
NetworkNextHopMEDLocPrfPrefValPath/Ogn
*>i100.0.1.0/243.3.3.302000100i
*i5.5.5.501000200i
從上面的輸出可以看到關于100.0.1.0/24的路由,R4優(yōu)選了來自R3的路由更新。
完成了本規(guī)則的驗證后,我們將用于驗證本條規(guī)則的相關配置刪除,恢復成初始化配置。繼續(xù)看下一條規(guī)則。
- 優(yōu)選起源于本地的路由
規(guī)則描述
如過此前兩條規(guī)則都無法做出決策,例如兩條BGP路由的 Preferred_value 及Local_preference值都相等。則優(yōu)選本地生成的路由(本地生成的路由優(yōu)先級高于從鄰居學來的路由)。
本地生成的路由包括通過network命令或import-route命令引入的路由、手動聚合路由和自動聚合路由。
- 優(yōu)選聚合路由(聚合路由優(yōu)先級高于非聚合路由)。
- 通過aggregate命令生成的手動聚合路由的優(yōu)先級高于通過summary automatic命令生成的自動聚合路由。
- 通過network命令引入的路由的優(yōu)先級高于import-route命令引入的路由。
- 優(yōu)選AS-Path最短的路由
規(guī)則描述
如果前面幾條規(guī)則都無法決策出最優(yōu)路徑,則比較路由的AS_PATH,優(yōu)選AS_PATH最短的路由。
規(guī)則驗證
現在實驗環(huán)境恢復成初始化配置,同樣讓R1及R2引入100.0.1.0/24路由。我們要通過操控AS_PATH屬性讓R4優(yōu)選R5傳遞過來的100.0.1.0/24路由。那么可以在R3上對R1做import方向的策略,使得R3將R1發(fā)送過來的路由在其原有AS_PATH值的基礎上,增加一個100的AS號,使得路由的AS_PATH長度加長。如此一來在R4上,關于100.0.1.0/24的這兩條BGP路徑,首先Prefered_Value相等,那么繼續(xù)比較Local_Preferecne,也相等,再往下比較,都不是本地始發(fā)的路由,那么就比較到了本條規(guī)則:優(yōu)選AS_PATH最短的,因此R4將優(yōu)選R5傳遞過來的100.0.1.0/24路由。
R3的配置如下:
[R3]ipip-prefix1permit100.0.1.024
[R3]route-policyRPpermitnode10
[R3-route-policy]if-matchip-prefix1
[R3-route-policy]applyas-path100additive
[R3-route-policy]quit
[R3]route-policyRPpermitnode20
[R3-route-policy]quit
[R3]bgp345
[R3-bgp]peer10.1.13.1route-policyRPimport
完成配置后,在R4上驗證一下:
[R4]displaybgprouting-table
BGPLocalrouterIDis4.4.4.4
Statuscodes:*-valid,>-best,d-damped,
h-history,i-internal,s-suppressed,S-Stale
Origin:i-IGP,e-EGP,?-incomplete
TotalNumberofRoutes:2
NetworkNextHopMEDLocPrfPrefValPath/Ogn
*>i100.0.1.0/245.5.5.501000200i
*i3.3.3.301000100100i
從上面的輸出可以看到,R4優(yōu)選了R5傳遞過來的100.0.1.0/24路由。當然,可以進一步查看路由的詳細信息:
[R4]displaybgprouting-table100.0.1.0
BGPlocalrouterID:4.4.4.4
LocalASnumber:345
Paths:2available,1best,1select
BGProutingtableentryinformationof100.0.1.0/24:
From:5.5.5.5(5.5.5.5)
RouteDuration:00h06m45s
RelayIPNexthop:10.1.45.5
RelayIPOut-Interface:GigabitEthernet0/0/1
Originalnexthop:5.5.5.5
Qosinformation:0x0
AS-path200,originigp,MED0,localpref100,pref-val0,valid,internal,best,select,
active,pre255,IGPcost1
Notadvertisedtoanypeeryet
BGProutingtableentryinformationof100.0.1.0/24:
From:3.3.3.3(3.3.3.3)
RouteDuration:00h02m37s
RelayIPNexthop:10.1.34.3
RelayIPOut-Interface:GigabitEthernet0/0/0
Originalnexthop:3.3.3.3
Qosinformation:0x0
AS-path100100,originigp,MED0,localpref100,pref-val0,valid,internal,pre255,IGP
cost1,notpreferredforAS-Path#這里指出了本路徑沒有被優(yōu)選的原因。
Notadvertisedtoanypeeryet
當然,也可在R1上對R3做export方向的策略,只不過結果有所不同,可以自己觀察和分析一下現象和原因。
注意:
使用route-policy來修改BGP路由的AS_PATH:
- apply as-path xx additive 是在已有AS_PATH基礎上追加xx
- apply as-path xx overwrite 是將已有AS_PATH值替換(覆蓋)成xx
- apply as-path none overwrite 清空AS_PATH
使用route-policy來修改BGP路由的AS_PATH,在Cisco設備上只能在AS之間(EBGPpeer之間)執(zhí)行,因為as-path只會在離開AS的時候發(fā)生改變。我司設備則沒有這個限制,也就是說即使在IBGP peer之間應用策略來修改AS_PATH也是可以的。但是針對AS_PATH的改動必須嚴格謹慎。
執(zhí)行bestroute as-path-ignore命令后,BGP選路時,忽略AS_Path的比較,需慎用。BGP的路由防環(huán)很大程度上依賴于AS_PATH,因此任何對AS_PATH的策略在實施的時候都應該考慮周全。
- Origin(IGP > EGP > Incomplete)
規(guī)則描述
本規(guī)則比較origin code,優(yōu)選次序為:i > e > ?
規(guī)則驗證
現在,我們繼續(xù)將實驗環(huán)境恢復成初始化狀態(tài)。在這個規(guī)則的驗證中,在R1上,改用import-route的方式來注入100.0.1.0/24路由,R2則仍保持network的方式注入。
那么R1的配置變更如下
[R1]ipip-prefix1permit100.0.1.024
[R1]route-policyRPpermitnode10
[R1-route-policy]if-matchip-prefix1
[R1-route-policy]quit
[R1]bgp100
[R1-bgp]peer10.1.13.3as-number345
[R1-bgp]undonetwork100.0.1.024
[R1-bgp]import-routedirectroute-policyRP
或者使用route-policy來修改路由的origin屬性,同樣是修改R1的配置:
[R1]route-policyRPpermitnode10
[R1-route-policy]applyoriginincomplete
[R1]bgp100
[R1-bgp]peer10.1.13.3as-number345
[R1-bgp]network100.0.1.024route-policyRP
這 樣 一 來 R1引 入 的 100.0.1.0/24 的 路 由 origin 屬性 值 就 為 incomplete, 而 R2引 入 的100.0.1.0/24的路由origin屬性值為IGP。完成配置后驗證一下:
[R4]displaybgprouting-table
BGPLocalrouterIDis4.4.4.4
Statuscodes:*-valid,>-best,d-damped,
h-history,i-internal,s-suppressed,S-Stale
Origin:i-IGP,e-EGP,?-incomplete
TotalNumberofRoutes:2
NetworkNextHopMEDLocPrfPrefValPath/Ogn
*>i100.0.1.0/245.5.5.501000200i
*i3.3.3.301000100?
當然,可以進一步看詳細信息:
[R4]displaybgprouting-table100.0.1.0
BGPlocalrouterID:4.4.4.4
LocalASnumber:345
Paths:2available,1best,1select
BGProutingtableentryinformationof100.0.1.0/24:#路徑1
From:5.5.5.5(5.5.5.5)
RouteDuration:01h01m29s
RelayIPNexthop:10.1.45.5
RelayIPOut-Interface:GigabitEthernet0/0/1
Originalnexthop:5.5.5.5
Qosinformation:0x0
AS-path200,originigp,MED0,localpref100,pref-val0,valid,internal,best,select,active,pre255,IGPcost1
Notadvertisedtoanypeeryet
BGProutingtableentryinformationof100.0.1.0/24:#路徑2
From:3.3.3.3(3.3.3.3)
RouteDuration:00h03m11s
RelayIPNexthop:10.1.34.3
RelayIPOut-Interface:GigabitEthernet0/0/0
Originalnexthop:3.3.3.3
Qosinformation:0x0
AS-path100,originincomplete,MED0,localpref100,pref-val0,valid,interna
l,pre255,IGPcost1,notpreferredforOrigin#由于Origin為?因此輸給了路徑1
Notadvertisedtoanypeeryet
如此一來本條規(guī)則就驗證完成了。刪除用于驗證本條規(guī)則所做的配置,將各設備的配置恢復成實驗初始化配置,繼續(xù)看下一條規(guī)則。
- 優(yōu)選MED最小的路由
規(guī)則描述
如果前面的規(guī)則都無法做出決策。那么比較這些路由的MED,優(yōu)選擁有最小MED值的路由。
MED屬性
MED屬性為可選非傳遞屬性,值越小越優(yōu)先,一般用于AS之間影響B(tài)GP路由決策
規(guī)則詳解
BGP只比較來自同一個AS(不包括聯(lián)盟的子AS)的路由的MED值。即,只有兩條路由的AS_SEQUENCE(不包括AS_CONFED_SEQUENCE)屬性的第一個AS號相同時,BGP才會比較二者的MED值。
如果路由沒有MED屬性,BGP選路時將該路由的MED值按缺省值0來處理;執(zhí)行bestroutemed-none-as-maximum命令后,BGP選路時將該路由的MED值按最大值4294967295來處理。
執(zhí)行compare-different-as-med命令后,BGP將強制比較來自不同自治系統(tǒng)中的鄰居的路由的MED值。除非能夠確認不同的自治系統(tǒng)采用了同樣的IGP和路由選擇方式,否則不要使用compare-different-as-med命令(可能產生環(huán)路)。
執(zhí)行bestroute med-confederation命令后,只有當AS_Path中不包含外部AS號(不屬于聯(lián)盟的子AS),且AS_CONFED_SEQUENCE的第一個AS號相同時,才能比較MED值的大小。
執(zhí)行deterministic-med命令后,將消除路由接收順序對選路結果的影響。
規(guī)則驗證
針對本規(guī)則的驗證,我們將環(huán)境做了小小的變更,R2不再屬于AS200了,我們把他規(guī)劃到AS100,至于為什么,這里相信大家已經都想到了。R1、R2同時向AS345發(fā)布路由100.0.1.0/24,最終R4將學習到兩條更新。那么現在我們的需求是,通過操控MED值,讓R4優(yōu)選從R5更新過來的路由。方法很簡單,R5將100.0.1.0/24更新給R4,MED為默認值0,那么我們只要在R1更新路由給R3時,攜帶上MED=999,那么這條路由再經由R3更新給R4時,也會一并將MED攜帶,最終,R4將優(yōu)選MED小的路徑,也就是R5傳遞過來的路由。
R2及R5的配置變更這里就不再贅述了。
重點看R1的配置:
[R1]ipip-prefix1permit100.0.1.024
[R1]route-policyRPpermitnode10
[R1-route-policy]if-matchip-prefix1
[R1-route-policy]applycost999#設置MED值為999
[R1]bgp100
[R1-bgp]network100.0.1.024
[R1-bgp]peer10.1.13.3as-number345
[R1-bgp]peer10.1.13.3route-policyRPexport
完成上述配置后,仍然在R4上驗證一下:
[R4]displaybgprouting-table
BGPLocalrouterIDis4.4.4.4
Statuscodes:*-valid,>-best,d-damped,
h-history,i-internal,s-suppressed,S-Stale
Origin:i-IGP,e-EGP,?-incomplete
TotalNumberofRoutes:2
NetworkNextHopMEDLocPrfPrefValPath/Ogn
*>i100.0.1.0/245.5.5.501000100i
*i3.3.3.39991000100i
從上面的輸出可以看到,R4優(yōu)選了R5傳遞過來的100.0.1.0/24的路由。因為從R3傳遞過來的路由MED為999,更大。
到此本條規(guī)則就驗證完成了,現在刪除用于驗證本條規(guī)則的配置,將設備恢復成本實驗初始化配置。
- 優(yōu)選EBGP鄰居發(fā)來的路由
規(guī)則描述
經過前面幾條規(guī)則的比較如果BGP仍然無法決策出最優(yōu)路由,那么在本規(guī)則中比較路由的類型。相對于iBGP鄰居更新來的路由,BGP路由器將優(yōu)選eBGP鄰居傳來的路由。
規(guī)則驗證
為了驗證本條規(guī)則,我們在初始化配置的基礎上,在R3-R5之間建立一條iBGP的鄰居關系。這樣一來R3會將自己從R1學習到的BGP路由傳遞給iBGP鄰居R5,而R5又會從另一側學習到eBGP鄰居R2更新過來的100.0.1.0/24路由,那么R5將如何優(yōu)選呢?
變更的配置這里就不再贅述了,這里有一個小細節(jié)要注意,那就是R3別忘了要配置一條peer5.5.5.5 next-hop-local,否則R5自R3學習到的路由會不可用。完成配置后,我們在R5上觀察一下:
[R5]displaybgprouting-table
BGPLocalrouterIDis5.5.5.5
Statuscodes:*-valid,>-best,d-damped,
h-history,i-internal,s-suppressed,S-Stale
Origin:i-IGP,e-EGP,?-incomplete
TotalNumberofRoutes:2
NetworkNextHopMEDLocPrfPrefValPath/Ogn
*>100.0.1.0/2410.1.25.200100i
*i3.3.3.301000100i
從上面的輸出我們可以看到R5優(yōu)選了來自R2的路由,可以進一步查看路由的詳細信息:
[R5]displaybgprouting-table100.0.1.0
BGPlocalrouterID:5.5.5.5
LocalASnumber:345
Paths:2available,1best,1select
BGProutingtableentryinformationof100.0.1.0/24:
From:10.1.25.2(10.1.25.2)
RouteDuration:00h11m54s
DirectOut-interface:GigabitEthernet0/0/1
Originalnexthop:10.1.25.2
Qosinformation:0x0
AS-path100,originigp,MED0,pref-val0,valid,external,best,select,active,pre255
Advertisedtosuch2peers:
4.4.4.4
3.3.3.3
BGProutingtableentryinformationof100.0.1.0/24:
From:3.3.3.3(3.3.3.3)
RouteDuration:00h02m14s
RelayIPNexthop:10.1.45.4
RelayIPOut-Interface:GigabitEthernet0/0/0
Originalnexthop:3.3.3.3
Qosinformation:0x0
AS-path100,originigp,MED0,localpref100,pref-val0,valid,internal,pre255,IGP
cost2,notpreferredforpeertype#這里指出了為何本路徑不是best
Notadvertisedtoanypeeryet
- 優(yōu)選到BGP下一跳IGP Metric較小的路由
規(guī)則描述
如果一臺路由器收到關于同一個路由前綴的多跳BGP路徑更新,并且經過前面幾個規(guī)則都無法做出決策,并且這些路徑的Next_hop屬性值都不相同,那么在本規(guī)則中,將比較路由器到這些Next_hop的IGP度量值,優(yōu)選到Next_hop度量值最小的那條BGP路由。
規(guī)則驗證一
仍然是將實驗環(huán)境恢復到初始化狀態(tài)。然后在R1、R2上開設Loopback1接口并配置IP地址:100.0.1.0/24,隨后兩者都把這條直連路由network進BGP。R1將路由100.0.1.0/24更新給了R3,R3將這條路由又更新給了R4,由于我們在R3上對R4做了next-hop-local,因此R4在收到這條路由時路由的Next_hop屬性值為3.3.3.3;同理,R4從R5收到的100.0.1.0/24路由的Next_hop為5.5.5.5。而3.3.3.3及5.5.5.5對于R4而言又是通過OSPF學習到的。并且此刻在R4上,關于3.3.3.3及5.5.5.5的OSPF metric都是相等的。
現在我們在圖中所述的R4連接R3的接口上增加配置:
[R4]interfacegigabitEthernet0/0/0
[R4-GigabitEthernet0/0/0]ospfcost10
如此一來,R4到達3.3.3.3這條路由的OSPF度量值就發(fā)生了變化,變得比到5.5.5.5的 OSPF度量值要更大,因此最終本規(guī)則將讓R4做出路由優(yōu)選的決策,優(yōu)選R5傳遞過來的100.0.1.0/24路由。
[R4]displaybgprouting-table100.0.1.0
BGPlocalrouterID:4.4.4.4
LocalASnumber:345
Paths:2available,1best,1select
BGProutingtableentryinformationof100.0.1.0/24:
From:5.5.5.5(5.5.5.5)
RouteDuration:00h20m06s
RelayIPNexthop:10.1.45.5
RelayIPOut-Interface:GigabitEthernet0/0/1
Originalnexthop:5.5.5.5
Qosinformation:0x0
AS-path100,originigp,MED0,localpref100,pref-val0,valid,internal,best,select,
active,pre255,IGPcost1#IGPcost=1,這的IGPcost事實上是R4學習到的
關于5.5.5.5的ospf路由的cost,可以在R4的路由表中查看。
Notadvertisedtoanypeeryet
BGProutingtableentryinformationof100.0.1.0/24:
From:3.3.3.3(3.3.3.3)
RouteDuration:00h11m25s
RelayIPNexthop:10.1.34.3
RelayIPOut-Interface:GigabitEthernet0/0/0
Originalnexthop:3.3.3.3
Qosinformation:0x0
AS-path100,originigp,MED0,localpref100,pref-val0,valid,internal,pre255,IGPcost
10,notpreferredforIGPcost#到3.3.3.3的IGPcost變成了10,比到5.5.5.5的IGP
cost要大,因此PK輸了。
Notadvertisedtoanypeeryet
規(guī)則驗證二
現在我們進一步測試,將網絡環(huán)境再做點調整:
- R3-R5之間增加一條iBGP的連接;
- R4配置為路由反射器RR,R3是她的Client;
- R2取消network 10.0.1.0/24路由進BGP。
R3增加如下配置:
[R3]bgp345
[R3-bgp]peer5.5.5.5as-number345
[R3-bgp]peer5.5.5.5connect-interfaceloopback0
[R3-bgp]peer5.5.5.5next-hop-local
R4增加如下配置:
[R4]bgp345
[R4-bgp]peer5.5.5.5reflect-client
R5增加如下配置:
[R5]bgp345
[R5-bgp]peer3.3.3.3as-number345
[R5-bgp]peer3.3.3.3connect-interfaceloopback0
這樣一來,100.0.1.0/24的路由首先是R3通過iBGP連接直接傳給了R5,另一方面又經由路由反射器R4反射給了R5,因此R5將同時從R3及R4學習到100.0.1.0/24的BGP路由。這時候R5怎么決策?注意,由于這兩條BGP路由Next_Hop屬性值都是3.3.3.3,因此明顯,本規(guī)則無法做出決策,因為兩條路由的Next_hop都相等。只能到下一條規(guī)則中PK。
- BGP負載均衡
關于BGP負載均衡
嚴格的說,第十條并不能算得上是路由優(yōu)選的規(guī)則,但是也將影響B(tài)GP路由器最終的路由表裝載過程,因此也在這里一并探討。當前面的9條選路原則都無法優(yōu)選出最優(yōu)路由時,并且又在BGP進程下面配置了maximum load-balancing [ ebgp | ibgp ] num,那么將執(zhí)行等價負載均衡,也就是將這些等代價的BGP路徑都放進IP路由表使用。
值得注意的是,雖然這些BGP等價路徑在本地路由表中都被裝載,最終卻仍只有一條BGP路徑是preferred優(yōu)選的。只有優(yōu)選的BGP路由才會被發(fā)送給自己的BGP鄰居。
具備等價負載均衡條件的候選路徑需滿足如下條件:
- 必須有相同的路徑屬性,如weight、LP、AS_PATH(不僅是長度,整個AS_PATH包括AS號都要相同)、origin code、MED及IGP的Distance值
- 每一條路徑的下一跳都不相同
注意事項
- 在公網中到達同一目的地的路由形成負載分擔時,系統(tǒng)會首先判斷最優(yōu)路由的類型。若最優(yōu)路由為iBGP路由則只是IBGP路由參與負載分擔,若最優(yōu)路由為eBGP路由則只是eBGP路由參與負載分擔,即公網中到達同一目的地的iBGP和eBGP路由不能形成負載分擔。
- 如果到達目的地址存在多條路由,但是這些路由分別經過了不同的AS,缺省情況下,這些路由不能形成負載分擔。如果用戶需要這些路由參與負載分擔,就可以執(zhí)行l(wèi)oad-balancing as-path-ignore命令。配置load-balancing as-path-ignore命令后會改變路由參與負載分擔的條件,路由形成負載分擔時不再比較AS-Path屬性,配置時需要慎重考慮。
- load-balancing as-path-ignore命令和bestroute as-path-ignore命令互斥,不能同時使能。
iBGP等價負載均衡
R4同時從IBGP鄰居R3、R5收到100網段的路由,在不執(zhí)行任何策略的情況下,這些路由通過BGP決策的規(guī)則1-8都無法抉擇,并且所有的路徑屬性都相等,具備實施等價負載均衡的條件,命令如下 :
[R4]bgp345
[R4-bgp]maximumload-balancingibgp2
完成配置后,在R4上驗證一下:
[R4-bgp]displaybgprouting-table100.0.1.0
BGPlocalrouterID:4.4.4.4
LocalASnumber:345
Paths:2available,1best,2select
BGProutingtableentryinformationof100.0.1.0/24:
From:3.3.3.3(3.3.3.3)
RouteDuration:00h11m54s
RelayIPNexthop:10.1.34.3
RelayIPOut-Interface:GigabitEthernet0/0/0
Originalnexthop:3.3.3.3
Qosinformation:0x0
AS-path12,originigp,MED0,localpref100,pref-val0,valid,internal,best,select,
active,pre255,IGPcost1#注意雖然配置了maximum-paths,路由表中關于100網段出現
了負載均衡,但R4在BGP優(yōu)選動作仍然只會優(yōu)選一條BGP路由,并只將這條路由更新給
BGP鄰居
Notadvertisedtoanypeeryet
BGProutingtableentryinformationof100.0.1.0/24:
From:5.5.5.5(5.5.5.5)
RouteDuration:00h11m20s
RelayIPNexthop:10.1.45.5
RelayIPOut-Interface:GigabitEthernet0/0/1
Originalnexthop:5.5.5.5
Qosinformation:0x0
AS-path12,originigp,MED0,localpref100,pref-val0,valid,internal,select,active,pre
255,IGPcost1,notpreferredforrouterID
Notadvertisedtoanypeeryet
再看一下R4的全局路由表發(fā)生了什么變化:
[R4-bgp]displayiprouting-tableprotocolbgp
RouteFlags:R-relay,D-downloadtofib
------------------------------------------------------------------------------
Publicroutingtable:BGP
Destinations:1Routes:2
BGProutingtablestatus:
Destinations:1Routes:2
Destination/MaskProtoPreCostFlagsNextHopInterface
100.0.1.0/24IBGP2550RD3.3.3.3GigabitEthernet0/0/0
IBGP2550RD5.5.5.5GigabitEthernet0/0/1
我們看到,兩條BGP路徑都被R4裝載進了路由表。這就是IBGP等價負載均衡。而如果不配置上面的maximum load-balancing ibgp 2命令,默認情況下,R4只會將被優(yōu)選的路徑拿出來放到路由表中。
eBGP等價負載均衡
- 優(yōu)選Cluster-List 最短的路由
規(guī)則描述
如果經過前面的規(guī)則,如果依然無法決策出最優(yōu)路由,那么將進一步比較候選路由的Cluster_list屬性,優(yōu)選最短Cluster_list的路由。
規(guī)則驗證
首先將用于驗證上一個規(guī)則的配置刪除,把設備恢復成本實驗的初始化配置?,F在我們將網絡環(huán)境再做點調整:
- R3-R5之間增加一條iBGP的連接;
- R4配置為路由反射器RR,R3是她的Client;
- R2取消network 10.0.1.0/24路由進BGP。
R3增加如下配置:
[R3]bgp345
[R3-bgp]peer5.5.5.5as-number345
[R3-bgp]peer5.5.5.5connect-interfaceloopback0
[R3-bgp]peer5.5.5.5next-hop-local
R4增加如下配置:
[R4]bgp345
[R4-bgp]peer5.5.5.5reflect-client
R5增加如下配置:
[R5]bgp345
[R5-bgp]peer3.3.3.3as-number345
[R5-bgp]peer3.3.3.3connect-interfaceloopback0
這樣一來,100.0.1.0/24的路由首先是R3通過iBGP連接直接傳給了R5,另一方面又經由路由反射器R4反射給了R5,因此R5將同時從R3及R4學習到100.0.1.0/24的BGP路由:
displaybgprouting-table100.0.1.0
BGPlocalrouterID:10.1.45.5
LocalASnumber:345
Paths:2available,1best,1select
BGProutingtableentryinformationof100.0.1.0/24:#路徑1
From:3.3.3.3(10.1.13.3)
RouteDuration:00h10m10s
RelayIPNexthop:10.1.45.4
RelayIPOut-Interface:GigabitEthernet0/0/0
Originalnexthop:3.3.3.3
Qosinformation:0x0
AS-path100,originigp,MED0,localpref100,pref-val0,valid,internal,best
,select,active,pre255,IGPcost2
Notadvertisedtoanypeeryet
BGProutingtableentryinformationof100.0.1.0/24:#路徑2
From:4.4.4.4(10.1.34.4)
RouteDuration:00h09m01s
RelayIPNexthop:10.1.45.4
RelayIPOut-Interface:GigabitEthernet0/0/0
Originalnexthop:3.3.3.3
Qosinformation:0x0
AS-path100,originigp,MED0,localpref100,pref-val0,valid,internal,pre
255,IGPcost2,notpreferredforClusterList
Originator:10.1.13.3
Clusterlist:10.1.34.4
Notadvertisedtoanypeeryet
最終R5將優(yōu)選來自R3的路由,而不是R4的路由。因為R3更新過來的路由Cluster_List長度為0,而R4更新過來的路由Cluster_List長度為1。
到此本條規(guī)則就驗證成功了?,F在清除用于驗證本條規(guī)則所做的配置,將設備還原成本實驗的初始化配置。
- 優(yōu)選RouterID最小的BGP鄰居發(fā)來的路由
規(guī)則描述
如果經過前面的規(guī)則都無法決策出最優(yōu)路徑,則優(yōu)選RouterID最小的BGP鄰居發(fā)來的路由。
規(guī)則驗證
在R1及R2上都發(fā)布100.0.1.0/24的路由。那么在不做任何配置的情況下,R4將學習到R3及R5傳遞過來的兩條路由。我們什么策略都不做,然后再R4上觀察一下:
從上面的輸出我們可以看到,R4已經優(yōu)選了R3傳遞過來的路由,因此規(guī)則1-10都無法做出決策,R4最終比較更新這兩條路由的鄰居的RouterID,顯然R3的RouterID3.3.3.3要小于R5的RouterID 5.5.5.5,因此R3傳遞過來的路由被優(yōu)選。
規(guī)則補充
規(guī)則補充:如果路由攜帶Originator屬性,則本規(guī)則的PK過程中將比較Originator的大?。ú辉俦容^Router ID),并優(yōu)選Originator最小的路由。
在上面的拓撲環(huán)境中:
- R1、R2、R3、R4屬于同一個AS1234,AS內運行了OSPF,路由器都宣告各自的Loopback0接口,IP為x.x.x.x/32,x為設備編號。
- R1-R4;R4-R3;R1-R2;R2-R3基于Loopback建立IBGP鄰居關系。
- R1配置為RR,R4是它的Client;R3配置為RR,R4是它的Client。
- 在R4上引入44.44.44.0/24進BGP。
那么R1收到R4更新過來的路由,將其反射給R2并攜帶上Originator及Cluster_list屬性值。R3同理。那么最終R2將分別從R1和R3都學習到44.44.44.0/24的路由,R2會如何優(yōu)選?
- Pre_val相等
- Local_Pref相等
- 都不是起源于本地
- AS-Path一樣長
- Origin code都是i
- MED相等
- 都是IBGP peer發(fā)來的
- NH相等
- Cluster-list等長
- 比較BGP鄰居的RouterID,注意,這里由于兩條路由都攜帶了originator屬性,因此在這一輪的PK中,就不是比較R1和R3的RouterID了,而是比較這兩條路由的Originator屬性值。結果,由于這兩條路由的起源都是R4,因此Originator值相等,都是4.4.4.4,所以本條規(guī)則仍無法決策。
- 那么只能在往下比較了,請看下文。
- 優(yōu)選peer ip地址最小的鄰居發(fā)來的路由
規(guī)則描述
如果經過前面的一系列規(guī)則仍然無法優(yōu)選出最佳路由,那么最后一步將比較鄰居的IP地址。這個IP地址是在BGP路由器上的BGP配置進程匯總,peer命令后所指的那個IP。
規(guī)則驗證
仍然看上一個小節(jié)最后的實驗,在R2上,最終將比較R1及R3的peer ip,在R2上指R1時,我們用的命令是peer 1.1.1.1 as-number 1234;指R3時用的命令是peer 3.3.3.3 as-number 1234,因此R1的地址要小于R3,故優(yōu)選R1傳遞過來的44.44.44.0/24路由。
[R2]disbgpro44.44.44.0
BGProutingtableentryinformationof44.44.44.0/24:
From:1.1.1.1(1.1.1.1)
……
AS-pathNil,originigp,MED0,localpref100,pref-val0,valid,internal,best,select,
active,pre255,IGPcost2
Originator:4.4.4.4
Clusterlist:1.1.1.1
BGProutingtableentryinformationof44.44.44.0/24:
From:3.3.3.3(3.3.3.3)
……
AS-pathNil,originigp,MED0,localpref100,pref-val0,valid,internal,pre
255,IGPcost2,notpreferredforpeeraddress
Originator:4.4.4.4
Clusterlist:3.3.3.3
?審核編輯:郭婷
-
路由器
+關注
關注
22文章
3693瀏覽量
113426 -
狀態(tài)機
+關注
關注
2文章
491瀏覽量
27457
原文標題:BGP進階:BGP 綜合實驗一
文章出處:【微信號:網絡技術干貨圈,微信公眾號:網絡技術干貨圈】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論