發布時間:2020-10-12
“運維實戰家”專欄,從技術到實踐,
和您聊聊運維的那些事兒,講述運維人的“昨天、今天和明天”
作者:大峰
運營商服務中心
BGP由于支持基于策略的路由選路,協議易擴展,且支持數量更多的路由條目,在骨干網實際生產環境中被廣泛部署。通常在骨干網生產網絡中,使用ISIS或者OSPF作用域內IGP協議,使域內所有業務匯聚設備、核心設備環回地址可達。在此基礎上再部署BGP進行業務路由承載,但由于BGP自身選路原則原因,在骨干網存在冗余節點時可能會產生非預期的網絡流量模型。使用傳統的“虛擬下一跳”方式進行處理時即破壞了BGP的強大的路由控制能力,同時也增加了網絡對虛擬下一跳的IP的規劃、部署操作,大大增加了網絡運維的復雜度。但在rfc7911出現后,通過BGP ADD-PATH特性可自動實現等價BGP路由,不再需要小伙伴們進行虛擬下一跳IP規劃與部署。
前不久,網工小銳在一次骨干網集成項目就遇到了這樣的頭疼問題,接下來,小銳現身說法,分享下如何利用ADD-PATH特性解決難題。
BGP在骨干網中是如何部署的?
某日,小銳接到個令他興奮的項目:某省級數據中心集成項目,從數據中心出口、匯聚、接入均由他負責設計、實施。這讓他學習多年的BGP、ISIS終于迎來了實戰,心里無比激動,開心......
此時在他的腦海里想起了“它”的好,強大的路由控制能力,在骨干網中被廣泛部署,協議易擴展,支持數量更多的路由條目。于是小銳在與客戶溝通后,在數據中心的出口層面設計成以下圖一的拓撲。
圖一
如圖一,除數據中心CR外,其他均為現有網絡。接入網CR,省獨立RR、省BR兼RR設備均運行在同一管理域內ISIS level 2中。接入網CR使用口字型拓撲與省BR互聯。
數據中心CR小銳設計為使用雙V字型拓撲與省BR兼RR設備互聯。由于網絡處于演進階段,現階段數據中心CR只與省獨立RR形成IBGP鄰居關系,且數據中心CR為BGP RR client角色。接入網CR與省BR兼RR設備形成IBGP鄰居關系,且接入網CR作為BGP RR client角色。省獨立RR與省BR兼RR設備形成IBGP鄰居關系,不存在BGP RR client角色。省BR作用出口角色向全省發布ISIS默認路由。
此時小銳心中滿是歡喜,并得意的聯系客戶進行測試。第一個測試項是模擬業務路由承載測試。
在數據中心CR1、CR2同時發布相同業務網段路由,所有BGP選路屬性均為默認值。在小銳腦海里這預期效果就是接入網兩臺CR的BGP路由表中存在兩條分別指向數據中心CR1、CR2的業務網段路由,簡直……
客戶通過接入網CR查看數據中心業務網段路由時,下一跳均為數據中心CR1的loopback地址。小銳聽到這事實,簡直不敢相信,這么優秀的設計怎么還會出現幺蛾子!
經過多次對方案推敲與現網驗證,小銳始終沒找到問題原因。于是小銳帶著小憂傷向老師傅請教這“幺蛾子”的由來。
老師傅看到圖一拓撲,了解模擬業務路由承載測試結果后,嘴角微微上揚,道出其中的奧秘。
由于業務路由在宣告時未對BGP選路屬性進行修改,導致省獨立RR1、RR2在BGP選路原則作用下只優選router-id較小的BGP鄰居所宣告業務網段作為路由(數據中心CR-1的router-id比CR-2小)。從而會導致省BR01、BR02、接入網CR1、CR2訪問數據中心業務流量均由數據中心CR1承載。這個“幺蛾子”浪費了數據中心CR2鏈路帶寬,同時流量模型也不是客戶所期望的。
小伙伴會想到在省獨立RR配置“maximum-paths”,使省獨立RR形成等價的業務路由,從而省獨立RR會先向省BR宣告兩個不同下一跳數據中心業務路由。但“maximum-paths”只是影響BGP路由加載到路由表數量,并未能影響BGP路由選路原則。BGP向鄰居宣告其BGP路由表中BGP路由,并非設備路由表中路由。
小銳一副豁然開朗的樣子,并繼續向老師傅請教解決方案。
很久以前的解決方案
為解決BGP選路原則帶來的“幺蛾子”,老師傅通過虛擬下一跳方式為小銳進行解答。
如圖1所示拓撲,數據中心CR1、CR2與省獨立RR配置BGP鄰居時,通過route-map將數據中心CR1、CR2所宣告業務網段路由下一跳修改為同一個“虛擬IP”。且這個“虛擬IP”同時在數據中心CR1、CR2上配置并通過IGP協議將其宣告到全網,從而使省BR1、BR2學習到數據中心業務路由時下一跳均為“虛擬IP”,“虛擬IP”通過路由表遞歸查找下一跳出接口為省BR與數據中心CR1、CR2互聯端口。進而實現了訪問數據中心流量可以在數據中心CR1、CR2間形成等價路徑。以下為實現虛擬下一跳大致步驟與配置:
! 數據中心CR1、CR2配置虛擬下一跳IP
ip route 172.16.1.1 255.255.255.255 null 0
! 數據中心CR1、CR2配置修改路由宣告下一跳策略
route-map set_vnh permit 10
set next-hop 172.16.1.1
! 數據中心CR1、CR2通過IGP將虛擬IP宣告到全網
ip prefix-list s2i seq 5 permit 172.16.1.1/32
!
route-map red_s2i permit 10
match ip address prefix-list s2i
!
router isis
...
redistribute static route-map red_s2i
! 數據中心CR1、CR2針對省獨立RR配置修改業務路由下一跳route-map
router bgp 100
...
address-family ipv4
network 9.9.9.9 mask 255.255.255.255
neighbor 192.168.12.1 route-map set_vnh out
看似通過虛擬下一跳“完美”的解決了此次的“幺蛾子”問題,但它破壞了BGP強大的路由控制能力。在此場景數據中心CR1、CR2無法再通過BGP選路屬性進行路由控制,因為業務路由下一跳IP始終為“虛擬IP”。
小銳尋思著還有沒其他更優的解法。老師傅接著往下說......
ADD-PATH特性解決方案
直到rfc7911的出現,BGP同時宣告同一前綴的多條路徑成為可能。rfc7911定義了BGP一種新的capability用于同時宣告多個下一跳的相同BGP路由。通過在BGP鄰居間協商add-path capability,路由宣告時會將BGP路由表較優BGP路由同時發送到支持add-path capability的BGP鄰居。以下為根據客戶網絡修改為add-path方式實現BGP等價路由關鍵配置:
add-path實現機制只將BGP路由表中較優路由同時發送到BGP鄰居,其并未破壞BGP路由選路原則。如果需要路由表中生成多條等價BGP路由,還需考慮BGP選路原則與增加“maximum-paths”配置。需要注意“add-path”為BGP一種capability。如果實際生產網絡中BGP已形成穩定BGP鄰居并承載業務路由,啟用此特性將會導致BGP會話重建,BGP鄰居間重新協商雙方BGP capability。
! 省獨立RR配置啟用add-path特性
router bgp 100
...
!
address-family ipv4
bgp additional-paths select all best 2
...
neighbor 7.7.7.7 additional-paths send
neighbor 7.7.7.7 advertise additional-paths best 2
neighbor 8.8.8.8 additional-paths send
neighbor 8.8.8.8 advertise additional-paths best 2
! 省BR配置啟用add-path特性,并配置IBGP多路徑負載均衡功能
router bgp 100
...
!
address-family ipv4
...
neighbor 5.5.5.5 additional-paths receive
neighbor 6.6.6.6 additional-paths receive
maximum-paths ibgp 2
技術總結
BGP固有強大路由控制能力,在實現部署時可能會產生非預期網絡流量模型。小伙伴們在實際部署時需多加留意控制平面與數據平面相關表項哦。同時BGP也是Internet一個重要的路由協議,相關RFC標準在不斷更新,大家也要保持學習,更新自身專業知識。
