文章目錄
- 一、路由器BGP路由的處理過程
- 控制平面和轉發平面
- 選路工具
- 二、BGP的選路順序
- 選路的前提
- 選路順序
- 三、Wight屬性選路原則
- 規則9與規則11的潛移默化
- 使用Weight值進行選路
- 直接更改Weight值進行選路
- 配合使用route-map進行選路
- 四、BGP鄰居建立配置
一、路由器BGP路由的處理過程
路由器對BGP路由的處理過程,簡單來說就是BGP中的選路過程
控制平面和轉發平面
一、控制平面 :是從起點到目的地所使用的IGP,BGP等路由協議從而控制產生路由表,VPNV4路由表,標簽轉發表等
二、轉發平面 :也叫做數據平面,根據剛剛產生的路由表,VPNV4路由表,標簽轉發表去進行數據的從起點到目的地的轉發
選路工具
在 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 地址路由器通告的路由
這么多一串順序我們將會逐一進行講解,本文章所分享的是排位第一個的屬性:Weight屬性
三、Wight屬性選路原則
1、Wight權重值,Cisco獨有的屬性,但是在銳捷和華為等一系列廠商設備里都有,其原因是Weight屬性僅在本地有效,是傳不出去給其它的BGP Peer的。
2、銳捷的Weight在本地默認值是32768,并且不可修改;Weight選路原則是Weight值越大越優先,BGP Peer學到的路由屬性應該為0
規則9與規則11的潛移默化
如圖3-1,當我們的將IP,bgp鄰居等配置都完成后,其實我們的選路順序已經生效了
文末提供配置過程
在我們沒有進行配置屬性的選路之前,BGP 路由已經自動產生了選路
如圖3-2,從圖中BGP 的路由表上可以看出來R4去往1.1.1.1和1.1.2.1的下一跳都是走2.2.2.2的
這是因為我們在什么屬性都相同的情況下,BGP 選路順序的第9條和第11條就會自動生效
規則9優選BGP Router-ID長度較短的路由
規則11優選較小的Peer地址路由器通告的路由
對于R4而言,很明顯,BGP Router-ID 較小的是R2這條路徑,所以才自動進行了選路
使用Weight值進行選路
直接更改Weight值進行選路
如果說我們想讓R4走R3這條路呢?即去往1.1.1.1和1.1.2.1的下一跳是3.3.3.3
我們可以在R4通過直接針對R3,對他傳來的路由進行修改。下述命令就是在R4上配置,使得R3傳來的路由,R4認為其Weight值為10
如圖3-3,很明顯,與各個沒有修改Weight值先比,現在的下一跳變成了3.3.3.3,說明了我們的目的達成了
R4(config)#router bgp 200 //進入BGP進程
R4(config-router)#nei 3.3.3.3 weight 10 //將BGP Peer 3.3.3.3發過來的路由的Weight值都改為10
R4(config-router)#ex
缺陷:但是這樣使用命令直接修改有一個弊端,那就是只走R4-R3這條路的話,R4-R2那條路就已經完全的空閑了下來,只有R3出現了災難的情況在啟用R4-R2的路徑
如圖3-4,也就是說,我們這樣做只起到了主備的作用,沒有起到鏈路負載均衡的作用,非常地浪費帶寬
這樣的情況可以通過我們之前提到過的策略機,也就是route-map解決,起到鏈路負載均衡的作用
配合使用route-map進行選路
如圖3-5,進行負載的分別結果是1.1.1.1–>R3–>R1,1.1.2.1–>R2–>R1
根據Weight值越大越優先的原則,我們可以將對于R2而言,在R4上修改1.1.2.1的Weight值為10
可以將對于R3而言,在R4上修改1.1.1.1的Weight值為10
在R4上增加配置命令如下
R4(config)#access-li 10 per 1.1.1.1 0.0.0.0 //匹配出1.1.1.1的感興趣流
R4(config)#access-li 20 per 1.1.2.1 0.0.0.0 //匹配出1.1.2.1的感興趣流
R4(config)#route-map to_R2 per 10 //創建route-map名為to_R2
R4(config-route-map)#mat ip add 20 //設置一個條件,匹配出ACL 20的流量,類似于編程里面的if語句
R4(config-route-map)#set weight 10 //當match的條件成立的時候,將weight值設為10,if成立后就執行什么的語句
R4(config-route-map)#ex
R4(config)#route-map to_R2 per 20
R4(config-route-map)#ex //由于route-map末尾有一跳deny any,所以我們這里要寫一個空route-map,用來匹配那幾個感興趣流之外的路由
R4(config)#route-map to_R3 per 10
R4(config-route-map)#mat ip add 10
R4(config-route-map)#set weight 10
R4(config-route-map)#ex
R4(config)#route-map to_R3 per 20
R4(config-route-map)#ex
R4(config)#router bgp 200
R4(config-router)#nei 2.2.2.2 route-map to_R2 in //將route-map應用到BGP進程中
R4(config-router)#nei 3.3.3.3 route-map to_R3 in
R4(config-router)#ex
Question:我們可以試想,如果沒有那條空的route-map會這么樣的?
Answer:那么將會出現R4上只收到1.1.1.1和1.1.2.1這兩條路由,卻把中間進行傳輸路由的路由條目給拒絕的,所以說,我們在配置route-map的時候,習慣性的還是需要加一條空路由
如圖3-6,通過查看R4的BGP路由表可以知道,1.1.1.1和1.1.2.1的下一跳都發生了改變
并且也符合我們的預想,實現了鏈路上的負載均衡
四、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