ARTICLE DETAIL

资讯详情

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

BGP联邦配置与原理详解:解决大型网络iBGP扩展难题

BGP联邦配置与原理详解:解决大型网络iBGP扩展难题 1. 从 iBGP 全互联的痛说起为什么大型网络需要联邦这个思路做网络的人应该都有过这种经历公司或者ISP的骨干网路由器数量一多BGP 邻居配到手抽筋。我记得第一次接触上百台路由器的 IBGP 网络时光是把每台路由器和其他所有路由器建立 IBGP 会话就花了好几个窗口期。每加一台新路由器就得在已有的所有路由器上追加一条 neighbor 配置芒种似的来回折腾还容易漏。更麻烦的是IBGP 的路由器之间默认不做二次转发——也就是说一台 IBGP 路由器收到的路由如果它不广播给下一跳其他 IBGP 路由器就学不到。为了保证全网路由一致要么搞全互联要么引入一个能帮你转发路由的机制。BGP 联邦BGP Confederation就是在这种背景下被设计出来的。它的核心思路是把一个大的 AS 拆成多个小的子自治系统Sub-AS子 AS 之间运行带联盟标签的 EBGP子 AS 内部仍然运行 IBGP。这样一来你不需要让所有路由器两两之间都建立会话只需要保证同一个子 AS 内的路由器互相连通子 AS 之间按需建立有限的 EBGP 对等关系整个网络的会话数量就能从原来的 O(n²) 级别降下来。很多教材把联邦和路由反射器Route ReflectorRR放在一起讲把它俩当作 iBGP 扩展的两种并列方案。但我在实际项目中逐渐体会到这两者的适用场景差异挺大联邦更像是一种架构级的重构而 RR 更像是一种节点级的优化。今天这篇文章我想把联邦讲透从原理到配置再到踩坑希望能帮正在规划骨干网的朋友少走点弯路。2. BGP 联邦的核心机制子 AS、联盟 ID 和像 EBGP 又不是 EBGP的特殊行为2.1 子 AS 与联盟 ID拆而不分联邦的第一层概念是子 AS。你可以在一个联盟 IDConfederation ID下创建多个子 AS每个子 AS 拥有一个私有的 AS 号通常从 64512 到 65534 这个私有区间里选。对外界来说整个联邦仍然表现为一个统一的 AS——也就是你的联盟 ID。这一点很重要你的上游运营商、对端 Peer 看不到你的子 AS 划分他们只认你的联盟 ID。子 AS 之间建立的 BGP 会话被称为联盟外部对等Confederation External Peer配置方式上很像 EBGP——邻居属于不同的子 AS所以默认情况下不需要像 IBGP 那样做全互联。但另一方面子 AS 之间的路由传递路径属性上的处理又和真正的 EBGP 不同AS_PATH 会被附加联盟段但对外部网络不可见MED、Local Preference 这类属性会在联盟内部传递时保持有效不会被重置。换句话说联邦的设计者试图让子 AS 之间表现得像 EBGP但保留 IBGP 的策略传递能力。2.2 AS_PATH 路径属性在联邦里的变化你能看见什么、看不见什么这里有个非常容易混淆的细节值得单独说。当一个路由从子 AS 100 传入子 AS 200 时BGP 更新报文的 AS_PATH 中会出现一个联盟段Confederation Segment它把经过的子 AS 序列记下来比如(64512 64513)这样的形式。这个联盟段有两个作用第一用于环路检测。如果一台路由器收到了一个联盟段中包含自己子 AS 号的路由说明这条路由绕了一圈又回来了直接丢弃。这和 EBGP 用全局 AS_PATH 防环的思路一致只是作用范围被限制在了联盟内部。第二用于联盟内部选路。如果你部署了多个子 AS路由经过的子 AS 数量理论上会影响跳数认知但注意联盟段的 AS 数量并不会像普通 EBGP 那样累加到一个很大的数字进而影响外部选路。对联盟外部来说这些子 AS 号会被完全隐藏外部路由器看到的 AS_PATH 里只会出现联盟 ID。这也是为什么我一直建议规划子 AS 号时优先选择不会和现有网络冲突的私有 AS 号而不是随意拿一个看起来顺眼的数字。万一以后网络合并或者要和对端做 AS 号校验私有 AS 号冲突排查起来非常痛苦。2.3 联盟内 EBGP 会话的 TTL、Next-Hop 和同步规则这里我再展开说三个容易被忽略的技术点。第一是 TTL。真正的 EBGP 会话默认 TTL 为 1因为正常设计下 EBGP 邻居应该是直连的。但联盟内的 EBGP 会话不同即使两个子 AS 的路由器逻辑上属于不同子 AS它们之间可能跨越了二层网络甚至三层网络。我记得老版本的思科 IOS 上如果不对联盟 EBGP 会话做额外配置默认 TTL 行为会和普通 IBGP 一样设为 64但不同厂商行为有差异。为了保险我在跨设备部署联盟时都会显式指定 TTL——比如华为设备上用ttl命令、思科设备上用ebgp-multihop参数确保会话不会因为默认 TTL 不一致而中断。第二是 Next-Hop。普通 IBGP 的一个规则是IBGP 路由器在传递路由时默认不修改 Next-Hop。联邦中的子 AS 之间传递路由时Next-Hop 的修改行为更接近 EBGP——也就是说子 AS 边界路由器可能需要在传递更新时把 Next-Hop 改成自己。这个设计初衷是避免联盟内部还要强制所有路由器都配置相同的 IGP 或统一的递归路由。但反过来如果你在子 AS 边界上没有正确配置下一跳处理就会出现路由学得到但下一跳不可达的问题。后面我会专门讲这个坑。第三是同步规则Synchronization Rule。历史上 BGP 曾有一条规则如果一台路由器不是完全相连的 IBGP 路由器那么它在向 EBGP 邻居通告路由之前必须先确保这条路由能通过 IGP 学得到。在联邦环境下不同厂商对同步规则的实现并不统一现代 BGP 实现默认关闭同步。但如果你在跨厂商设备上做联邦建议显式确认一下synchronization是关闭的否则可能出现路由该通的通不了的怪现象。3. 联邦 vs 路由反射器如何选择适合你的扩展方案3.1 快速回顾路由反射器解决了什么路由反射器的思路是选出一个中转站。IBGP 路由器不需要全互联只需要和 RR 建立会话RR 可以把从一个 IBGP 客户端学到的路由反射给其他客户端而不会触发环路惩罚。因为 RR 转发的路由带上了ORIGINATOR_ID和CLUSTER_LIST这两个属性环路检测就靠这两项来完成。RR 的极简设计让它在绝大多数场景下成了首选不需要改 AS 规划不需要动子 AS 划分部署成本低。在一个两三百台路由器的骨干网里做两到三组冗余 RR基本就能把会话数量降到可控范围。3.2 联邦什么时候更合适虽然 RR 简单但它在两个场景下力不从心第一当你的网络需要强策略隔离时。RR 的反射行为是透明的客户端学到路由后没法区分这条路由来自另一个区域和这条路由来自本区域。联邦的子 AS 划分天然形成策略边界你可以针对子 AS 级别做路由过滤、路由策略、优先级调整这个能力是 RR 不具备的。第二当网络规模大到单域 RR 集群无法承载时。虽然可以通过多级 RR 或者分组 RR 来实现水平扩展但设计复杂度会急剧上升而联邦的层次化结构在规划阶段就为这种水平扩展留了空间。举个我参与过的例子。有个跨地域的骨干网络A 区 200 台路由器、B 区 180 台、C 区 60 台三区之间业务流量特性差异巨大A 区主要是用户接入B 区是数据中心互联C 区是备份链路。如果用 RR三个区之间必须共享同一组 RR策略控制就得靠 community 和路由策略手动打标签运维成本高。后来我们把整个 AS 拆成三个子 AS每个区一个子 AS区内部用 RR 或者小范围全互联区之间用联盟 EBGP 会话。这样每个区的路由策略就可以通过子 AS 边界做统一收口策略不再需要散落在全区各台路由器上。3.3 混合方案也要认真设计注意我并不是说联邦一定优于 RR。实际上生产网络里常见的是两者的混合联邦提供大尺度上的分区隔离RR 在每个子 AS 内部做扩展。我倾向于把这种混合方案的边界画得干净一点子 AS 之间的连接一律走联盟 EBGP子 AS 内部只用 RR 或小型全互联不要让 RR 跨子 AS 建立反射关系。如果把 RR 和联邦搅在一起你会同时继承两者的怪癖RR 的源点 ID 检测在跨子 AS 路由上可能产生误判而联邦的 AS_PATH 段又会让排障时的路径梳理变得复杂。下面我列一个简单的对比表方便你快速判断方案取舍维度纯 iBGP 全互联路由反射器BGP 联邦联邦 RR 混合会话数量O(n²)n 大时不可接受O(n)主要和 RR 有关O(子AS间连接数 子AS内全互联数)O(子AS内 RR 连接数 子AS间连接数)配置复杂度低但繁琐低中高需规划子 AS高需同时规划两套机制策略隔离能力无弱需手动打 tag强天然边界强运维排障难度中低中高路径属性不直观高适用规模十台级百台级百到千台级多地域千台级多地域并需要策略边界这里必须补一句对于绝大多数只需解决会话数量爆炸的骨干网RR 已经足够。联邦的真正价值在于策略边界而不是单纯减会话。如果你只是嫌 IBGP 会话太多却没想清楚子 AS 怎么划分、策略怎么收敛我劝你别贸然上联邦——架构复杂化带来的成本可能比省下的会话维护成本还要高。4. 一套可复现的联邦配置3 个子 AS 的骨干网实例4.1 网络拓扑与规划为了讲清配置我虚构一个典型的骨干网案例。假设某运营商的骨干网原本是 AS 65001一共 150 台路由器。现在分成三个子 AS子 AS 64512核心汇聚层承载主要转发流量含 RR 两台。子 AS 64513数据中心出口层连接 4 个数据中心网关。子 AS 64514接入层/边缘层对接 40 个 POP 节点。联盟 ID 就是 65001。对外的 EBGP 邻居仍然把这个网络看成 AS 65001。在这个设计下子 AS 之间的连接规划如下64512 和 64513 之间建立两条联盟 EBGP 会话跨两台设备做冗余。64512 和 64514 之间建立四条联盟 EBGP 会话考虑接入层流量较大。64513 和 64514 之间可以没有直连会话逻辑上流量通过 64512 中转。4.2 思科风格的联盟基础配置以下配置以思科 IOS XE 为例。首先在每台路由器上启用联邦router bgp 65001 bgp confederation identifier 65001 bgp confederation peers 64512 64513 64514注意bgp confederation identifier填的是对外公布的联盟 ID也就是原始 AS 号bgp confederation peers列出所有本设备需要建立联盟会话的子 AS 号。如果这台路由器只属于 64512但需要和 64513、64514 建立会话那么这两者都要出现在 peers 列表里。然后建立子 AS 之间的会话。在 64512 的一台路由器上配置和 64513 某台设备的会话interface Loopback0 ip address 10.0.0.1 255.255.255.255 interface GigabitEthernet0/0/1 description To DC-Core-1 ip address 192.168.12.1 255.255.255.252 router bgp 65001 bgp confederation identifier 65001 bgp confederation peers 64512 64513 64514 neighbor 10.0.0.2 remote-as 64513 neighbor 10.0.0.2 update-source Loopback0 neighbor 10.0.0.2 ebgp-multihop 2 neighbor 10.0.0.2 password YourSecurePassword address-family ipv4 neighbor 10.0.0.2 activate neighbor 10.0.0.2 next-hop-self这里最关键的三个参数remote-as 64513这是子 AS不是全局 AS。设备知道 64513 在confederation peers列表里所以会把它当作联盟会话处理而不是真正的外部 EBGP。update-source Loopback0用环回口建立会话保证物理链路切换时会话不断。next-hop-self在联盟边界上强制下一跳指向自己避免下一跳不可达的问题。这一点和普通 EBGP 不太一样普通 EBGP 默认就是修改下一跳的但联盟会话不一定所以显式配置更稳妥。4.3 华为/中兴风格的对应配置参考国内不少骨干设备是华为的我也顺手写个参考版本bgp 65001 confederation-id 65001 confederation peer-as 64512 64513 64514 ipv4-family unicast peer 10.0.0.2 as-number 64513 peer 10.0.0.2 connect-interface LoopBack0 peer 10.0.0.2 next-hop-local peer 10.0.0.2 password cipher YourSecurePassword注意华为的命令里联盟验证是通过confederation peer-as来声明的而confederation-id设置联盟 ID。如果漏了peer-as声明设备会把你配置的peer ... as-number 64513当作外部 EBGP 会话处理策略行为完全变样——这种错误在配置阶段不报错运行期才暴露排障成本很高。4.4 子 AS 内部的 IBGP 配置子 AS 内部仍然按 IBGP 处理。在 64512 子 AS 内部router bgp 65001 neighbor 10.0.0.3 remote-as 65001 neighbor 10.0.0.3 update-source Loopback0 address-family ipv4 neighbor 10.0.0.3 activate因为全局 AS 号在配置里是 65001所以子 AS 内部的邻居仍然配置成 remote-as 65001。设备会根据confederation identifier和本地子 AS 归属来判断这是 IBGP 还是联盟 EBGP 会话。换句话说在 BGP 进程里你写的远程 AS 号可能只有两种子 AS 号联盟对等或联盟 ID子 AS 内部的 IBGP 对等。这确实容易让新手抓狂——同一个全局 AS 号有时候代表 IBGP有时候代表整个联盟逻辑上要分清。为了减少混淆建议在你的网络运维文档里单独建一张表把所有设备按照子 AS 归属、联盟 Peer 列表、IBGP Peer 列表三列整理好。我在项目里就是这么做的排查问题的时候一张表顶得上翻半小时配置。5. 部署与运维联邦时最容易踩的坑和故障排查链路5.1 坑一下一跳不可达前面我提到过 Next-Hop 问题。在实际网络里这是联邦部署里出现频率最高的故障。故障现象是路由表里有两条以上的 BGP 路由显示为可达但实际转发时丢包或者 BGP 路由表里出现 next-hop 为某台设备环回口、但 IGP 里完全没有对应路由的情况。排查链路可以这样走先看故障路由的 BGP 详细信息确认BGP next hop字段是什么。再确认该下一跳是否在 IGPOSPF 或 IS-IS路由表里。如果不在说明这条路由的更新源头没有正确设置next-hop-self。顺着 BGP 会话的传递路径找到最近一个跨子 AS 的边界设备检查其出口方向的next-hop-self配置。修复后不要急着验证先用clear bgp * soft做一次软清除观察路由表的更新情况。我遇到过一个场景某个子 AS 的接入路由器学到的路由下一跳指向了另一个子 AS 的环回口但因为两个子 AS 之间的物理链路在 IGP 层面没有完全互通导致可达性间歇性失败。后来就是在边界设备上加了一行next-hop-self问题立刻消失。5.2 坑二Local Preference 被意外重置联邦的一个卖点就是策略属性在子 AS 之间传递时不会被重置。但也有翻车的时候部分老版本设备在跨厂商互通时对联盟会话的 Local Preference 处理不一致导致收到的路由本地优先级值和原始值不同。如果你在联盟边界上做路由策略建议在上游设备通告进入联盟之前显式设置 Local Preference而不是依赖默认值传递。小技巧是在策略里绑定 Set 操作前先用show bgp ...确认入向路由的实际属性值避免我以为它没变其实它变了的尴尬。5.3 坑三环路检测误判联邦的 AS_PATH 防环机制是基于联盟段的。在一个设计不合理的联邦拓扑里比如子 AS 之间存在多条冗余路径就有可能出现路由在某些设备上被误认为环路而丢弃。我曾经在一个双归属子 AS 的拓扑上踩过这个坑子 AS 64514 同时连接 64512 和 64513而 64512 和 64513 之间又有直连。结果某些路由在两个子 AS 间来回穿越联盟段累积到一定程度后某台设备判定路由来自自己所在子 AS便直接丢弃。排查这种问题不能只看表面路由数量要顺着 AS_PATH 的联盟段逐跳梳理。你可以用show bgp ...看到联盟段的具体内容比如(64512 64513 64514)这种。如果发现某条路由的联盟段里多次出现同一个子 AS说明拓扑中存在环路风险。这时要调整子 AS 之间的连接拓扑保证从任意一个子 AS 到另一个子 AS 的路径唯一——但要做到这一点并不容易所以更推荐在规划阶段就避免网状联盟连接尽量用星型或层次化结构。5.4 坑四跨厂商设备的默认参数不一致联盟涉及的几个参数在不同厂商设备上的默认值并不一样尤其是 TTL、同步规则和 Next-Hop 修改。我的建议是在项目开局阶段就建立一个参数核对表把每台设备的 TTL、同步开关、Next-Hop 模式、联邦 Peer 列表逐一记录避免临到排障时才发现两边行为不一致。这里顺便提一句如果用华为设备和思科设备做联盟会话建议将两边配置尽量显式化不要依赖默认值。我在一个混合厂商环境里就遇到过类似的坑——华为侧默认不会为联盟会话修改 Next-Hop而思科侧的ebgp-multihop参数如果没配对两边会话就建立不起来。最终边界设备上统一显式配置了多跳限制和 Next-Hop 处理才完全稳定下来。5.5 故障排查的一般思路从会话建立到路由传播最后我把联邦排障的一般思路整理成几步适合收藏备用检查 BGP 邻居状态show bgp summary确认联盟会话都在 Established 状态。如果会话起不来检查子 AS 号是否在联盟 Peer 列表中、ACL 是否放行 TCP 179 端口、环回口路由是否可达。会话建立后检查是否收到前缀show bgp ipv4 unicast对比期望的前缀数量。如果前缀数量异常逐步沿路由传播路径定位先看边界设备是否学习到再看内部设备是否收到最终找到断点。最后检查路由策略子 AS 边界的入向/出向策略是否放行了必要前缀。一个容易忽视的点联邦环境的 BGP 会话状态里你可能会看到remote AS显示为子 AS 号而不是联盟 ID。有些监控系统如果按 AS 号做对端标识就会报警说发现未知对端 AS这其实是联邦的正常表现。建议把监控系统的 AS 白名单提前配置好不然半夜收到一堆误报警空欢喜一场。6. 规划子 AS 时要做好的几件事规模预估、编号设计和文档沉淀6.1 子 AS 划分不应该只看地域我见过不少团队把子 AS 直接按机房或城市划分图省事。但子 AS 是策略边界不是地理标签。如果某个城市既有机房又有 POP 节点但你只划了一个子 AS那策略隔离就形同虚设。比较合理的划分思路是先梳理网络的业务功能。比如核心转发、数据中心出口、接入、外联、备份链路每个功能模块对应一个子 AS然后在同一子 AS 内再根据地理位置做冗余设计。这样可以保证路由策略的边界和功能边界对齐后续写策略时非常自然。如果网络规模特别大每个功能模块内部还要再拆子 AS也可以按功能 * 区域两个维度划分——但要注意子 AS 数量越多配置复杂度和排障成本越高通常控制在 5~8 个以内比较合适。6.2 编号设计不要浪费私有 AS 号的层次感子 AS 号可以用私有 AS 段但我建议留出规律。比如子 AS 功能子 AS 号段核心/汇聚64512~64519数据中心出口64520~64529接入层64530~64549外联/对等64550~64559这种编号方法的好处是看 AS 号就能知道设备角色。特别是在跨团队协作时不用翻文档就能快速判断某个子 AS 的大致位置和功能排障效率提升明显。反过来如果你随意编号遇到一条路由带着(64533 64512 ...)的联盟段要追查到底经过哪个功能区域还得先查表非常磨人。6.3 文档和变更流程联邦比普通 BGP 更需要配置即文档这里我要强调一个亲身体会联邦部署中配置文本本身已经很难读懂——因为你看到的是全局 AS 号 子 AS 号混合的视图。如果文档不跟上三个月后团队里没人能说清为什么 64512 和 64513 之间要建四条会话而不是两条。我的建议是为每个子 AS 建立一份独立的拓扑和配置说明记录它和哪些子 AS 有链接、链接数量、冗余方式。为每条联盟 EBGP 会话写一份会话卡片包含两端设备、接口、原始 AS、子 AS、目的承载哪些流量、冗余备份方式。变更窗口评估时把联盟会话变更和IBGP 会话变更分开评估因为前者影响的范围是子 AS 级别后者可能只是局部。如果团队人少、基础设施规模又不算大至少也要保证 Wiki 里有最新的子 AS 划分表和联盟 Peer 清单。这些文档在故障时候的价值往往会超过配置本身。7. 联邦和 RR 混用时的边界设计7.1 典型混合架构每个子 AS 内部部署 RR子 AS 间走联盟前面我提到过混合方案这里我把边界设计讲得再细一点。在一个联邦 RR的混合架构中关键原则是IBGP 会话只能存在于同一个子 AS 内。跨子 AS 的会话必须是联盟 EBGP。如果跨子 AS 建立 IBGP 会话BGP 的环路检测逻辑会失灵AS_PATH 信息也无法正确传递——因为设备会认为对端属于同一 AS从而不记录联盟段最终产生隐含环路。子 AS 内部的 RR 组一般做双 RR 冗余客户端和 RR 之间仍然跑 IBGP而且在 iBGP 内不做联邦的脑洞——比如不要让 RR 自己再充当联盟边界。边界设备必须是专门的设备或者至少是你在配置里明确指定的角色否则 RR 的反射逻辑和联盟邻接逻辑混在一起排障时可能想哭。7.2 策略边界应该落在哪个层面混合架构的策略控制点我一般放在子 AS 之间的联盟边界。具体说子 AS 内部的 RR 可以不做任何出向策略只做收敛和转发。子 AS 之间的入向和出向策略统一在联盟边界设备上配置比如基于前缀、社区、AS_PATH 做过滤。如果需要做跨子 AS 的流量工程例如调整某个区域流量的出口方向优先在联盟边界上用 Local Preference 和 MED 做调整而不是下发到子 AS 内部的每一台路由器。这样设计的收益是即使子 AS 内部无论怎么变化策略影响范围都不会扩散到其他子 AS。运维时一旦想调整某个区域的流量行为只需要动几台边界设备不用满网飞。7.3 混合架构下的排障顺序混合架构的排障比纯联邦更复杂我建议按下面的顺序排查先确认故障发生在子 AS 内部还是子 AS 之间——看 BGP 路由的联盟段有没有变化。如果是子 AS 内部问题按普通 IBGP 的排障思路走检查 RR、客户端、IGP 路由。如果是子 AS 之间的问题重点检查边界设备的策略和联盟会话。特别留意边界设备的入向策略是否过滤掉了来自其他子 AS 的合法前缀。有次我们排查一个跨子 AS 的路由丢失问题耗了大半天最后发现是边界设备的入向 community 列表把一条合法的备份链路路由误伤掉了。那条路由被打了no-exportcommunity而边界设备的策略正好是拒绝所有带 no-export 的路由但我们忘了这条备份链路本来就是需要跨子 AS 通告的。后来在边界设备上单独放行了这个子 AS 内部的路由前缀问题才解决。这类问题在单 AS 下其实很难遇到因为 no-export 的语义本身就限制了跨 AS 传播但当AS变成了子 AS语义边界就模糊了——你必须想清楚每个 community 在联邦环境下的实际传播范围。8. 一些值得收藏的实践心得与最后的建议联邦是个老技术但很多网络工程师对它既陌生又熟悉——看书的时候觉得懂了真正上手配置还是会一脸懵。最后我分享几条亲测有效的心得希望能给你一些启发。第一开局初期可以考虑先做半联邦过渡。如果你担心一步切换风险太大可以先把网络的一部分迁移到联邦比如只把数据中心出口层独立成一个子 AS其他部分仍然走原来的 IBGP 全互联或 RR。这样可以在真实流量下验证联邦行为且变更影响面可控。我见过不少团队一次性全量迁移结果排障压力巨大最后被迫回滚。第二尽量使用自动化工具来生成联盟会话配置。联邦配置的一个特点是不同设备上要写的片段高度相似但参数又各自不同最适合用模板批量生成。无论你是用 Ansible 还是自研脚本至少保证联盟 Peer 列表和子 AS 编号等核心参数来自同一份数据文件避免人工改错。人工手改联邦配置真的很容易出现这台设备的 confederation peers 少了 64514这种低级错误。第三监控告警必须提前适配。联邦环境下BGP 会话的远程 AS 可能是子 AS 号外部监控系统如果按 AS 号做对端认证会大量误报同时一台设备可能同时有 IBGP、联盟 EBGP、外部 EBGP 三类会话告警级别要区分清楚。我建议在部署联邦之前先把监控系统里的对端 AS 号预期值按子 AS 建组这样故障时能一眼看出是哪一类会话出了问题。最后想说的是BGP 联邦不是银弹它更像是一把结构化的手术刀让大型网络在扩展的同时保持策略可控。它的成本是拓扑复杂度、配置冗余和排障心智负担它的收益是策略边界清晰、扩展受限于设计而非技术。如果你的网络已经大到IBGP 会话数量不可控、而 RR 又不能满足多区域策略隔离的程度认真研究联邦是完全值得的如果你的网络只有几十台设备也许把现有 RR 方案做扎实就已经足够了。我在实际运维中越用越觉得联邦最迷人的地方不在于会话数量下降了而在于它逼着你在规划阶段就想清楚这个网络的策略边界到底长什么样。想明白了后面的一切都顺理成章。
返回列表