3. 数据中心Underlay网络设计

在BGP EVPN数据中心架构中,Underlay网络承担着VTEP之间VXLAN封装后报文的逐跳转发任务。它不感知租户信息,只负责把IP包从一台Leaf送到另一台Leaf。因此Underlay的设计目标非常明确:可达、等价、快速收敛。本节围绕基于SONiC的eBGP Underlay组网,从IP地址规划、BGP邻居配置、ECMP负载均衡到BFD快速故障检测,给出可落地的设计方法与配置示例。

一、为什么Underlay选择eBGP而非OSPF或IS-IS

传统数据中心Underlay常用OSPF或IS-IS。但在Spine-Leaf架构中,eBGP具有天然优势:拓扑是严格的两层Clos,每台Leaf只与所有Spine相邻,每台Spine只与所有Leaf相邻,没有复杂的多区域或层级设计需求;eBGP的AS号可以按设备角色分配,天然形成清晰的拓扑边界;BGP的路径属性、路由策略和ECMP能力成熟,且与上层EVPN共用同一控制平面协议栈,运维模型统一。在SONiC中,FRR作为路由协议栈,eBGP的配置与Linux生态一致,便于自动化下发。

典型设计是:每台Spine使用相同的AS号(如65001),每台Leaf使用各自独立的AS号(如65101、65102……),Leaf与Spine之间建立eBGP邻居。这种“Spine同AS、Leaf异AS”的方式称为BGP AS per Leaf,它让每台Leaf的路由决策保持独立,同时Spine侧配置简洁。

二、IP地址规划

Underlay的IP规划应遵循“点对点互联用/31或/30、Loopback用/32、按角色分块”的原则。推荐使用私有地址段10.0.0.0/8进行整体划分:

  • Loopback0(Router ID与VTEP源地址):每台设备一个/32,例如Spine1为10.0.0.1/32,Spine2为10.0.0.2/32,Leaf1为10.0.0.11/32,Leaf2为10.0.0.12/32。
  • Spine-Leaf互联链路:使用10.1.0.0/16,每对链路分配一个/31。例如Spine1-Leaf1为10.1.1.0/31,Spine1侧取.0,Leaf1侧取.1;Spine1-Leaf2为10.1.1.2/31,依此类推。
  • Leaf-服务器接入链路:使用10.2.0.0/16,按机柜或Leaf编号分块,便于后续扩展。

使用/31可以节省地址并避免广播地址浪费,在SONiC的FRR中完全支持。规划时建议用表格固化,例如:

链路网段Spine侧地址Leaf侧地址
Spine1–Leaf110.1.1.0/3110.1.1.010.1.1.1
Spine1–Leaf210.1.1.2/3110.1.1.210.1.1.3
Spine2–Leaf110.1.1.4/3110.1.1.410.1.1.5
Spine2–Leaf210.1.1.6/3110.1.1.610.1.1.7

三、BGP邻居配置

在SONiC中,BGP配置通过FRR的vtysh或config_db下发。以Leaf1为例,它需要与Spine1、Spine2分别建立eBGP邻居。关键配置包括:本机AS 65101、Router ID取Loopback0地址、向邻居宣告Loopback0和互联网段、设置ECMP最大路径数。

router bgp 65101
 bgp router-id 10.0.0.11
 bgp bestpath as-path multipath-relax
 maximum-paths 4
 neighbor 10.1.1.0 remote-as 65001
 neighbor 10.1.1.4 remote-as 65001
 !
 address-family ipv4 unicast
  network 10.0.0.11/32
  network 10.1.1.0/31
  network 10.1.1.4/31
  neighbor 10.1.1.0 activate
  neighbor 10.1.1.4 activate
 exit-address-family

其中bgp bestpath as-path multipath-relax允许AS路径长度相同但AS号不同的多条路径形成ECMP,这在Spine同AS、Leaf异AS的场景下是必需的。Spine侧则配置与所有Leaf的邻居,并宣告自己的Loopback0。配置完成后,用show bgp ipv4 unicast summary确认邻居状态为Established,用show bgp ipv4 unicast查看是否学到对端Loopback路由。

四、ECMP负载均衡

当Leaf1同时通过Spine1和Spine2学到Leaf2的Loopback 10.0.0.12/32时,两条路径的AS路径长度相同、下一跳不同,在开启multipath后形成ECMP。SONiC底层使用Linux内核的哈希算法,默认基于五元组(源IP、目的IP、源端口、目的端口、协议)进行流级负载均衡。同一流量流走同一条路径,避免乱序;不同流分散到不同Spine,提升整体带宽利用率。

验证ECMP是否生效,可执行show ip route 10.0.0.12/32,输出中应看到两个下一跳,并带有“ECMP”标记。若只显示一条,需检查maximum-paths、multipath-relax以及两条路径的AS路径是否确实等长。

eBGP Underlay:ECMP与BFD协同 Spine1 AS 65001 · Lo 10.0.0.1 Spine2 AS 65001 · Lo 10.0.0.2 Leaf1 AS 65101 · Lo 10.0.0.11 Leaf2 AS 65102 · Lo 10.0.0.12 10.1.1.0/31 eBGP + BFD 10.1.1.2/31 10.1.1.4/31 10.1.1.6/31 eBGP + BFD Leaf1→Leaf2:两条等价路径 五元组哈希 · 流级ECMP BFD:300ms×3 检测 故障时快速撤销下一跳

五、BFD快速故障检测

eBGP默认的Keepalive为60秒、Hold Time为180秒,故障感知太慢。在Underlay中,链路或Spine节点故障必须让Leaf在毫秒级感知并切换路径。BFD(双向转发检测)通过独立于BGP的快速握手报文实现这一点。在SONiC中,为每个eBGP邻居启用BFD:

 neighbor 10.1.1.0 remote-as 65001
 neighbor 10.1.1.0 bfd
 neighbor 10.1.1.0 bfd liveness-detection transmit-interval 300
 neighbor 10.1.1.0 bfd liveness-detection multiplier 3

上述配置表示每300ms发送一次BFD控制报文,连续3次未收到即判定邻居Down,检测时间约900ms。BFD会话Down后,FRR会立即撤销该邻居对应的BGP路由,ECMP组中只剩另一条路径,流量在毫秒级完成切换。验证时可用show bfd peers查看会话状态,用show bgp ipv4 unicast summary确认邻居关系变化。

BFD的检测时间需与链路质量匹配。300ms×3适合大多数数据中心;若链路抖动较多,可放宽到500ms×3,避免误切换。

六、设计要点回顾

基于SONiC的eBGP Underlay,核心是把“可达性”交给BGP、“等价性”交给multipath-relax、“快速性”交给BFD。IP规划用/31和/32保持简洁;AS号按角色分配,Spine同AS、Leaf异AS;ECMP依赖等长AS路径和maximum-paths;BFD把故障检测从分钟级压到毫秒级。四者配合,才能支撑上层EVPN的稳定运行。