交换机
园区网交换机
数据中心与云计算交换机
行业精选交换系列
工业交换机
意图网络指挥官
无线
放装型无线接入点
墙面型无线接入点
智分无线接入点
室外无线接入点
场景化无线
无线控制器
行业精选无线系列
统一运维
身份管理
服务产品
运营商
政府
金融
互联网
制造业
高教/职教
医疗卫生
交通
公共安全
“运维实战家”专栏,从技术到实践,
和您聊聊运维的那些事儿,讲述运维人的“昨天、今天和明天”
作者:大峰
运营商服务中心
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标准在不断更新,大家也要保持学习,更新自身专业知识。