BGP的13條選路原則
BGP路由器將路由通告給鄰居後,每個BGP鄰居都會進行路由優選,路由選擇有三種情況
① 該路由是到達目的地的唯一路由,直接優選
② 對到達同一目的地的多條路由,優選優先級最高的
③ 對到達同一目的地且具有相同優先級的多條路由,必須用更細的原則去選擇一條最優的
一般來說,BGP計算路由優先級的規則如下
① 丟棄下一跳不可達的路由
② 優選Preference_Value值最高的路由(私有屬性,僅本地有效)
③ 優選本地優先級(Local_Preference)最高的路由
④ 優選手動聚合>自動聚合>network>import>從對等體學到的
⑤ 優選AS_Path短的路由
⑥ 起源類型IGP>EGP>Incomplete
⑦ 對於來自同一AS的路由,優選MED值小的
⑧ 優選從EBGP學來的路由(EBGP>IBGP)
⑨ 優選AS內部IGP的Metric最小的路由
⑩ 優選Cluster_List最短的路由
⑪ 優選Orginator_ID最小的路由
⑫ 優選Router_ID最小的路由器發佈的路由
⑬ 優選具有較小IP地址的鄰居學來的路由
1.Preferred-Value數值
Preference_Value是BGP的私有屬性(華爲私有屬性),Preference_Value相當於BGP選路規則中Weight值,僅在本地路由器生效。Preference_Value值越大,越優先,默認缺省值爲0 只能改變自己的入向選路
默認情況下華爲這邊會選擇router ID小的作爲自己的最優下一跳
<R1>display bgp routing-table
BGP Local router ID is 1.1.1.1
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 8
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 44.44.44.44/32 2.2.2.2 0 100 0 200i
* i 3.3.3.3 0 100 0 200i
① 匹配44.44.44.44的條目 ---方法就是acl或者前綴列表(建議用它)
[R1]display ip ip-prefix 44
Prefix-list 44
Permitted 0
Denied 0
index: 10 permit 44.44.44.44/32
[R1]
② 創建路由策略
#
route-policy 44 permit node 10 ---這個就是我們需要進行關聯的方式
if-match ip-prefix 44 ---這個就是我們的條件
apply preferred-value 200 ---這個就是我們動作
#
③ 在BGP視圖下面進行調用
[R1-bgp]peer 3.3.3.3 route-policy 44 import 只能調用在入方向
④ 驗證(現象就是R1到達我們44.44.44.44的路由下一跳指向的就是R3)
[R1]display bgp routing-table
BGP Local router ID is 1.1.1.1
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 7
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 44.44.44.44/32 3.3.3.3 0 100 200 200i
* i 2.2.2.2 0 100 0 200i
[R1]
小結:Pre-Value最大,Preference_Value值越大,越優先,默認缺省值爲0
2. Local_Preference
Local_Pref屬性僅在IBGP鄰居之間有效,不通告給其他AS。它表明路由器的BGP優先級,用於判斷流量離開AS時的最佳路由。一般用來控制我本區域流量怎麼出去,默認情況下Local-Pref值爲100 該數值越大 優先級越高
① 匹配44.44.44.44的條目 ---方法就是acl或者前綴列表(建議用它)
[R3]display ip ip-prefix 44
Prefix-list 44
Permitted 0
Denied 0
index: 10 permit 44.44.44.44/32
[R1]
② 創建路由策略
#
route-policy 44 permit node 10 ---這個就是我們需要進行關聯的方式
if-match ip-prefix 44 ---這個就是我們的條件
apply local-preference 200 ---這個就是我們動作
#
③ 在BGP視圖下面進行調用
[R3-bgp]peer 1.1.1.1 route-policy 44 export
此時在BGP裏面調用的時候,可以調用在我們3個方向上面
第一個方向:在R3的G0/0/0接口上進行調用,但這個調用的話,只能在G0/0/0的import方向
第二個方向:在R3的G0/0/1接口的進行調用,但這個調用的話,只能在G0/0/1的export方向
第三個方向:在R1的G0/0/1接口的進行調用,但這個調用的話,只能在G0/0/1的import方向
不能調用在R4的export方向上面(因爲Local-preference只能在本AS內進行傳遞的)
3.路由聚合
聚合路由的優先級:手動聚合>自動聚合
自動聚合
只能對引入import-route的BGP路由進行聚合 如果說通過import-route到BGP的話,此時它的屬性是 ?
手動聚合
手動聚合可以在BGP路由表中的路由進行聚合 如果說通過我們network宣告到我們BGP當中的話 此時它的屬性是 i(可以對引入路由和network宣告路由都生效)
如果BGP路由表中既有引入的路由又有network宣告的路由時,只能採用手動聚合實現
驗證手動聚合大於自動聚合
R4上面的44.44.44.44的路由條目他是network宣告的 此時自動聚合識別不了,我可以在R4上面進行修改我們44網段的起源屬性,通過我們前綴列表和router-policy,應用在我們R4的一個出方向上面 R2就可以對44.44.44.44路由進行自動聚合 R3上面開啓的是手動聚合(手動聚合可以對network宣告的路由和通過路由引入宣告的路由進行聚合)因爲R1這邊收到從R2這邊自動聚合的條目和R3這邊手動聚合條目,所以說 R1這邊到達這條聚合路由的下一跳就是R3
自動聚合
① 默認情況下,BGP是沒有開啓自動聚合的
② 自動聚合只對引入的路由生效,對network路由不生效
③ 配置自動聚合後,成員明細路由將被抑制掉
④ 發現這些明細前面打了一個S(Suppressed)
⑤ 其他路由器學習到的就是自動聚合的路由
① 在R1設備上創建loopback接口,用前綴列表匹配R1的loopback接口,將其引入到BGP協議中
[R1]display ip ip-prefix 1
Prefix-list 1
Permitted 3
Denied 10
index: 10 permit 100.100.2.0/24
index: 20 permit 100.100.3.0/24
index: 30 permit 100.100.4.0/24
② 創建路由策略
[R1]display route-policy 1
Route-policy : 1
permit : 10 (matched counts: 16)
Match clauses :
if-match ip-prefix 1
③ 在BGP視圖下面進行調用
#
bgp 100
import-route direct route-policy 1
summary automatic 開啓我們自動聚合(注意啊,一定是對引入的路由進行聚合,network進來的路由是不生效的)
#
return
④ 在R1查看實驗現象
[R1]display bgp routing-table
BGP Local router ID is 1.1.1.1
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 9
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 100.0.0.0 127.0.0.1 0 ?
s> 100.100.2.0/24 0.0.0.0 0 0 ?
s> 100.100.3.0/24 0.0.0.0 0 0 ?
s> 100.100.4.0/24 0.0.0.0 0 0 ?
[R1]
所以R2這邊學習到的路由就是我們聚合的路由
<R2>display bgp routing-table
BGP Local router ID is 2.2.2.2
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 5
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 100.0.0.0 1.1.1.1 100 0 ?
<R2>
手動聚合
在R1設備在自動手動聚合路由 刪除自動聚合的命令
① detail-suppressed
注意:後面的detail-suppressed參數是把明細給抑制,如果不加的話,會把明細路由和聚合路由都傳過去
[R1-bgp]aggregate 100.100.0.0 16 detail-suppressed
② as-set
as-set信息在避免路由環路時很重要,因爲它記錄了被聚合路由所經過的AS
[R1-bgp]aggregate 100.100.0.0 16 as-set
③ Suppress-policy
關鍵字suppress-policy能產生聚合路由,但抑制指定路由的通告,可以使用route-policy和if-match子句有選擇的抑制一些具體路由,其他具體路由仍被通告(抑制聚合中的某些路由)
④ Origin-policy
使用關鍵字origin-policy僅選擇符合route-policy的具體路由來生成聚合路由(只要有這條路由信息,我才能產生聚合路由)
路由聚合產生的問題
如果路由聚合後攜帶所有明細路由經過的AS信息,當明細路由發生頻繁震盪時,聚合路由也可能受其影響頻繁刷新。因此,聚合路由是否攜帶丟失的AS_Path信息,需要設計者綜合考慮網絡環境
4.Network大於import引入
把4.4.4.4的路由在RT4發佈給RT2的時候,把屬性更改爲incomplete(也就是引入的方式)看下RT1到達4.4.4.4的路徑選擇
R1默認情況下根據13條選路原則,會選擇router id較小的進行選路,我們讓前3條選路原則不變,我可以改變第四條選路原則,因爲默認情況下,R4的44.44.44.44/32通過network方式發佈到我們的BGP裏面的,它的默認起源屬性是network(也就是我們的i) 我可以改變R2發往R1的起源屬性 那R1變成通過import學習到的路由
1.匹配44.44.44.44的條目 ---方法就是acl或者前綴列表(建議用它)
[R2]display ip ip-prefix 44
Prefix-list 44
Permitted 2
Denied 1
index: 10 permit 44.44.44.44/32
2.創建路由策略
[R2]display route-policy
Route-policy : 44
permit : 10 (matched counts: 1)
Match clauses :
if-match ip-prefix 44
Apply clauses :
apply origin incomplete
3.在BGP視圖下面進行調用
#
bgp 100
router-id 2.2.2.2
peer 1.1.1.1 as-number 100
peer 1.1.1.1 connect-interface LoopBack0
#
ipv4-family unicast
undo synchronization
peer 1.1.1.1 enable
peer 1.1.1.1 route-policy 44 export
#
return
[R2-bgp]
注意:
① 可以調用在R2的export出方向(G0/0/0)
② 可以調用在R2的import方向(G0/0/1)
③ 可以調用在R1的import方向(G0/0/0)
④ 可以調用在R4的export方向上(G0/0/1)
5.AS_Path
收到同一條路由裏面AS路徑最短的優先
RTA從RTB收到100.0.0.0/24的路由時,AS_Path爲(2,4),RTA從RTC收到100.0.0.0/24的路由時,AS_Path爲(3,5,4)。規定AS_Path越短(記錄的AS編號越少),路徑越優,因此RTA會優選從RTB收到的100.0.0.0/24的路由
AS路徑屬性可以防止BGP環路
以RTE爲例,通過BGP發佈100.0.0.0/24的路由,路由可能通過RTE->RTB->RTC->RTD->RTE形成環路。爲了防止環路的產生,RTE在收到RTD發來的路由時會檢查AS_Path(該路由攜帶的)屬性,如果發現該路由的AS_Path中包含自己的AS號,則丟棄該路由
R1這邊默認情況下根據13條選路原則,會選擇router id較小的進行選路,我們讓前4條選路原則不變,改變第5條選路原則,在R2發往R1的44.44.44.44網段路由的時候 我可以增加一些AS-path屬性進來,可以通過一下兩種方式進行增加
① Additive:Append to original As Number追加as-path屬性 在原有的基礎上進行增加
② Overwrite:Overwrite original As Number覆蓋as-path屬性 把原有的AS-path給直接弄沒
- 匹配44.44.44.44的條目 ---方法就是acl或者前綴列表(建議用它)
[R2]display ip ip-prefix 44 Prefix-list 44 Permitted 4 Denied 2 index: 10 permit 44.44.44.44/32
2.創建路由策略
[R2]display route-policy 44 Route-policy : 44 permit : 10 (matched counts: 2) Match clauses : if-match ip-prefix 44 Apply clauses : apply as-path 1000 2000 3000 additive
3.在BGP視圖下面進行調用
# bgp 100 router-id 2.2.2.2 peer 1.1.1.1 as-number 100 peer 1.1.1.1 connect-interface LoopBack0 peer 3.3.3.3 as-number 100 peer 3.3.3.3 connect-interface LoopBack0 peer 24.1.1.4 as-number 200 # ipv4-family unicast undo synchronization network 22.22.22.22 255.255.255.255 peer 1.1.1.1 enable peer 1.1.1.1 route-policy 44 export peer 1.1.1.1 next-hop-local peer 3.3.3.3 enable peer 3.3.3.3 next-hop-local peer 24.1.1.4 enable # return [R2-bgp]
注意:
① 可以調用在R2的export出方向(G0/0/0)
② 可以調用在R2的import方向(G0/0/1)
③ 可以調用在R1的import方向(G0/0/0)
④ 可以調用在R4的export方向上(G0/0/1)6.Origin
Origin屬性定義路徑信息的來源,標記一條路由是怎麼成爲BGP路由的
Origin的3種屬性
① i 表明BGP路由通過network命令注入
② e 表明BGP路由是從EGP學來的,EGP協議在現網中很難見到,但可以通過路由策略將路由的Origin屬性修改爲e
③ ? 即Incomplete表明BGP路由通過其它方式學到路由信息,如使用import命令引入的路由
3種Origin屬性的優先級爲:i>e>Incomplete(?)所以network宣告的路由大於通過import-router引入的路由7.MED
MED(Multi-Exit-Discriminator)屬性僅在相鄰兩個AS之間傳遞,收到此屬性的AS不會再將其通告給任何其他第三方AS,用於判斷流量進入AS時的最佳路由
當一個運行BGP的路由器通過不同的EBGP鄰居獲得目的地址相同但下一跳不同的多條路由時,在其它條件相同的情況下,將優先選擇MED值較小者作爲最佳路由,其默認值爲0。 MED值較小者作爲最佳路由,其默認值爲0 - 匹配44.44.44.44的條目 ---方法就是acl或者前綴列表(建議用它)
[R2]display ip ip-prefix 44 Prefix-list 44 Permitted 5 Denied 2 index: 10 permit 44.44.44.44/32
2.創建路由策略
[R2]display route-policy 44 Route-policy : 44 permit : 10 (matched counts: 3) Match clauses : if-match ip-prefix 44 Apply clauses : apply cost 1000 #
3.在BGP視圖下面進行調用
bgp 100 router-id 2.2.2.2 peer 1.1.1.1 as-number 100 peer 1.1.1.1 connect-interface LoopBack0 peer 3.3.3.3 as-number 100 peer 3.3.3.3 connect-interface LoopBack0 peer 24.1.1.4 as-number 200 # ipv4-family unicast undo synchronization network 22.22.22.22 255.255.255.255 peer 1.1.1.1 enable peer 1.1.1.1 next-hop-local peer 3.3.3.3 enable peer 3.3.3.3 next-hop-local peer 24.1.1.4 enable peer 24.1.1.4 route-policy 44 import # return [R2-bgp]
注意:
① 可以調用在R2的export方向(G0/0/0)
② 可以調用在R2的import方向(G0/0/1)
③ 可以調用在R1的import方向(G0/0/0)
④ 可以調用在R4的export方向(G0/0/1)8.EBGP優於IBGP路由
根據選路原則,RTA會優選從EBGP鄰居學來的路由
因爲R2可以從R4收到44網段ebgp的路由條目 R2也可以從R3收到IBGP的條目(因爲我R2和R3建立的是IBGP的BGP關係)如果說前面7條選路原則是一樣的話 會比較我們的第8條選擇的原則 所以R2到達44網段的路由要的是EBGP傳遞過來的
[R2]display bgp routing-table
BGP Local router ID is 2.2.2.2
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 6
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 44.44.44.44/32 24.1.1.4 0 0 200i
* i 3.3.3.3 0 100 0 200i
[R2]
9.IGP的開銷值
通過調整OSPF Cost,使RTA選擇R3路徑訪問44.44.44.44/32
將R1的G0/0/0接口的ospf開銷修改爲2
#
interface GigabitEthernet0/0/0
ip address 12.1.1.1 255.255.255.0
#
return
[R1-GigabitEthernet0/0/0]ospf cost 2
[R1]display ip routing-table 44.44.44.44
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1
Destination/Mask Proto Pre Cost Flags NextHop Interface
44.44.44.44/32 IBGP 255 0 RD 3.3.3.3 GigabitEthernet
0/0/1
查看R1得BGP路由表
[R1]display bgp routing-table
BGP Local router ID is 1.1.1.1
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 6
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 44.44.44.44/32 3.3.3.3 0 100 0 200i
* i 2.2.2.2 0 100 0 200i
[R1]
10.Router-ID值
默認情況下 如果前面所有的選路原則都不變的話 那麼會選擇一個router ID較小的作爲自己的選路方式
<R1>display bgp routing-table
BGP Local router ID is 1.1.1.1
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 6
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 44.44.44.44/32 2.2.2.2 0 100 0 200i
* i 3.3.3.3 0 100 0 200i
<R1>