龙空技术网

你必须知道的BGP新特性“ADD-PATH”

康大力 87

前言:

今天姐妹们对“路由表递归查询”可能比较注意,各位老铁们都需要分析一些“路由表递归查询”的相关内容。那么小编在网摘上网罗了一些关于“路由表递归查询””的相关资讯,希望看官们能喜欢,大家快快来了解一下吧!

前言

BGP由于支持基于策略的路由选路,协议易扩展,且支持数量更多的路由条目,在骨干网实际生产环境中被广泛部署。通常在骨干网生产网络中,使用ISIS或者OSPF作用域内IGP协议,使域内所有业务汇聚设备、核心设备换回地址可达。在此基础上再部署BGP进行业务路由承载。但由于BGP自身选路原则原因,在骨干网存在冗余节点时可能会产生非预期的网络流量模型。使用传统的“虚拟下一跳”方式进行处理时即破坏了BGP的强大的路由控制能力,同时也增加了网络对虚拟下一跳的IP的规划、部署操作,大大增加了网络运维的复杂度。但在rfc7911出现后,通过BGP ADD-PATH特性可自动实现等阶BGP路由,不再需要小伙伴们进行虚拟下一跳IP规划与部署。

恰好网工S君在一次骨干网集成项目遇到了这样的头疼问题,接下来让我们一起分享下S君的头疼经历,让大家减缓下工作压力。

BGP在骨干网中部署

在一个清爽的早晨S君接到个接到个令他兴奋的项目,某互联网大厂数据中心集成项目,从数据中心出口、汇聚、接入均由他负责设计、实施。这让他学习多年的BGP、ISIS终于迎来了实战,心里无比激动,开心......

此时在他的脑海里想起了“他”得好,强大的路由控制能力,在骨干网中被广泛部署,协议易扩展,支持数量更多的路由条目。于是S君在与客户沟通后,在数据中心的出口层面设计成以下图一的拓扑。

图一

如图中,除数据中心CR外,其他均为现有网络。接入网CR,省独立RR、省BR兼RR设备均运行在同一管理域内ISIS level 2中。接入网CR使用口字型拓扑与省BR互联。

数据中心CRS君设计为使用双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默认路由。

此时S君心中满是欢喜,并得意地联系甲方爸爸进行测试。第一个测试项是模拟业务路由承载测试。

在数据中心CR1、CR2同时发布相同业务网段路由,所有BGP选路属性均为默认值。在S君脑海里这预期效果就是接入网两台CR的BGP路由表中存在两条分别指向数据中心CR1、CR2的业务网段路由,如此简单,简直so easy。

呵呵。客户通过接入网CR查看数据中心业务网段路由时,下一跳均为数据中心CR1的loopback地址。S君听到这事实简直不敢相信,这么完美的设计怎么还会出现幺蛾子。经过多次对方案推敲与现场验证,S君始终没找到问题原因。于是S君带着小忧伤向老师傅请教这“幺蛾子”的由来。

老师傅看到图一拓扑,了解模拟业务路由承载测试结果后,嘴角微微上扬,道出其中的奥秘。

由于业务路由在宣告时未对BGP选路属性进行修改,导致省独立RR1、RR2在BGP选路原则作用下只优选router-id较小的BGP邻居所宣告业务网段作为最优路由(数据中心CR-1的router-id比CR-2小)。1从于会导致省BR01、BR02、接入网CR1、CR2访问数据中心业务流量均由数据中心CR1承载。这个“幺蛾子”浪费了数据中心CR2链路带宽,同时流量模型也不是客户所期望的。

小伙伴会想到在省独立RR配置“maximum-paths”,使省独立RR形成等价的业务路由,从而省独立RR会先向省BR宣告两个不同下一跳数据中心业务路由。但“maximum-paths”只是影响BGP路由加载到路由表数量,并未能影响BGP路由选路原则。BGP向邻居宣告其BGP路由表中最优BGP路由,并非设备路由表中路由。

S君一副豁然开朗的样子,并继续向老师傅请教解决方案。

老配方

为解决BGP选路原则带来的“幺蛾子”,老师傅通过虚拟下一跳方式为S君进行解答。

如图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”。

S君寻思着还有没其他更优的解法。老师傅接着往下说......

新特性

直到rfc7911的出现,BGP同时宣告同一前缀的多条路径成为可能,rfc7911定义了BGP一种新的capability用于同时宣告多个下一跳的相同BGP路由。通过在BGP邻居间协商add-path capability,路由宣告时会将BGP路由表最优及次优BGP路由同时发送到支持add-path capability的BGP邻居。2 以下为根据客户网络修改为add-path方式实现BGP等价路由关键配置:

add-path实现机制只将BGP路由表中最优及次优路由同时发送到BGP邻居,其并未破坏BGP路由选路原则。如果需要路由表中生成多条等价BGP路由,还需考虑BGP选路原则与增加“maximum-paths”配置。需要注意“add-path”为BGP一种capability。如果实际生产网络中BGP已形成稳定BGP邻居并承载业务路由,启用此特性将会导致BGP会话重建,BGP邻居间重新协商双方BGP capability。

总结

BGP固有强大路由控制能力,在实现部署时可能会产生非预期网络流量模型。小伙伴们在实际部署时需多加留意控制平面与数据平面相关表项哦。同时BGP也是Internet一个极其重要的路由协议,相关RFC标准在不断更新,大家也要保持学习,更新自身专业知识 。

END

by 小帅帅Jer @雄鹰学苑

标签: #路由表递归查询