第一次接触BGP联盟这个概念时,我正负责一个跨国企业的网络改造项目。当时AS内部有超过50台路由器,按照传统iBGP全互联方案,需要建立1225条连接。每次新增设备都要调整几十台设备的配置,运维团队苦不堪言。直到一位华为工程师建议我们试试BGP联盟技术,才真正解决了这个痛点。
BGP联盟本质上是一种"分而治之"的解决方案。它把一个大型自治系统(AS)划分成多个成员AS(Member-AS),对外仍然表现为一个整体。这就像一个大公司下设多个事业部,对外统一用集团公司名义,内部则各自独立运营。在实际组网中,这种架构带来了三个显著优势:
首先,连接数呈几何级数下降。原先n台设备需要n(n-1)/2条连接,采用联盟后,假设分成k个成员AS,每个子AS平均m台设备,总连接数就变为k×m(m-1)/2 + k(k-1)/2。在我们案例中,划分成5个成员AS后,连接数从1225骤降到130。
其次,故障域被有效隔离。去年我们在上海机房遇到过一起BGP会话震荡事件,传统全互联架构下,这个故障瞬间蔓延到全网。而采用联盟架构后,问题被限制在单个成员AS内,其他区域业务完全不受影响。
最后是配置管理的简化。现在新增设备只需要在所属成员AS内配置,不再需要全网调整。华为设备的confederation peer-as命令可以预定义所有成员AS关系,配置模板化程度大大提高。
在华为路由器上配置联盟时,有两个关键参数必须明确:confederation id和本地AS号。前者是整个联盟对外的统一标识,后者是设备在联盟内部的"身份证"。这就像员工既有集团工号(联盟ID),又有部门编号(成员AS号)。
实际操作中,我强烈建议使用私有AS号(64512-65534)作为成员AS号。曾经有客户图省事直接使用公有AS号,结果与合作伙伴网络出现路由混乱。配置示例:
bash复制# 联盟AS为65000,当前设备属于成员AS 65001
sysname R1
bgp 65001
confederation id 65000
confederation peer-as 65002 65003 # 声明其他成员AS
华为设备处理联盟路由时有个细节:发送给联盟外对等体时,会自动过滤AS_PATH中的成员AS号。但联盟内部传递时,会用特殊括号标识这些AS号。通过display bgp routing-table命令可以看到:
联盟成员AS之间的EBGP(我们称为联盟EBGP)与标准EBGP有重要区别。最典型的就是next-hop处理:普通EBGP默认修改下一跳,而联盟EBGP会保留原始下一跳。这常导致新手配置时出现路由不可达。
去年在深圳某项目就遇到过这种情况。R1(成员AS 65001)通过联盟EBGP收到R2(成员AS 65002)的路由后,下一跳仍然是R2的接口地址。但由于两个成员AS间未运行IGP,导致路由无效。解决方法有两种:
实测发现,华为设备对联盟EBGP的路由处理还有这些特性:
我们用一个典型的三层网络架构来演示:总部(AS 100)、联盟AS(AS 200拆分为65001/65002)、分支机构(AS 300)。物理连接如下:
首先配置骨干区域的联盟基础:
bash复制# R2配置
bgp 65001
confederation id 200
confederation peer-as 65002
peer 10.1.23.3 as-number 65002 # 联盟EBGP对等体
peer 10.1.12.1 as-number 100 # 外部EBGP对等体
# R3配置
bgp 65002
confederation id 200
confederation peer-as 65001
peer 10.1.23.2 as-number 65001
peer 10.1.34.4 as-number 300
关键点在于confederation peer-as要包含所有需要建立联盟EBGP的成员AS号。曾经有工程师漏配了这个参数,导致路由在成员AS间无法传递。
联盟内部需要特别注意路由策略的应用位置。建议在成员AS边界设备上统一配置:
bash复制# R2上配置路由引入策略
route-policy CONFED_IN permit node 10
if-match as-path-filter 100
apply local-preference 200
bgp 65001
peer 10.1.23.3 route-policy CONFED_IN import
华为设备处理联盟路由时,这些属性会特殊处理:
上周刚处理过一个典型案例:某银行联盟网络中,分支机构无法访问总部服务。通过以下步骤定位:
最终解决方案:
bash复制# 在R2上增加下一跳本地化配置
bgp 65001
peer 10.1.23.3 next-hop-local
# 同时在OSPF中发布互联网段
ospf 1
area 0
network 10.1.23.0 0.0.0.255
联盟环境下要特别注意路由聚合引发的环路风险。去年某云服务商就因此导致全网震荡。通过以下配置可以避免:
bash复制# 聚合路由时添加as-set参数
bgp 65001
aggregate 172.16.0.0 255.255.0.0 detail-suppressed as-set
华为设备会生成包含AS_CONFED_SET的AS_PATH,例如:(65001)[65002]这种形式。在display bgp routing-table输出中,注意观察:
在项目交付过程中,我总结了一个检查清单: