你不知道的BGP新特性:“ADD-PATH” |运维实战家

资讯文章 241


“运维实战家”专栏,从技术到实践,

和您聊聊运维的那些事儿,讲述运维人的“昨天、今天和明天”



作者:大峰

运营商服务中心


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标准在不断更新,大家也要保持学习,更新自身专业知识。




相关阅读