上一篇讲了 VXLAN 怎么封装、隧道怎么建。但静态配 VTEP 只能应付小规模——VTEP 一多就是 N² 条配置。这篇讲用 BGP 自动发现 VTEP 和 MAC 的方案:EVPN。
EVPN 的本质一句话:把二层的学习过程从"数据平面泛洪"搬到"控制平面 BGP"。原来靠泛洪问"这个 MAC 在哪",现在直接由 BGP 告诉你。
EVPN 是什么
EVPN(Ethernet VPN)不是新协议,它是 BGP 的一个地址族(AFI 25 / SAFI 70)。你原来用 BGP 传 IPv4 路由、用 MP-BGP 传 VPNv4 路由,现在用同一个 BGP 传二层可达性信息。
它的前身是 VPLS(用 MPLS 做二层 VPN),但 VPLS 有个致命问题:它靠泛洪学习 MAC(flood-and-learn),VTEP 一多,泛洪流量指数级增长。
| flood-and-learn(传统 VXLAN) | EVPN | |
|---|---|---|
| MAC 学习 | 数据平面泛洪 + 反向学习 | 控制平面 BGP 通告 |
| 未知单播/广播 | 全网泛洪(BUM 流量大) | 抑制泛洪(ARP 抑制、MAC 已学到就不泛洪) |
| VTEP 发现 | 手工配 peer-list | Type 3 自动发现 |
| 多归属 | 不支持(或靠 STP) | ESI + DF 选举,支持双活 |
| 收敛速度 | 慢(要等泛洪) | 快(BGP 撤销即知) |
五种路由类型
EVPN 一共定义了五种路由类型(Type 1~5),每种解决一个具体问题:
Type 3 · IMET 路由:先把隧道建起来
全称 Inclusive Multicast Ethernet Tag Route。这是 EVPN 里最先工作的一个——没有它,其他一切都免谈。
- 每台 VTEP 都会为每个 VNI 发一条 Type 3 路由,内容是自己的 VTEP IP 地址;
- 其他 VTEP 收到后,就知道"这个 VNI 里还有谁",自动建立全互联的 BUM(广播/未知单播/组播)转发隧道;
- 相当于自动完成了静态方案里的
head-end peer-list。
所以排错第一步永远是:Type 3 收到了吗?
Type 2 · MAC/IP 路由:EVPN 的核心
这是最重要的一种,用来通告 MAC 地址和 ARP/IP 信息。一条 Type 2 路由的关键字段:
| 字段 | 说明 |
|---|---|
| RD | 路由标识符,让相同 MAC 前缀能共存 |
| ESI | Ethernet Segment Identifier,多归属时标识同一段接入链路 |
| Ethernet Tag ID | 通常填 0(VLAN-based 模式)或 VLAN ID |
| MAC Address | 虚机的 MAC(48 位) |
| IP Address | 虚机的 IP(32/128 位)。可以不带,带了才能做 ARP 抑制 |
| MPLS Label1 | 对应 L2VNI,二层转发用 |
| MPLS Label2 | 对应 L3VNI,三层转发用(分布式网关场景) |
Type 2 分两种:
- 只带 MAC(不带 IP):纯二层转发用;
- MAC + IP 都带:除了转发,还能代替 ARP——这叫 ARP 抑制。本机有这条 Type 2 路由,就知道"某个 IP 对应某个 MAC",不用再发 ARP 广播。
ARP 抑制的价值很大:原来每次跨 VTEP 访问都要泛洪一次 ARP 广播,现在直接查 EVPN 表。在一个几千台虚机的数据中心里,这能省掉绝大部分 BUM 流量。
Type 1 · A-D 路由:快速收敛与多归属
全称 Ethernet Auto-Discovery Route。它的作用是提前通告"我这段链路在不在"。
- 配合 ESI 使用。当一条接入链路故障时,撤销 Type 1 路由就能让对端立刻知道,不用等 MAC 老化;
- 还用于别名(Aliasing)——多归属场景下,告诉远端"通过我这条路也能到达那个 MAC",让流量可以做负载分担。
Type 4 · ES 路由:多归属的 DF 选举
全称 Ethernet Segment Route。当一台服务器双归到两台 Leaf(这叫多归属),两台 Leaf 需要选一个 DF(Designated Forwarder,指定转发者)来决定谁负责向服务器转发 BUM 流量——否则服务器会收到两份。
Type 4 路由就是用来做这个选举的:携带 ESI 和 VTEP IP,配合 DF 选举算法(基于 VNI 的哈希)选出 DF。
多归属还有几种模式,按可靠性递增:
| 模式 | 说明 |
|---|---|
| 单活(Single-Active) | 只有一台 Leaf 转发,另一台待命 |
| 双活(All-Active) | 两台都转发,需要 DF 选举 + 别名 + 水平分割(Split-Horizon)防环 |
Type 5 · IP Prefix 路由:三层也走 EVPN
Type 2 通告的是"某个 IP 主机",但如果要通告一整段 IP 前缀(比如 10.1.0.0/16)呢?用 Type 5。
- Type 5 让 EVPN 可以承载三层 VPN 路由,功能上等价于 MPLS VPN 的 VPNv4 路由;
- 典型场景:数据中心与外部网络互通的边界(DC 网关、DCI),用 Type 5 把整个网段通告进来;
- 好处是不用为每个 IP 都发一条 Type 2,前缀聚合后规模小得多。
两个关键扩展团体属性
EVPN 路由除了标准属性,还靠几个扩展团体属性携带额外信息。分布式网关能不能工作,全看这两个:
Router's MAC Extended Community
这是分布式网关的命脉。在分布式网关下,每台 VTEP 都配了同一个网关 IP(比如都是 192.168.10.1),但各自的 Router MAC 不同。
Type 2 路由带上这个属性后:
- 对端 VTEP 就知道"跨子网转发时,目的 MAC 要填那台 VTEP 的 Router MAC";
- 数据帧封装时:内层目的 MAC = 对端 VTEP 的 Router MAC,内层目的 IP = 虚机 IP;
- 这样对端收到后,看到目的 MAC 是自己,就知道"这是要我做三层转发的包"。
MAC Mobility Extended Community
虚机迁移时,同一个 MAC 会从一台 VTEP 跑到另一台,这时两条 Type 2 路由会冲突。用这个属性解决:
- 携带一个序列号(Sequence Number);
- MAC 迁移一次,序列号 +1;
- 收到序列号更大的路由,就认为 MAC 迁走了,更新表项;
- 如果是本机产生的 MAC 被抢走,本机也会撤销自己的路由。
EVPN 的完整工作流程
① 承载网就绪
VTEP 之间三层可达(IS-IS / OSPF)+ BGP EVPN 邻居建立(Established)
② 隧道自动发现
每台 VTEP 为每个 VNI 发 Type 3(IMET)路由
→ 收到对端的 VTEP IP,自动建立全互联 BUM 隧道
★ 这一步做完,VXLAN 的"二层网络"就通了
③ MAC 学习
虚机上线 → 本端 VTEP 学到 MAC
→ 用 Type 2 路由通告给所有对端 VTEP
→ 对端直接写进转发表,【不需要泛洪】
④ ARP 抑制
Type 2 带了 IP → 对端 VTEP 本地就有 IP-MAC 映射
→ 虚机发 ARP 请求时,VTEP 直接代答,不泛洪
⑤ 跨子网转发(分布式网关)
Type 2 带 L3VNI + Router's MAC 扩展团体
→ 本地 VTEP 查到对端 VTEP 的 Router MAC
→ 内层目的 MAC 填它,封装后发出去
⑥ 多归属
Type 1(A-D)+ Type 4(ES)→ DF 选举 + 快速收敛
⑦ MAC 迁移
Type 2 带 MAC Mobility → 序列号比较,谁新听谁的
集中式网关 vs 分布式网关下的 EVPN
| 集中式网关 | 分布式网关 | |
|---|---|---|
| 网关在哪 | 只在核心/边界设备 | 每台 Leaf 都有 |
| L3VNI 数量 | 只在网关设备上 | 每台 Leaf 都要有 |
| Type 2 是否带 L3VNI | 网关设备发的带 | 所有 Leaf 发的都带 |
| Router's MAC 扩展团体 | 需要 | 必须(否则跨子网转不了) |
| ARP 表项分布 | 集中在网关,网关压力大 | 分布在各 Leaf,压力分散 |
| 转发路径 | 跨子网要绕核心 | 本地直接转,路径最短 |
配置:华为 EVPN over VXLAN
bridge-domain 10
vxlan vni 5010 # L2VNI
#
interface Vbdif10
ip binding vpn-instance VPN_A
ip address 192.168.10.1 255.255.255.0 # 分布式网关:每台 Leaf 都配这个地址
evpn vpn-instance EVPN_A bd-mode
route-distinguisher 100:1
vpn-target 1:1 export-extcommunity
vpn-target 1:1 import-extcommunity
# 三层:绑定 L3VNI
vxlan vni 1000 # L3VNI
bgp 100
peer 2.2.2.2 as-number 100
peer 2.2.2.2 connect-interface LoopBack0
l2vpn-ad-family # ★ 华为的 EVPN 地址族
peer 2.2.2.2 enable
peer 2.2.2.2 advertise-community # 要带 RT 和扩展团体,必须开
peer 2.2.2.2 reflect-client # 如果是 RR 场景
ipv4-family vpn-instance VPN_A
import-route direct
★ 三层要用起来,还得在 VPN 实例里引入路由,
否则 Type 5 / Type 2 的 L3 部分没有来源
验证与排错
# EVPN 路由(按类型看)
display bgp evpn all routing-table # ★ 所有 EVPN 路由
display bgp evpn all routing-table ad-route # Type 1
display bgp evpn all routing-table mac-route # ★ Type 2(最常看)
display bgp evpn all routing-table inclusive-route # ★ Type 3(隧道发现)
display bgp evpn all routing-table es-route # Type 4
display bgp evpn all routing-table prefix-route # Type 5
# 隧道与表项
display vxlan tunnel # VXLAN 隧道
display vxlan vni # VNI 状态
display mac-address bridge-domain 10 # 本地 MAC
display bgp evpn all routing-table mac-route 2 # 查某个 MAC 的通告情况
# 邻居
display bgp peer l2vpn-ad # EVPN 地址族邻居
排错按"依赖顺序"往下走,不要乱猜:
- EVPN 邻居 Established 吗(
display bgp peer l2vpn-ad)—— 没起来后面都别查; - Type 3 收到了吗(
inclusive-route)—— 没收到说明 VNI 配置或 RT 不匹配,隧道建不起来; - Type 2 收到了吗(
mac-route)—— 隧道通了但没有 MAC 路由,查两端 VNI/RT 是否一致; - 跨子网不通 —— 查 Type 2 有没有带 L3VNI 和 Router's MAC 扩展团体,以及本机有没有 L3VNI 的 VRF;
- 多归属服务器收到重复包 —— 查 Type 4 的 DF 选举是否正常,两台 Leaf 是不是都以为自己是 DF。
一句话总结:Type 3 建隧道、Type 2 学 MAC 和抑制 ARP、Type 1 管快速收敛与多归属别名、Type 4 选 DF、Type 5 通三层的网段。两个扩展团体属性是灵魂:Router's MAC 让分布式网关能跨子网转发,MAC Mobility 让虚机迁移能收敛。
📌 本篇整理自 2024–2025 的「数通」学习笔记(HCIE-Datacom 方向)
合并了原始笔记中「EVPN vxlan 介绍 / EVPN原理 / EVPN路由 / EVPN 表项 / EVPN工作流程 / EVPN接入 / EVPN配置案例 / evpn vxlan 配置 / 类型概括 / type 1~5 类 / type-ARP路由 / type 2 -MAC路由」近二十页。
原笔记以胶片截图为主(含 display bgp evpn 输出与组网图),本文把五种路由类型重新组织成"各解决什么问题"的叙事,并补齐了 ESI、DF 选举、MAC Mobility 序列号等细节。
配置命令保留华为 VRP 原样(EVPN 地址族在华为叫 l2vpn-ad-family)。