文章目錄
- 一、路由器BGP路由的處理過程
- 控制平面和轉發平面
- 選路工具
- 二、BGP的選路順序
- 選路的前提
- 選路順序
- 三、AS-Path屬性選路原則
- AS-Path屬性特性
- AS-Path管進還是管出呢?
- 使用AS-Path對進本AS的路由進行選路
- 驗證AS-Path不接收帶本AS號的路由
- 四、BGP鄰居建立配置
一、路由器BGP路由的處理過程
路由器對BGP路由的處理過程,簡單來說就是BGP中的選路過程
控制平面和轉發平面
一、控制平面 :是從起點到目的地所使用的IGP,BGP等路由協議從而控制產生路由表,VPNV4路由表,標簽轉發表等,由這些表去控制我們的FIB表,也就是數據轉發表
二、轉發平面 :也叫做數據平面,根據剛剛產生的路由表,VPNV4路由表,標簽轉發表從而產生一個數據轉發表(FIB表)去進行數據的從起點到目的地的轉發,
如圖1-1,
選路工具
在 BGP 選路中有兩個重要的概念:
一、策略機 : 相當于route-map,能夠對屬性值進行修改,影響路由表的生成(在控制平面上:是一個過程),從而影響用戶的數據轉發
①輸入策略機:路由進入本地時的route-map,我們可以理解為 in 方向,會影響自身和下游的路由器
②輸出策略機:路由離開本地時的route-map,我們可以理解為 out 方向,只會影響下游的路由器,不會影響自身
二、路由決策 : 根據剛剛的策略機(route-map)選擇出最佳的路徑,并且將最佳的路徑添加到路由表中,簡單來說就是去哪里,哪條路比較方便或近
如圖1-2,就是BGP路由的處理過程
二、BGP的選路順序
選路的場景主要面對同一個目的網絡存在多種去的方式
如圖2-1,對于R3來說,去往192.168.10.0/24有去往R1或R2兩條路可以選
選路的前提
我們選路的前提是路由的下一跳可達,如果說路由的下一跳不可達的話,那么選路將不具有任何意義
選路順序
-
我們之前學過的那么多個BGP屬性都是能夠應用到BGP路由的選路當中的,但是也是存在依照屬性進行選路的順序的,并且如果較為前的屬性已經選出最佳路徑,那么后面的屬性將不會影響到屬性
-
例如:路由器已經依照Local Preference選出了最佳的路徑,而MED值無論在怎么進行修改都是無濟于事的
選路順序如下
- 優選Weight值較高的;
- 優選Local Preference值較高的;
- 優選AS-Path長度較短的;
- 按照Origin屬性為IGP、EGP、Incomplete類型的路由進行選路;(IGP > EGP > Incomplete)
- 優選MED值較小的路由
- 按照EBGP路由,接著是聯盟EBGP路由,最后是IBGP路由的順序
- 優越最近的IGP鄰居通告的路由
- 執行等價負載均衡(默認是沒有開啟等價負載均衡的)
- 優選BGP Router-ID 小的 Peer 通告的路由
- 優選Cluster-list長度較短的路由
- 優選較小的 Peer 地址路由器通告的路由
這么多一串順序我們將會逐一進行講解,本文章所分享的是排位第三個的屬性,AS-Path屬性,該屬性即可進行選路們還具有防環的作用
講解Weight屬性的文章:【路由交換方向IE認證】BGP選路原則之Weight屬性-CSDN博客
講解AS-Path屬性的文章:【路由交換方向IE認證】BGP選路原則之Local Preference屬性-CSDN博客
三、AS-Path屬性選路原則
AS-Path屬性特性
AS-Path優選原則,AS-Path長度越短越優先,在AS-Path選路當中,我們的策略機依然是使用route-map
如圖3-1,由于AS-Path屬性的不只含有選路這一個屬性,還可以進行路由的防環
所以我們在調整AS-Path屬性長度進行選路的時候,盡量地不要去減少AS-Path的長度,這樣就產生了AS-Path的第一個調整原則,①:只增不減
除此之外,AS-Path的route-map在使用時,in方向或是out方向,都會對結果造成不同
如圖3-2,當route-map使用在in方向的時候,則 AS 號添加到原始AS號的左側;當route-map使用在out方向的時候,則 AS 號添加到原始AS號的右側
由于AS-Path的來源是經過的各個AS-Path,所以對于IBGP Peer和EBGP Peer之間傳遞的AS-Path是否發生改變是不一樣的
結論是:IBGP Peer 之間傳遞路由的時候,由于AS-Path沒有發生了變化,AS-Path值并不會發生改變;EBGP Peer 之間傳遞路由的時候,由于AS-Path發生了變化,所以相對應的AS-Path也會發生變化
如圖3-3,當R1傳遞給R2路由時,由于是EBGP Peer 關系,所以路由中的AS-Path屬性會發生變化;當R2傳遞路由給R4時,由于是IBGP Peer關系,所以傳遞的路由中AS-Path屬性不會發生變化
在特殊的情況下,我們不想讓AS-Path屬性進行選路,而是只讓其發揮防環的作用,可以通過下述命令來使AS-Path屬性不參加選路
R1>en
R1#conf
R1(config)#router bgp 100
R1(config-router)#bgp bestpath as-path ignore //使得AS-Path不參與選路
R1(config-router)#ex
AS-Path管進還是管出呢?
我們所說的管進還是管出,是相對于本AS來說的,仔細回想起來,我們的AS-Path屬性是公認必遵屬性,可以傳播到BGP網絡中的任意一個角落,相比于Local Preference,不需要考慮跨AS能否傳遞的問題,所以我們AS-Path屬性是能夠管進也能管出的
如圖3-4與圖3-5,分別是AS-Path進入本公司和AS-Path出本公司的選路示意圖
使用AS-Path對進本AS的路由進行選路
在實際的生產環境中,由于我們能進行配置的只有本公司的設備,所以無法在R1上進行配置,我們的AS-Path選路需要在R2或者R3上進行
使用AS-Path進行選路需求:① 控制R1進本公司的選路;② 控制R1訪問4.4.3.4走R3,控制R1訪問4.4.4.4走R2(奇數走奇數,偶數走偶數);
思路:根據AS-Path長度越小越優先的原則,我們要讓R3發出4.4.4.4路由中的AS-Path屬性更長,讓R2發出4.4.3.4路由中的AS-Path屬性更長,如圖3-7,調整AS-Path值如圖所示
但我們回過頭來一想,4.4.4.4是默認走的就是R2這條路徑,所以,我們并不是非常低有必要去更改R2對于4.4.4.4向R1發出的AS-Path值,如圖3-8
這就極大的減少了我們配置的工作量,現在只需要在R2上對于4.4.3.4向R1發出的 AS-Path值進行修改
如圖3-9,prepend表示對整個路由的AS-Path值的增加,replace表示對整個路由的AS-Path值的替換
在R2上進行配置操作
R2(config)#access-li 10 per 4.4.4.4 0.0.0.0
R2(config)#route-map AS-P per 10
R2(config-route-map)#mat ip add 10
R2(config-route-map)#set as-path prepend 200
R2(config-route-map)#ex
R2(config)#route-map AS-P per 20
R2(config-route-map)#ex
R2(config)#router bgp 200
R2(config-router)#nei 12.1.1.1 route-map AS-P out
R2(config-router)#ex
如圖3-10,在R1上執行show ip bgp的命令,可以發現選路情況已經發生了變化,并且已經達到了預期;在標注處也顯示AS-Path的長度修改成功
驗證AS-Path不接收帶本AS號的路由
如圖3-11,我們可以在route-map中設置發出路由的AS 號中增加 AS 100,在R1上觀察BGP路由表會發生什么變化
在R2上的配置如下
R2>en
R2#conf
R2(config)#route-map AS-P per 10
R2(config-route-map)#set as-path prepend 100
R2(config-route-map)#ex
在R1上執行show ip bgp的命令,觀察BGP路由表,如圖3-12,發現對于4.4.4.4這條路由來說,已經中斷了與R2的鄰居關系
四、BGP鄰居建立配置
附上配置過程
R1
Router(config)#hos R1
R1(config)#int g0/0
R1(config-if-GigabitEthernet 0/0)#ip add 12.1.1.1 24
R1(config-if-GigabitEthernet 0/0)#ex
R1(config)#int g0/1
R1(config-if-GigabitEthernet 0/1)#ip add 12.1.2.1 24
R1(config-if-GigabitEthernet 0/1)#ex
R1(config)#int lo0
R1(config-if-Loopback 0)#ip add 1.1.1.1 32
R1(config-if-Loopback 0)#ex
R1(config)#int lo1
R1(config-if-Loopback 1)#ip add 1.1.2.1 32
R1(config-if-Loopback 1)#ip add 1.1.2.1 32
R1(config-if-Loopback 1)#ex
R1(config)#router bgp 100
R1(config-router)#bgp router-id 1.1.1.1
R1(config-router)#nei 12.1.1.2 remote-as 200
R1(config-router)#nei 12.1.2.3 remote-as 200
R1(config-router)#netw 1.1.1.1 mask 255.255.255.255
R1(config-router)#netw 1.1.2.1 mask 255.255.255.255
R1(config-router)#ex
R2
R2>en
R2#conf
R2(config)#hos R2
R2(config)#int g0/0
R2(config-if-GigabitEthernet 0/0)#ip add 12.1.1.2 24
R2(config-if-GigabitEthernet 0/0)#ex
R2(config)#int g0/1
R2(config-if-GigabitEthernet 0/1)#ip add 12.1.3.2 24
R2(config-if-GigabitEthernet 0/1)#ex
R2(config)#int lo0
R2(config-if-Loopback 0)#ip add 2.2.2.2 32
R2(config-if-Loopback 0)#ex
R2(config)#router ospf 10
R2(config-router)#rou 2.2.2.2
Change router-id and update OSPF process! [yes/no]:yes
R2(config-router)#netw 2.2.2.2 0.0.0.0 area 0
R2(config-router)#netw 12.1.3.0 0.0.0.255 area 0
R2(config-router)#ex
R2(config)#router bgp 200
R2(config-router)#bgp router-id 2.2.2.2
R2(config-router)#nei 12.1.1.1 remote-as 100
R2(config-router)#nei 4.4.4.4 remote-as 200
R2(config-router)#nei 4.4.4.4 update-sou lo0
R2(config-router)#nei 4.4.4.4 next-hop-self
R2(config-router)#ex
R3
Router>en
Router#conf
Router(config)#hos R3
R3(config)#int g0/0
R3(config-if-GigabitEthernet 0/0)#ip add 12.1.2.3 24
R3(config-if-GigabitEthernet 0/0)#ex
R3(config)#int g0/1
R3(config-if-GigabitEthernet 0/1)#ip add 12.1.4.3 24
R3(config-if-GigabitEthernet 0/1)#ex
R3(config)#int lo0
R3(config-if-Loopback 0)#ip add 3.3.3.3 32
R3(config-if-Loopback 0)#ex
R3(config)#router ospf 10
R3(config-router)#rou 3.3.3.3
Change router-id and update OSPF process! [yes/no]:yes
R3(config-router)#netw 3.3.3.3 0.0.0.0 area 0
R3(config-router)#netw 12.1.4.0 0.0.0.255 area 0
R3(config-router)#ex
R3(config)#router bgp 200
R3(config-router)#bgp router-id 3.3.3.3
R3(config-router)#nei 12.1.2.1 remote-as 100
R3(config-router)#nei 4.4.4.4 remote-as 200
R3(config-router)#nei 4.4.4.4 update-sou lo0
R3(config-router)#nei 4.4.4.4 next-hop-self
R3(config-router)#ex
R4
R4>en
R4#conf
R4(config)#hos R4
R4(config)#int g0/0
R4(config-if-GigabitEthernet 0/0)#ip add 12.1.3.4 24
R4(config-if-GigabitEthernet 0/0)#ex
R4(config)#int g0/1
R4(config-if-GigabitEthernet 0/1)#ip add 12.1.4.4 24
R4(config-if-GigabitEthernet 0/1)#ex
R4(config)#int lo0
R4(config-if-Loopback 0)#ip add 4.4.4.4 32
R4(config-if-Loopback 0)#ex
R4(config)#int lo1
R4(config-if-Loopback 1)#ip add 4.4.3.4 32
R4(config-if-Loopback 1)#ex
R4(config)#router ospf 10
R4(config-router)#rou 4.4.4.4
Change router-id and update OSPF process! [yes/no]:yes
R4(config-router)#netw 4.4.4.4 0.0.0.0 area 0
R4(config-router)#netw 12.1.3.0 0.0.0.255 area 0
R4(config-router)#netw 12.1.4.0 0.0.0.255 area 0
R4(config-router)#ex
R4(config)#router bgp 200
R4(config-router)#nei 2.2.2.2 remote-as 200
R4(config-router)#nei 2.2.2.2 update-sou lo0
R4(config-router)#nei 3.3.3.3 remote-as 200
R4(config-router)#nei 3.3.3.3 update-sou lo0
R4(config-router)#netw 4.4.4.4 mask 255.255.255.255
R4(config-router)#net 4.4.3.4 mask 255.255.255.255
R4(config-router)#ex