ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

BGP联邦原理与配置实战:从Next-Hop修正到AS_PATH折叠

BGP联邦原理与配置实战:从Next-Hop修正到AS_PATH折叠 HCIP数通方向里最绕的一个是OSPF特殊区域另一个就是BGP联邦。这个综合实验我前前后后重做过三遍第一遍照着题库敲邻居全established了结果路由黑洞第二遍搞明白了Next-Hop才是联邦的命门第三遍才把AS_PATH在联邦内部怎么折叠、对外怎么呈现彻底捋顺。BGP联邦不是考试里才有的概念它解决的是IBGP全互联在大规模AS里的会话爆炸问题所有做运营商级网络、大企业骨干网的同学早晚都要碰。这篇文章我把整个实验从原理到配置、从验证到排错完整拆开讲适合正在备考HCIP、或者工作中第一次接触BGP联邦的朋友直接照着搭。1. BGP联邦设计的初衷与适用场景1.1 IBGP全互联的规模痛点先回到最基础的问题为什么需要联邦BGP有一条铁律从IBGP邻居学到的路由不能再通告给其他IBGP邻居。这条水平分割规则直接导致一个AS内部所有运行BGP的设备必须建立全互联Full Mesh的IBGP会话。假设AS内有N台路由器需要建立N×(N-1)/2个IBGP会话。10台设备是45个会话20台设备直接跳到190个。这不只是配置量的问题每一条TCP会话都需要维护、监控、排错设备之间的状态耦合会随规模急剧恶化。更难受的是新增一台设备意味着要跟现有所有设备补邻居运维上非常不友好。1.2 联邦与路由反射器的选型对比解决IBGP水平分割有两条主流路线路由反射器RR和BGP联邦Confederation。RR的思路是在AS内挑一台或几台路由器作为反射器其他路由器只跟RR建立IBGP会话由RR把路由反射给其他客户机。RR通过Originator_ID和Cluster_List属性防止环路配置简单在绝大多数企业网中是最常见的选择。联邦的思路则完全不同它把一个大AS拆成若干个子ASSub-AS子AS内部仍然遵守IBGP水平分割但子AS之间通过类似EBGP的规则传递路由用EBGP的AS_PATH机制天然防环。两种方案怎么选我的经验是如果只是一个AS内要减少会话数量RR更轻量但如果网络规模大到IBGP域已经跨越了多个管理域、各地区网络需要一定的自治度联邦会更合适。联邦的额外收益是子AS之间的路由策略可以像EBGP一样独立控制。极端情况下两者还能叠加使用联邦的子AS内部再部署RR这也是超大规模网络的常见形态。2. 实验拓扑规划与设备地址设计2.1 拓扑结构与AS划分思路这个综合实验的拓扑我设计了5台设备核心是把四种BGP会话类型全部覆盖进去子AS内部的联邦IBGP、子AS之间的联邦EBGP、对外部AS的真EBGP以及路由从外部进入联邦后在内部逐跳传递的完整路径。拓扑逻辑如下AS 100对外呈现为一个整体内部拆成两个子AS65001和65002子AS 65001包含R1内部路由器和R2边界路由器子AS 65002包含R3边界路由器和R5内部路由器R4属于外部AS 200与R3建立真正的EBGP会话会话关系上R1和R2是联邦IBGPR2和R3是联邦EBGPR3和R5是联邦IBGPR3和R4是真EBGP。一条外部路由从R4进来到R1看到中间会经历真EBGP、联邦EBGP、联邦IBGP三种处理逻辑所有联邦的特性都能在一张拓扑里验证到。2.2 地址规划与设备清单实验基于华为eNSP设备型号AR2220VRP版本为VRP5。地址规划如下设备Loopback0互联接口与地址业务LoopbackR11.1.1.1/32GE0/0/0: 10.0.12.1/24Loopback1: 192.168.1.0/24R22.2.2.2/32GE0/0/0: 10.0.12.2/24, GE0/0/1: 10.0.23.2/24-R33.3.3.3/32GE0/0/0: 10.0.23.3/24, GE0/0/1: 10.0.34.3/24, GE0/0/2: 10.0.35.3/24-R55.5.5.5/32GE0/0/0: 10.0.35.5/24-R44.4.4.4/32GE0/0/0: 10.0.34.4/24Loopback1: 192.168.4.0/24IGP的设计上子AS 65001内部跑OSPF 1子AS 65002内部跑OSPF 2两个OSPF进程互不引入。子AS之间10.0.23.0/24和对外链路10.0.34.0/24不宣告进任何IGP只作为BGP直连链路使用。这样设计是为了后面能真实暴露联邦EBGP不修改Next-Hop导致的路由黑洞问题。3. 从零配置IGP与BGP联邦骨架3.1 OSPF配置与Loopback连通性检查先做底层IGP保证每个子AS内部的Loopback地址互通。这是BGP会话能建立的基础。R1和R2的OSPF配置# R1 ospf 1 router-id 1.1.1.1 area 0.0.0.0 network 10.0.12.0 0.0.0.255 network 1.1.1.1 0.0.0.0 # R2 ospf 1 router-id 2.2.2.2 area 0.0.0.0 network 10.0.12.0 0.0.0.255 network 2.2.2.2 0.0.0.0R3和R5的OSPF配置# R3 ospf 2 router-id 3.3.3.3 area 0.0.0.0 network 10.0.35.0 0.0.0.255 network 3.3.3.3 0.0.0.0 # R5 ospf 2 router-id 5.5.5.5 area 0.0.0.0 network 10.0.35.0 0.0.0.255 network 5.5.5.5 0.0.0.0配完先别急着配BGP用Ping确认一下R1能ping通2.2.2.2R5能ping通3.3.3.3。如果Loopback不通后面BGP邻居一定起不来而且排查起来容易走弯路。3.2 联邦BGP邻接关系配置与检查联邦配置最关键的是理解三件套bgp进程号用本地子AS号confederation id声明对外联邦IDconfederation peer-as声明哪些子AS属于同一个联邦。先看R1它只是子AS 65001内部路由器只需要配置联邦ID和与R2的联邦IBGP会话# R1 bgp 65001 router-id 1.1.1.1 confederation id 100 peer 2.2.2.2 as-number 65001 peer 2.2.2.2 connect-interface LoopBack0 ipv4-family unicast network 192.168.1.0 255.255.255.0 peer 2.2.2.2 enable注意R1的BGP进程号是65001配置的邻居AS号也是65001这是同一子AS内的IBGP关系机制上和普通IBGP没有区别。R2是子AS 65001的边界路由器多了与R3的联邦EBGP会话所以需要额外配置confederation peer-as 65002# R2 bgp 65001 router-id 2.2.2.2 confederation id 100 confederation peer-as 65002 peer 1.1.1.1 as-number 65001 peer 1.1.1.1 connect-interface LoopBack0 peer 10.0.23.3 as-number 65002 ipv4-family unicast peer 1.1.1.1 enable peer 10.0.23.3 enableR3的配置是这组实验里最复杂的它同时有联邦IBGP对R5、联邦EBGP对R2和真EBGP对R4。特别注意R3配置R4邻居时as-number填的是200因为R4属于外部AS 200# R3 bgp 65002 router-id 3.3.3.3 confederation id 100 confederation peer-as 65001 peer 10.0.23.2 as-number 65001 peer 10.0.34.4 as-number 200 peer 5.5.5.5 as-number 65002 peer 5.5.5.5 connect-interface LoopBack0 ipv4-family unicast peer 10.0.23.2 enable peer 10.0.34.4 enable peer 5.5.5.5 enableR5跟R1类似只配置联邦ID和与R3的联邦IBGP会话# R5 bgp 65002 router-id 5.5.5.5 confederation id 100 peer 3.3.3.3 as-number 65002 peer 3.3.3.3 connect-interface LoopBack0 ipv4-family unicast peer 3.3.3.3 enable最后是外部路由器R4。它眼中的R3属于AS 100因为联邦对外呈现的是联邦ID。所以R4配置邻居时的as-number必须填100而不能是65002这是很多人第一次配置联邦时最容易搞错的地方# R4 bgp 200 router-id 4.4.4.4 peer 10.0.34.3 as-number 100 ipv4-family unicast network 192.168.4.0 255.255.255.0 peer 10.0.34.3 enable配置完成后通过display bgp peer检查所有BGP邻居状态。正常情况下R3和R4的会话是EstablishedR2和R3的会话也是EstablishedR1/R2、R3/R5的联邦IBGP会话同样是Established。注意联邦EBGP在华为VRP5中按普通EBGP的TTL规则处理本例用物理接口直连建邻居不受影响。如果你打算用Loopback地址跨跳建立联邦EBGP需要额外配置peer x.x.x.x ebgp-max-hop 2否则邻居会一直卡在Active状态。4. 路由通告、Next-Hop修正与验证4.1 从外部AS到联邦内部192.168.4.0/24的传播与Next-Hop排查邻居都建立起来后先验证外部路由192.168.4.0/24进入联邦的过程。这条路由在R4上通过network命令发布先传给R3。在R3上看路由display bgp routing-table 192.168.4.0此时R3从真EBGP邻居R4学到这条路由AS_PATH是200Next-Hop是10.0.34.4。由于R3和R4直连路由可达。问题出在R3把这条路由通告给R2联邦EBGP之后。默认情况下联邦EBGP在华为设备上不会像普通EBGP那样把Next-Hop改成自己的接口地址而是像IBGP一样保留原来的Next-Hop。也就是说R2收到的192.168.4.0/24Next-Hop依然是10.0.34.4。但R2根本没有到10.0.34.0/24网段的路由这个网段不在任何OSPF区域内于是R2的路由表里192.168.4.0/24显示为可达状态但实际去查下一跳是查不到的路由直接变成黑洞。这就是联邦实验里最经典的坑。解决方法是让R3在对R2通告路由时强制修改Next-Hop配置next-hop-local# R3 ipv4-family unicast peer 10.0.23.2 next-hop-local配置之后R2看到的192.168.4.0/24的Next-Hop变成10.0.23.3这是R2的直连地址可达问题解决。还没完。R2把这条路由通告给R1联邦IBGP时同样不会修改Next-Hop。此时R1看到的Next-Hop还是10.0.23.3可R1的OSPF只知道10.0.12.0/24和1.1.1.1/32根本没有10.0.23.0/24的路由。所以R2也需要对R1配置next-hop-local# R2 ipv4-family unicast peer 1.1.1.1 next-hop-local因为R2和R1的BGP会话是基于Loopback建立的更新源地址是2.2.2.2所以配置next-hop-local后R2通告给R1的路由Next-Hop会变成2.2.2.2而R1通过OSPF可以到达2.2.2.2。此时R1看192.168.4.0/24Next-Hop是2.2.2.2整条链路就通了。同理R3把路由通告给R5联邦IBGP时也需要配置next-hop-local否则R5看到的Next-Hop同样不可达# R3 ipv4-family unicast peer 5.5.5.5 next-hop-local4.2 从联邦内部到外部AS192.168.1.0/24的传播与AS_PATH折叠再看反方向。R1发布192.168.1.0/24R2从联邦IBGP邻居R1学到然后传给R3联邦EBGP、再传给R4真EBGP。R2传给R3时需要配置next-hop-localR2上对R3这个邻居配置这样R3收到的路由Next-Hop是10.0.23.2。R3传给R4时真EBGP会自动把Next-Hop改成10.0.34.3不需要额外操作。建议在R2上补上对R3的next-hop-local配置# R2 ipv4-family unicast peer 10.0.23.3 next-hop-local此时在R4上查看192.168.1.0/24display bgp routing-table 192.168.1.0关键看AS_PATH。R4看到的是100而不是65001 65002这种内部子AS号。联邦对外的效果就是整个联邦在外部AS看来只是一个AS内部子AS的划分完全被隐藏了。而在联邦内部R1看192.168.4.0/24时AS_PATH显示为(65002) 200其中(65002)是联邦段。注意括号里的AS号不参与AS路径长度的比较这是联邦AS_PATH规则的核心。4.3 关键配置小结与验证命令速查整个实验里需要配置next-hop-local的位置总结如下设备邻居会话类型是否需要next-hop-local说明R12.2.2.2联邦IBGP不需要默认保持原Next-Hop即可R1通告路由给R2Next-Hop是R1自身地址R2可达R21.1.1.1联邦IBGP需要让R1收到的外部路由Next-Hop变为2.2.2.2R210.0.23.3联邦EBGP需要让R3收到的路由Next-Hop变为10.0.23.2R310.0.23.2联邦EBGP需要让R2收到的外部路由Next-Hop变为10.0.23.3R35.5.5.5联邦IBGP需要让R5收到的路由Next-Hop变为3.3.3.3R310.0.34.4真EBGP不需要自动修改Next-Hop真EBGP默认行为验证时最常用的三条命令display bgp peer display bgp routing-table display bgp routing-table 192.168.4.0 verboseverbose参数能看到完整的路径属性包括AS_PATH是否带括号、Next-Hop的更新细节排错时非常有用。5. 翻车现场常见故障与排错速查5.1 联邦EBGP邻居建立失败联邦EBGP邻居建立失败是综合实验里最高频的问题原因主要集中在三处。第一confederation peer-as漏配。R2必须声明65002是自己的联邦子ASR3必须声明65001。如果漏配了两台设备会把对方当成普通EBGP邻居。在华为VRP5中联邦EBGP和普通EBGP的邻居状态都能建立但联邦特性完全不生效AS_PATH的处理和TTL行为都会异常。这一点很隐蔽排查时用display current-configuration | include confederation确认两端配置是否对称。第二外部路由器R4把邻居AS号填错。R4上必须填as-number 100因为R3对外发送的OPEN消息携带的AS号是联邦ID。如果填了65002BGP opens消息的AS号不匹配邻居会一直卡在Connect或Active状态反复抖动。第三联邦EBGP基于Loopback建邻居时忘了配ebgp-max-hop。真EBGP的TTL默认是1联邦EBGP在多数VRP版本中也按EBGP的TTL规则处理跨跳建邻居必须显式增加TTL。5.2 路由黑洞Next-Hop不可达邻居全established路由表里也有条目但ping不通多半是Next-Hop不可达。这是BGP联邦实验里最容易让人抓狂的现象。典型表现是R1看到了192.168.4.0/24但display bgp routing-table里的NextHop字段指向了一个OSPF路由表里不存在的地址。联邦内每一跳从EBGP学来的路由通告给IBGP或联邦EBGP邻居时Next-Hop都不会被自动修改需要逐跳用next-hop-local修正。排查技巧很简单在收到路由的设备上display ip routing-table查一下Next-Hop地址是否存在。不存在就找上游通告者给对应的BGP邻居加上peer x.x.x.x next-hop-local。要注意修改配置后BGP需要重新通告路由如果不想等可以在地址族下执行refresh bgp all或重置BGP会话。5.3 AS_PATH异常与环路风险AS_PATH异常在综合实验里主要有两种现象。第一种是外部AS看到了联邦内部的子AS号。比如R4查看192.168.1.0/24时AS_PATH显示为65001 200而不是100说明confederation id没有正确配置或者有设备没配。联邦对外折叠AS_PATH的功能完全依赖confederation id任何一台边界设备漏配都会导致子AS号泄露。第二种是联邦内部出现环路。虽然联邦设计上用AS_PATH防环但如果你把confederation peer-as配错比如把本子AS号也加进去了或者错误地在联邦EBGP邻居上做了路由策略环路就可能出现。判断方法是比较同一路由在不同设备上的AS_PATH如果看到某个子AS号重复出现优先检查confederation peer-as列表。提示联邦EBGP的环路防护依赖AS_PATH中记录的子AS号但子AS号是私有的所以如果你在多个不同的联邦里复用了64512-65534的私有AS号靠AS_PATH就不足以区分真实路径了。大型网络规划联邦时子AS号也要全局规划避免不同联邦之间重复。6. 个人实验心得与HCIP考点延伸这个实验做完我对BGP联邦最大的感触是它本质上是用EBGP的处理逻辑来解决IBGP的扩展问题但这种一半EBGP一半IBGP的中间态正是学习中最容易糊涂的地方。先说一个个人经验做联邦实验不要把Next-Hop问题放到最后才处理。我第一遍做的时候把所有邻居状态调到Established就以为大功告成结果R1去ping 192.168.4.1数据包根本发不出去。当时在路由表里查了半天最后才发现是Next-Hop全是不可达地址。建议你在设计阶段就直接规划好每个邻居的Next-Hop修正方案把next-hop-local当成联邦配置的一部分而不是故障后再补救。再提一个很多人忽略的点验证联邦是否生效不要只看路由通不通一定要看AS_PATH的显示形式。R1上看到的外部路由AS_PATH为(65002) 200R4上看到的内部路由AS_PATH为100这两个特征同时满足才说明联邦的AS_PATH折叠和隐藏子AS的逻辑都正确。HCIP考试里联邦相关的题目问得最多的是联邦EBGP和真EBGP的区别、联邦内部AS_PATH是否计入路径长度以及联邦和RR的选型对比。这些考点在这个实验里都有对应的现象可以观察比死记硬背答案扎实得多。如果你还想继续深入建议在这个拓扑上叠加几个变化把R3-R4改成双链路做EBGP负载分担看联邦内部如何选路或者把OPSF 1和OSPF 2之间做双向引入看Next-Hop问题会不会消失以及这样设计会引入什么新问题。BGP联邦的很多坑真的要亲手踩一次才会有感觉。
返回列表