4. EVPN控制平面基础
EVPN(Ethernet VPN)之所以能在云数据中心里替代传统 Flood-and-Learn VXLAN,核心在于它把“二层转发表”这件事从数据平面搬到了控制平面。BGP 在这里不再只是传 IPv4/IPv6 前缀,而是新增了一个地址族——L2VPN EVPN(AFI 25 / SAFI 70),用它来承载 MAC、IP、VTEP 以及多播成员等信息。理解 EVPN,本质上就是理解“BGP 里跑了哪些路由类型、这些路由靠什么区分租户、又怎么落到本地的 EVPN 实例上”。
一、BGP EVPN 地址族:控制平面的“新货舱”
在 Arista EOS 上,BGP 默认只激活 IPv4 unicast。要跑 EVPN,必须在邻居和全局两个层面都激活 L2VPN EVPN 地址族。它和 IPv4 地址族是并列关系,而不是替代关系:底层仍靠 IPv4 建立 BGP 会话(通常用 Loopback 作为更新源),EVPN 的 NLRI 则封装在 MP_REACH_NLRI 属性里传输。
router bgp 65001
router-id 10.0.0.1
neighbor 10.0.0.2 remote-as 65001
neighbor 10.0.0.2 update-source Loopback0
neighbor 10.0.0.2 send-community extended
address-family evpn
neighbor 10.0.0.2 activate
这里有两个容易踩的细节:一是 send-community extended 必须开,因为 RT 是通过 BGP 扩展团体属性携带的,不开对端就收不到 RT;二是 EVPN 邻居通常同时激活 IPv4 地址族用于 underlay 路由,两者互不冲突。
二、路由类型 1–5:五种“信使”各司其职
EVPN NLRI 用 Route Type 字段区分不同用途,最常用的是 1 到 5 型:
- Type 1(Ethernet Auto-Discovery,A-D 路由):用于多归场景的别名(Alias)和指定转发者(DF)选举,携带 ESI。它让同一台主机双归到两台 Leaf 时,远端只学一份 MAC,避免重复转发。
- Type 2(MAC/IP Advertisement):最核心的一类,携带 MAC、可选 IP、VTEP 地址和 VNI。远端 Leaf 收到后直接写入 MAC 表,指向对端 VTEP,实现“控制平面学 MAC”。
- Type 3(Inclusive Multicast Ethernet Tag):携带本端 VTEP 地址和 VNI,用于建立 BUM(广播、未知单播、多播)流量的头端复制列表。没有它,VXLAN 里的 ARP 广播就发不出去。
- Type 4(Ethernet Segment Route):配合 Type 1 完成 DF 选举,携带 ESI 和 IP 长度,用于多归成员之间互相发现。
- Type 5(IP Prefix Route):携带 IP 前缀和网关信息,用于 L3 对称 IRB 场景下跨子网路由,让 EVPN 同时承担“分布式网关”的路由发布职责。
可以这样记:Type 2 管 MAC/IP,Type 3 管 BUM,Type 1/4 管多归,Type 5 管三层前缀。一个典型双栈 EVPN 环境里,Type 2 和 Type 3 是必现的,Type 5 在需要跨子网时出现。
三、RD 与 RT:租户隔离的“双保险”
很多人会把 RD 和 RT 混为一谈,其实分工完全不同。RD(Route Distinguisher)解决的是“不同租户用了相同 MAC/IP 前缀时,BGP 如何区分”,它被拼在前缀前面,使 NLRI 全局唯一;RT(Route Target)解决的是“这条路由该被哪些 EVPN 实例导入”,它是 BGP 扩展团体属性,控制路由的导入导出策略。
常见写法是 RD 用 Router-ID:VNI,RT 用 AS:VNI。例如 VNI 10010 对应租户 A:
vlan 110
name TenantA-Web
!
interface Vxlan1
vxlan source-interface Loopback0
vxlan vlan 110 vni 10010
!
router bgp 65001
vlan 110
rd 10.0.0.1:10010
route-target both 65001:10010
这里 route-target both 表示同时作为 import 和 export 目标。如果两端 RT 不匹配,即使 Type 2 路由收到了,也不会被导入本地 EVPN 实例,MAC 表就是空的——这是排障时最常见的“路由在、表项不在”的原因。
四、EVPN 实例:VLAN 与 VNI 的绑定容器
EVPN 实例是 EOS 里把“本地 VLAN / VNI / RD / RT”绑在一起的逻辑单元。在 Arista 上,它通常以 vlan <id> 的形式出现在 router bgp 下,而不是像某些厂商那样单独建一个 EVPN instance 对象。一个 EVPN 实例至少包含:本地 VLAN、对应 VNI、RD、RT。Vxlan1 接口负责把 VLAN 映射到 VNI,BGP 的 vlan 段负责把 VLAN 映射到 RD/RT,两者必须一致,否则控制平面和数据平面会对不上。
五、Arista EVPN 配置框架:三层结构
把上面的内容串起来,Arista EVPN 的配置可以归纳为三层:Underlay 层(Loopback、OSPF/IS-IS/BGP 提供 VTEP 可达性)、VXLAN 层(Vxlan1 接口、source-interface、VLAN 到 VNI 映射)、EVPN 控制层(BGP EVPN 地址族、EVPN 实例、RD/RT)。三层缺一不可:Underlay 不通,VTEP 学不到;VXLAN 没映射,流量没隧道;EVPN 没配 RT,路由进不来。
排障时按这个顺序看:先确认 show bgp evpn summary 邻居是否 Established,再看 show bgp evpn route-type mac-ip 有没有对端 Type 2 路由,接着看 show vxlan address-table 是否学到远端 MAC,最后核对两端 RD/RT 和 VNI 是否一致。多数“VXLAN 不通”的问题,最终都落在 RT 不匹配或 VNI 映射不一致上。