BGP联邦(BGP Confederations)这个东西,我见过太多人把它当成考试题里的背诵段落来处理了。它总是被放在路由反射器后面草草讲完,文档里看概念也简单,无非是“把大AS拆成小AS”。可真到自己在模拟器或者VyOS里动手搭实验的时候,问题全冒出来了:联邦EBGP和真正的EBGP到底哪里不一样?为什么我配完之后,外部邻居看到的AS号不是65001?联邦内部跨子AS传递路由时,下一跳到底改不改?这些问题光看PPT永远说不清楚,必须亲手把路由从一端转到另一端,看一遍AS_PATH和下一跳的变化,才算真正搞懂。
这篇东西是我基于VyOS(底层FRR)完整跑通的一个BGP联邦综合实验,拓扑里同时包含真实EBGP、IBGP、联邦EBGP三种会话关系,覆盖了绝大多数组网场景。适合刚学完BGP基础、正在准备网络认证,或者在实际工作中规划中型IBGP网络的人参考。我会直接给拓扑、给配置、给验证命令和输出,每个关键动作都解释为什么这么做。跟着做一遍,你对联邦的理解会扎实很多。
1. 从全互联数量公式看联邦到底解决了什么问题
先说清楚联邦这个特性诞生的背景,否则你配置的时候会觉得它很多余。
BGP内部有一条非常“不讲情面”的规则:从IBGP邻居学到的路由,不会再通告给其他IBGP邻居。这是BGP防止AS内部环路的核心机制,但副作用也很明显——同一AS内部,所有运行IBGP的路由器必须两两建立会话,全网全互联。否则路由传不出去。
这里有一个很经典的公式:需要建立的IBGP会话数量是 N×(N-1)/2,N 是AS内部BGP路由器数量。
我见过不少真实网络的教训,这里直接算给你看:
| AS内BGP路由器数量 N | IBGP全互联会话数 N×(N-1)/2 |
|---|---|
| 5 | 10 |
| 10 | 45 |
| 20 | 190 |
| 50 | 1225 |
| 100 | 4950 |
N=20的时候,190条会话已经很难维护了。到100台设备的时候,接近5000条会话,每条都要手工配置、监控、排障,这基本就是灾难。
1.1 联邦的“子AS”拆解思路
联邦的解决办法是:把一个大的AS,比如AS 100,划分成多个内部子AS。子AS内部仍然走IBGP,子AS之间跑一种特殊形态的EBGP。因为子AS之间确实用了不同的AS号,所以它们之间建立的是EBGP邻居。
但关键是,这些子AS之间传递路由的时候,会保留IBGP的很多关键行为,比如下一跳不修改、本地优先级可以跨子AS传递、MED不会被重置。对外部真正的EBGP邻居来说,整个联邦仍然表现为一个AS 100,而不是一堆65001、65002。
这个设计聪明的地方在于:它把“必须全互联”的范围从整个大AS缩小到了每个子AS内部。子AS内部的设备数量少了,IBGP会话数量自然大幅度下降。
还是用20台设备举例。如果把AS 100拆成4个子AS,每个子AS 5台设备,内部各自全互联,那么每个子AS内部只有10条IBGP会话,4个子AS总共40条。子AS之间的联邦EBGP连接只需要几条,用来把路由串起来。整体会话量从190条降到了50条左右,而且每个子AS可以独立管理。
1.2 联邦 vs 路由反射器(RR)的取舍
说到解决IBGP扩展性,很多人第一反应是路由反射器,为什么还要用联邦?
路由反射器的思路是打破水平分割:客户端把路由发给反射器,反射器再反射给其他客户端,这样不需要全互联。它配置简单,一台RR可以服务几十台甚至上百台客户端,所以现实中RR用得更多。
但RR有一个很少有人注意的弱点:普通客户端只会保留从RR学到的路径。如果RR的选路不是最优的,全网跟着走偏。RR本身成为选路的关键节点,所以生产环境通常要上双RR,并且配合BGP策略来保证路径可靠。
联邦的路线不一样。它保留了EBGP那种“每个路由器自己保留完整路径、自己算最优”的能力。子AS之间的联邦EBGP连接虽然是“外部”连接,但在路由属性上尽量保持内部语义,所以每个路由器仍然能独立判断哪条路径更优。这对于多出口、需要精细化选路的网络非常有价值。
实际部署中,联邦和RR并不是二选一,而是经常组合使用:大AS用联邦切成几个子AS,子AS内部再用RR减少全互联。这样两层结构都能把规模控制住。
2. 联邦机制的五个“像EBGP又不像EBGP”的规则
联邦之所以容易让人混淆,是因为它夹在IBGP和EBGP之间,行为规则一半像这个,一半像那个。我把它拆成五条规则,每一条都对应实验里能验证到的现象。
2.1 对等体类型:子AS之间是EBGP,但属于同一个联盟
在配置上,子AS之间因为remote-as填的是不同的子AS号,所以走的确实是EBGP的协商流程。但设备会检查一个关键配置:这些子AS是否在“confederation peers”列表里。如果在,BGP就把这个邻居当作联邦内部成员处理。
这个身份识别非常重要。它决定了后面几条规则是否生效。如果没有正确配置confederation identifier和confederation peers,设备会把子AS之间的会话当成真实EBGP对待,导致路由属性处理全乱套。
2.2 下一跳与本地优先级:IBGP属性不被重置
这是联邦最反直觉的地方,也是实验中一定要亲手验证的重点。
真实的EBGP会话在通告路由时,会把下一跳改成自己的地址;但联邦EBGP会话不会。路由在联邦内部从子AS 65001传到子AS 65002,下一跳字段保持最初的BGP发言者不变。也就是说,接收方必须通过IGP能到达那个原始下一跳,否则路由就是“看起来有,实际不可达”。
本地优先级也一样。真实EBGP收到的路由,本地优先级会被重置为默认值,LOCAL_PREF在AS之间不会传播;但联邦内部的路由传递会保留LOCAL_PREF。这意味着你可以在联邦内的入口设备上设置本地优先级,整条联邦内的所有设备都能按照这个优先级选路。
2.3 AS_PATH处理:内部可见子AS号,外部只看到联盟AS号
AS_PATH是联邦实验里最有观察价值的一个点,我建议你重点抓。
当路由在联邦内部跨越子AS边界时,发送方会把自己的子AS号追加到AS_PATH里。联邦内的设备看AS_PATH,能看到类似“65002 200”这样的路径,里面包含子AS号。
但当这条路由通告给联邦外部的真正EBGP邻居时,协议要求把所有子AS号从AS_PATH中剥离,只保留联邦的联盟ID。所以外部AS 200的设备看这些前缀,AS_PATH里只有AS 100,完全看不到65001、65002。
这就是联邦对外表现为“单AS”的核心机制。如果你的实验里外部邻居看到了子AS号,那一定是配置有问题,后面排错部分我会细说。
2.4 MED和路由通告规则的保留
MED(Multi-Exit Discriminator)在多出口网络里用来表达“哪个入口更优先”。真实EBGP会话会把MED重置为0,但联邦内部跨子AS传递时,MED会保留下来。
路由通告规则上,联邦EBGP会话比IBGP灵活:它允许路由器把从IBGP学到的路由继续通告给其他子AS的联邦EBGP邻居,同时也保留AS_PATH环路检测来防止真正环路。这解决了IBGP水平分割带来的传播限制,又不会造成无限循环。
我把这五条规则整理成一张对比表,后面实验验证的时候可以对照着看:
| 行为 | IBGP | 真实EBGP | 联邦EBGP |
|---|---|---|---|
| 下一跳是否修改 | 不修改 | 修改为自身 | 不修改 |
| LOCAL_PREF传递 | 保留 | 重置 | 保留 |
| MED传递 | 保留 | 重置 | 保留 |
| AS_PATH追加自身AS | 不追加 | 追加 | 追加子AS号 |
| 对外部EBGP隐藏子AS号 | - | - | 隐藏 |
3. 综合实验拓扑、地址规划与底层IGP
下面进入正题,我把整个实验环境完整描述一遍。你可以在GNS3、EVE-NG里用VyOS镜像,也可以用装了FRR的Linux容器,配置命令基本兼容。
3.1 拓扑设计思路
实验环境为一台外部路由器 R6 位于 AS 200,它要与联邦 AS 100 建立真实 EBGP 会话。AS 100 被划分为两个子 AS:AS 65001 和 AS 65002。
AS 65001 内有 R1、R2、R3 三台路由器,三台之间形成 IBGP 全互联。AS 65002 内有 R4、R5 两台,R4 与 R5 建立 IBGP。两个子 AS 之间用两条联邦 EBGP 连接做冗余:R2 连 R4,R3 连 R5。
外部边界路由器是 R1,它和 R6 之间建立真实 EBGP。业务网段分别挂在 R3、R5 和 R6 后面,这样三种会话关系都能传递业务路由,方便观察行为差异。
3.2 地址规划
整个实验的地址规划如下,建议你严格照抄,后面看输出不会乱:
| 设备 | 所属子AS | Loopback0 | BGP角色 | 业务网段 |
|---|---|---|---|---|
| R1 | 65001 | 1.1.1.1/32 | IBGP全互联 + 真实EBGP到R6 | - |
| R2 | 65001 | 2.2.2.2/32 | IBGP全互联 + 联邦EBGP到R4 | - |
| R3 | 65001 | 3.3.3.3/32 | IBGP全互联 + 联邦EBGP到R5 | 172.16.10.0/24 |
| R4 | 65002 | 4.4.4.4/32 | IBGP到R5 + 联邦EBGP到R2 | - |
| R5 | 65002 | 5.5.5.5/32 | IBGP到R4 + 联邦EBGP到R3 | 172.16.20.0/24 |
| R6 | 200 | 6.6.6.6/32 | 真实EBGP到R1 | 203.0.113.0/24 |
各设备之间的互联网段全部使用 30 位掩码:
- R1-R2:10.0.12.0/30
- R1-R3:10.0.13.0/30
- R2-R3:10.0.23.0/30
- R2-R4:10.0.24.0/30
- R3-R5:10.0.35.0/30
- R4-R5:10.0.45.0/30
- R1-R6:10.0.16.0/30
3.3 为什么底层必须跑OSPF
联邦实验的底层IGP(我这里用OSPF)不是可选项,是必须项。原因有两个。
第一,IBGP会话我用的是Loopback地址建立,比如R1和R2之间的IBGP邻居关系建立在 1.1.1.1 和 2.2.2.2 之间。这样即使中间的直连链路断了,只要OSPF还能找到其他路径,BGP会话不会断。但前提是OSPF必须把这些Loopback地址全网通告。
第二,联邦EBGP不修改下一跳。R2从R4学到的路由,下一跳可能是R5的Loopback 5.5.5.5,R2必须通过OSPF能到达 5.5.5.5,这条BGP路由才是可用的。如果IGP没有覆盖Loopback地址,你会看到“BGP表里有路由,但ip route里下一跳是空的”这种诡异现象。
OSPF只要单区域就行。每台联邦内设备都宣告自己的Loopback0和所有互联网段,业务网段的Loopback不宣告——那些由BGP承载。
4. 逐台设备联邦配置与命令解读
配置部分以VyOS命令为主,FRR的等价命令我会在旁边标注。先给你们建立整体概念,联邦配置的核心就三条:confederation identifier、confederation peers、以及邻居的remote-as。
4.1 R1配置:IBGP全互联 + 真实EBGP边界
R1是联邦与外部AS 200的边界,它的配置最能看到“对外表现为AS 100”这个效果。
# 接口 set interfaces ethernet eth0 address '10.0.12.1/30' set interfaces ethernet eth1 address '10.0.13.1/30' set interfaces ethernet eth2 address '10.0.16.1/30' set interfaces loopback lo0 address '1.1.1.1/32' # OSPF set protocols ospf parameters router-id '1.1.1.1' set protocols ospf area 0 network '1.1.1.1/32' set protocols ospf area 0 network '10.0.0.0/16' # BGP联邦 set protocols bgp 65001 set protocols bgp 65001 confederation identifier '100' set protocols bgp 65001 confederation peers '65002' set protocols bgp 65001 neighbor 2.2.2.2 remote-as '65001' set protocols bgp 65001 neighbor 2.2.2.2 update-source '1.1.1.1' set protocols bgp 65001 neighbor 3.3.3.3 remote-as '65001' set protocols bgp 65001 neighbor 3.3.3.3 update-source '1.1.1.1' set protocols bgp 65001 neighbor 10.0.16.6 remote-as '200'解释几个关键点。
confederation identifier 100 表示“我所属的联邦对外使用AS 100这个身份”。这不是本地AS,只是联邦ID,本地AS仍然是65001。
confederation peers 65002 告诉R1:AS 65002不是外部AS,而是同一个联邦内的成员。漏了这条,路基在联邦EBGP会话上就会被当成真实外部路由处理,行为全错。
给R6的remote-as填的是200,这个没问题。但注意,R6那边看R1,填的是100而不是65001,这一点极其容易错,我在排错章节会专门讲。
FRR等价配置:
router bgp 65001 bgp confederation identifier 100 bgp confederation peers 65002 neighbor 2.2.2.2 remote-as 65001 neighbor 2.2.2.2 update-source 1.1.1.1 neighbor 3.3.3.3 remote-as 65001 neighbor 3.3.3.3 update-source 1.1.1.1 neighbor 10.0.16.6 remote-as 2004.2 R6配置:外部EBGP邻居眼中的联邦
R6在AS 200,它不需要知道联邦内部结构,只需要把R1当作AS 100的边界路由器即可。
set interfaces ethernet eth0 address '10.0.16.6/30' set interfaces loopback lo0 address '6.6.6.6/32' set interfaces loopback lo1 address '203.0.113.1/24' set protocols bgp 200 set protocols bgp 200 neighbor 10.0.16.1 remote-as '100' set protocols bgp 200 address-family ipv4-unicast network '203.0.113.0/24'这里的remote-as 100是整个实验第一个“坑”。很多人会下意识填65001,因为R1配置BGP时的本地AS就是65001。但在联邦环境中,真实EBGP邻居必须用联邦ID去和对端建邻居,否则R6发出去的OPEN报文里携带的AS号是它期待的100,而R1回应的AS号是65001,两边对不上,会话起不来。
4.3 R2配置:IBGP + 联邦EBGP双角色
R2要同时和R1、R3建立IBGP,并且和R4建立联邦EBGP。来看完整配置:
set interfaces ethernet eth0 address '10.0.12.2/30' set interfaces ethernet eth1 address '10.0.23.2/30' set interfaces ethernet eth2 address '10.0.24.2/30' set interfaces loopback lo0 address '2.2.2.2/32' set protocols ospf parameters router-id '2.2.2.2' set protocols ospf area 0 network '2.2.2.2/32' set protocols ospf area 0 network '10.0.0.0/16' set protocols bgp 65001 set protocols bgp 65001 confederation identifier '100' set protocols bgp 65001 confederation peers '65002' set protocols bgp 65001 neighbor 1.1.1.1 remote-as '65001' set protocols bgp 65001 neighbor 1.1.1.1 update-source '2.2.2.2' set protocols bgp 65001 neighbor 3.3.3.3 remote-as '65001' set protocols bgp 65001 neighbor 3.3.3.3 update-source '2.2.2.2' set protocols bgp 65001 neighbor 10.0.24.4 remote-as '65002'注意最后一行,联邦EBGP邻居R4的remote-as是65002,这和普通EBGP唯一一样的地方。区别在于前面已经声明了confederation peers 65002,所以R2知道这个邻居是自己人。
4.4 R4、R5配置:另一个子AS的完整示例
R4属于AS 65002,它要建立两台IBGP和一台联邦EBGP:
set interfaces ethernet eth0 address '10.0.24.4/30' set interfaces ethernet eth1 address '10.0.45.4/30' set interfaces loopback lo0 address '4.4.4.4/32' set protocols ospf parameters router-id '4.4.4.4' set protocols ospf area 0 network '4.4.4.4/32' set protocols ospf area 0 network '10.0.0.0/16' set protocols bgp 65002 set protocols bgp 65002 confederation identifier '100' set protocols bgp 65002 confederation peers '65001' set protocols bgp 65002 neighbor 5.5.5.5 remote-as '65002' set protocols bgp 65002 neighbor 5.5.5.5 update-source '4.4.4.4' set protocols bgp 65002 neighbor 10.0.24.2 remote-as '65001'R5的配置思路和R4对称,IBGP邻居是4.4.4.4,联邦EBGP邻居是R3的10.0.35.3,业务网段宣告为172.16.20.0/24。R3配置完OSPF和IBGP后,加上业务网段宣告即可:
set protocols bgp 65001 address-family ipv4-unicast network '172.16.10.0/24'同样,R5:
set protocols bgp 65002 address-family ipv4-unicast network '172.16.20.0/24'这里的network命令要求本地路由表里必须存在对应网段,所以业务网段要配置成Loopback1并保持up状态。
4.5 我建议的配置顺序
联邦配置最容易乱,我建议你按这个顺序操作:先把所有接口地址配完,再把OSPF跑通,确认每台设备都能ping通所有Loopback地址;然后配置BGP的confederation identifier、confederation peers;最后再配置邻居关系,先从IBGP开始,再联邦EBGP,最后真实EBGP。
这样可以最大程度减少“路由学不到时不知道是IGP问题还是BGP问题”的排查成本。
5. 验证路由行为:AS_PATH、下一跳与选路对比
配置全部完成后,按下面这个顺序做验证,每个点都能看到联邦与其他BGP类型的关键差异。
5.1 看联邦EBGP的下一跳保留现场
先在R2上查看从AS 65002学到的业务路由 172.16.20.0/24:
show bgp ipv4 unicast 172.16.20.0/24类似下面的输出:
BGP routing table entry for 172.16.20.0/24 Paths: (1 available, best #1) 65002 5.5.5.5 from 10.0.24.4 (4.4.4.4) Origin IGP, metric 0, localpref 100, valid, external, best这个输出信息量非常大。AS_PATH显示的是65002,说明这是R5在AS 65002里通过IBGP传给R4,再由R4通过联邦EBGP传给R2的。下一跳是5.5.5.5,这是R5的Loopback地址,而不是R4的地址。
如果这是真实EBGP,下一跳一定会被改成R4的10.0.24.4;因为它是联邦EBGP,下一跳被原样保留。这就是联邦“像EBGP但不是EBGP”最直接的证据。
5.2 看联邦EBGP的AS_PATH内部可见
同样的路由,在R2的BGP表里AS_PATH是65002。这个子AS号在联邦内部是可见的,它用来做联邦内部的环路检测。
如果R2再把这条路由通过联邦EBGP传给R3,R3的BGP表里AS_PATH会变成“65002 65001”这样的形式吗?这里有个细节:IBGP传播不会追加AS号,联邦EBGP传播会追加发送方的子AS号。所以R3从R2学到这条路由时,AS_PATH显示的是65002(R2在追加时写自己子AS 65001吗?实际上R2传给R3如果走IBGP,不追加;如果走联邦EBGP,路径不同)。
在我的拓扑里,R3有两台IBGP邻居R1、R2,所以R3大概率从IBGP学到172.16.20.0/24,AS_PATH仍然是65002。你可以自己在实验里对比一下:从IBGP学到的和从联邦EBGP学到的,AS_PATH长度差多少。这就是联邦EBGP追加子AS号的直观体现。
5.3 看真实EBGP邻居如何“只见联盟不见子AS”
切到R6,查看172.16.20.0/24:
show bgp ipv4 unicast 172.16.20.0/24输出类似:
BGP routing table entry for 172.16.20.0/24 Paths: (1 available, best #1) 100 10.0.16.1 from 10.0.16.1 (1.1.1.1) Origin IGP, metric 0, localpref 100, valid, external, best看到区别了吗?R6的AS_PATH只有100,完全没有65001和65002。R6只知道AS 100这个整体,联邦内部的子AS结构对外完全透明。这就是联邦对外表现为单AS的机制。
如果你在这里看到了65001或者65002,说明有些设备漏配了confederation identifier或confederation peers,导致子AS号没有被正确剥离。
5.4 查看外部路由在联邦内的传播
再看反向流量。R6通告的203.0.113.0/24进入联邦后,在R2上查看:
show bgp ipv4 unicast 203.0.113.0/24你会看到AS_PATH为200,下一跳是1.1.1.1。这条路由从R1传到R2走IBGP,下一跳是R1的Loopback,这符合IBGP规则;再传到R4走联邦EBGP,下一跳仍然是1.1.1.1,没有被R2篡改。R4必须通过OSPF能到达1.1.1.1,否则这条路由在R4上就是死路由。
我建议你在实验里故意把R4上关于1.1.1.1/32的OSPF路由删掉,然后再看R4的BGP表,你会看到路由还在,但ip route找不到1.1.1.1,数据面完全无法转发。这个坑很值得自己踩一次。
5.5 冗余验证:断掉一条联邦EBGP连接
联邦的优势之一是多路径冗余。你可以把R2和R4之间的链路或BGP会话shutdown,然后观察172.16.20.0/24这条路由的路径变化。
正常情况下,R3和R5之间的联邦EBGP连接会承担起路由传递任务,R2依然能从R3学到关于172.16.20.0/24的路由(R2到R3有IBGP)。整个联邦内所有设备依然能学到全部前缀。这比单点RR的组网抗故障能力强。
如果你的实验环境里有现成的Controller或自动化工具,可以写个简单的脚本来轮询show bgp summary,观察断链后会话状态的变化时间。实测下来联邦的收敛速度取决于IGP感知速度,一般不超过几秒。
6. 联邦实验里最容易翻车的三个地方
这部分是我自己搭建实验时踩过的坑,还有一个是学员群里高频出现的问题。单独写一节,希望你能绕开。
6.1 外部邻居的remote-as填错:把联盟ID当本地AS
这是频率最高的错误。很多人在R6上看R1的本地AS是65001,于是把R6的neighbor remote-as配成65001,结果是会话一直起不来。
原因是真实EBGP邻居必须用联邦对外的联盟ID去建邻居。R1对外是AS 100,R6必须写remote-as 100;R1对R6则写remote-as 200。两者都在自己本地BGP进程里填了confederation identifier 100,FRR在处理对外EBGP会话时使用100作为自身AS号。
如果你看到BGP邻居反复进入Active状态,并且系统日志里有类似“BGP Notification sent”的报错,第一反应就去看remote-as是不是填成了65001。
6.2 漏配confederation peers:路由行为全线混乱
联邦EBGP会话有一个特点:即使不配置confederation peers,R2和R4之间的EBGP会话也能建立成功。因为它们的本地AS号确实不同,65001对65002,协议层面认为这就是两个不同的AS。
但这样建立起来的会话不是联邦行为,而是真实EBGP行为。后果包括:下一跳被修改、LOCAL_PREF被重置、MED被重置,更严重的是AS_PATH里的子AS号没有被隐藏,R6会看到65001、65002这些子AS号。整个“联邦对外表现为单AS”的承诺就失效了。
所以检查配置时,一定要确认所有联邦内的路由器都同时配置了confederation identifier和confederation peers。用show running-config过滤bgp相关段落,检查每一台。
6.3 下一跳不可达:联邦EBGP不会帮你改下一跳
联邦EBGP保留下一跳这个特性,在不理解的人看来就是个大坑。路由学过来了,BGP表里也是valid的,但就是ping不通业务地址,一看ip route,下一跳对应地址没有路由。
原因就是前面反复强调的:联邦EBGP不修改下一跳,接收方必须自己通过IGP知道下一跳怎么走。所以在联邦组网里,底层IGP的覆盖范围必须包含所有可能成为BGP下一跳的地址。
我自己的习惯是:把每台设备的Loopback0都宣告进OSPF,并且BGP的IBGP会话全部用Loopback地址建立。这样下一跳地址一定是Loopback地址,你只需要保证所有路由器的Loopback全网互通,就不会有下一跳问题。
6.4 联邦EBGP用Loopback建邻记得加多跳
这是一个进阶坑。我在拓扑里联邦EBGP用的是直连接口,不需要额外配置。但如果你在生产或实验里把联邦EBGP会话也用Loopback地址建立,比如R2和R4之间用2.2.2.2对4.4.4.4,那就要配置ebgp-multihop。
因为EBGP的报文TTL默认是1,跨多跳建立会话时TTL会被丢弃。真实EBGP和联邦EBGP在这个行为上没有区别。VyOS里对应的命令是:
set protocols bgp 65001 neighbor 4.4.4.4 ebgp-multihop '2'FRR里是:
neighbor 4.4.4.4 ebgp-multihop最后分享一个我实际实验时的小习惯:先把所有BGP邻居用直连接口建起来,跑通路由以后再改成Loopback,这样能快速隔离到底是BGP配置问题还是IGP问题。联邦这个特性,生产环境里确实不如RR常见,但在需要多个管理域自治、对外又要隐藏内部细节的组网里价值很高,尤其是配合RR把子AS内部再折叠一次,能撑起非常大的网络规模。你如果也在搭类似的实验,建议把“下一跳不变”和“AS_PATH隐藏”这两个点亲手抓一遍。抓住这两个点,你对BGP联邦的理解基本就到下一个层次了。