第174篇:EVPN 的 MAC/IP 路由通告
关键词:EVPN Type2路由、MAC路由、IP路由、MAC-IP绑定、Active-DAC、Standby-DAC
一、引言
EVPN Type 2 路由(MAC/IP 可达性路由)是 EVPN 控制平面的核心。它通过 MP-BGP 显式通告 MAC 地址和可选的 IP 地址绑定信息,使所有 VTEP 能够精确知道每个 MAC 地址位于哪个 VTEP 下。这种显式通告机制彻底消除了传统 VPLS 中未知单播报文的泛洪,实现了精确转发,是 EVPN 相比 VPLS 在扩展性和性能方面的根本优势。
二、核心概念
2.1 Type 2 路由结构
EVPN Type 2 路由的 NLRI 格式:
| 字段 | 长度 | 说明 |
|---|---|---|
| Route Type | 1字节 | 固定为 2 |
| Route Length | 1字节 | 可变 |
| ESI Length | 1字节 | ESI 长度(0=无ES, 10=标准ES) |
| ESI | 0-20字节 | Ethernet Segment Identifier |
| MAC Length | 1字节 | MAC 地址长度(固定6) |
| MAC Address | 6字节 | 通告的 MAC 地址 |
| IP Address Length | 1字节 | 0=无IP, 4=IPv4, 16=IPv6 |
| IP Address | 0/4/16字节 | 可选的 IP 地址 |
2.2 Type 2 路由分类
| 类型 | IP 地址字段 | 说明 |
|---|---|---|
| MAC-only | 长度=0 | 仅通告 MAC 地址 |
| MAC+IPv4 | 长度=4 | 通告 MAC 和 IPv4 绑定 |
| MAC+IPv6 | 长度=16 | 通告 MAC 和 IPv6 绑定 |
| MAC+IP 移动 | 长度>0, 多NextHop | 支持 IP 移动性 |
2.3 MAC 路由 vs MAC+IP 路由
| 维度 | MAC-only 路由 | MAC+IP 路由 |
|---|---|---|
| NLRI | RD:ESI:MAC | RD:ESI:MAC:IP |
| 用途 | 二层转发查找 | 二层+三层转发查找 |
| 网关ARP | 需要ARP泛洪 | 无需ARP泛洪(BGP已通告IP绑定) |
| 性能 | 一般 | 优(消除ARP泛洪) |

三、技术细节
3.1 MAC 路由学习流程

3.2 MAC 路由的防环机制
EVPN 通过以下机制防止 MAC 路由环路:
| 机制 | 说明 |
|---|---|
| ESI 比较 | 同一 ES 下仅 Active VTEP 通告 Type 2 路由 |
| Next-Hop 自环检测 | 不接收 Next-Hop 为自身的路由 |
| BGP AS_PATH | BGP 环路检测(适用于 eBGP 场景) |
3.3 多归属场景下的 MAC 路由
当 CE 通过多个 VTEP(同一 ES)接入时:
| 状态 | Active VTEP | Standby VTEP |
|---|---|---|
| 正常 | 通告 Type 2 路由(带 ESI) | 不通告(等待切换) |
| Active 故障 | Standby 切换为 Active | 通告 Type 2 路由 |
| 同步期间 | 保持 Active,不撤销路由 | 学习 MAC 表但不通告 |
四、实战配置/案例分析
4.1 华为 EVPN Type 2 路由配置
# ========== VTEP1: 启用MAC+IP路由通告 ==========
[EVPN-PE1] vxlan vni 1000
[EVPN-PE1-vxlan-vni-1000] route-distinguisher 10.1.1.1:1000
[EVPN-PE1-vxlan-vni-1000] route-target both evpn 1000:1000
[EVPN-PE1-vxlan-vni-1000] mac-ip-advertisement enable
# 启用MAC+IP联合通告
# 配置Ethernet Segment(多归属)
[EVPN-PE1] bridge ethernet-segment 1
[EVPN-PE1-ethernet-segment-1] priority 32768
[EVPN-PE1-ethernet-segment-1] interface 100ge 1/0/1
# BGP EVPN地址族
[EVPN-PE1] bgp 65001
[EVPN-PE1-bgp-65001] address-family evpn
[EVPN-PE1-bgp-65001-evpn] network-type mac-ip
# 通告MAC+IP路由类型
4.2 验证 Type 2 路由
# 查看EVPN Type2路由
<EVPN-PE1> display bgp evpn routing-table type 2
Total: 5 routes
*> RD: 10.1.1.1:1000
ESI: 0000.0000.0000.0000.0001
MAC: 00:11:22:33:44:55
IP: 192.168.1.10
NextHop: 10.1.1.1
Type: Active-DAC
*> RD: 10.1.1.1:1000
ESI: 0000.0000.0000.0000.0002
MAC: 00:AA:BB:CC:DD:EE
IP: 192.168.1.20
NextHop: 10.1.2.1
Type: Active-DAC
# 查看MAC地址表(EVPN学习)
<EVPN-PE1> display mac-address vni 1000
MAC Address Type Interface VNI
0011-2233-4455 BGP Tunnel-Source 1000
00AA-BBCC-DDEE BGP Tunnel-Dest:10.1.2.1 1000
4.3 故障排查:MAC 路由未通告
故障场景:VTEP1 学习到 CE 的 MAC 地址,但未通过 BGP 通告 Type 2 路由。
# Step 1: 检查本地MAC表
<EVPN-PE1> display mac-address vni 1000
0011-2233-4455 Dynamic 100ge1/0/1 1000
# MAC已学习
# Step 2: 检查BGP EVPN路由
<EVPN-PE1> display bgp evpn routing-table type 2
# 无Type2路由
# Step 3: 检查MAC-IP通告配置
<EVPN-PE1> display current-configuration | include mac-ip
# 发现: mac-ip-advertisement 未启用
# Step 4: 修正配置
[EVPN-PE1-vxlan-vni-1000] mac-ip-advertisement enable
# Step 5: 检查ES配置(如果是多归属场景)
<EVPN-PE1> display ethernet-segment 1
# 如果是非活动ES, Type2路由不会被通告
# 确认该VTEP在ES中为Active状态
四(续)、高级主题
4.4 MAC-IP 路由老化与撤销机制
EVPN Type 2 路由的生命周期管理对网络稳定性至关重要:
| 触发条件 | 行为 | 收敛时间 |
|---|---|---|
| 本地 MAC 老化超时 | VTEP 撤销对应的 Type 2 路由 | 取决于 MAC 老化时间(默认 300s) |
| CE 接口 Down | VTEP 立即撤销该接口下学习的所有 MAC 路由 | 秒级 |
| ESI 故障(Active 链路中断) | Active VTEP 撤销路由,Standby 接管并通告 | 亚秒级 |
| VTEP 故障 | BGP 会话超时后,对端撤销路由 | BGP Hold Timer(默认 180s,建议缩短) |
| VNI 删除 | 撤销该 VNI 下所有 Type 2 路由 | 立即 |
# 调整MAC老化时间(缩短收敛)
[EVPN-PE1-vxlan-vni-1000] mac-ageout 60
# 将MAC老化时间从300s缩短到60s
# 调整BGP Hold Timer(加速故障检测)
[EVPN-PE1-bgp-65001] timer connect 3 keepalive 1 hold 6
# Connect=3s, Keepalive=1s, Hold=6s
# 查看MAC老化计时器
<EVPN-PE1> display mac-address vni 1000 aging-timer
MAC Address Remaining
0011-2233-4455 45s
00AA-BBCC-DDEE 30s
4.5 BGP Type 2 路由优选规则
当同一 MAC 地址存在多条 Type 2 路由时,VTEP 按以下优先级选择最优路由:
| 优先级 | 比较项 | 规则 |
|---|---|---|
| 1 | ESI 非空 vs ESI 为空 | ESI 非空优先(多归属场景更精确) |
| 2 | Active-DAC vs Standby-DAC | Active-DAC 优先 |
| 3 | Next-Hop 可达性 | 优先选择可达的 Next-Hop |
| 4 | BGP Local Preference | 值越大越优 |
| 5 | AS_PATH 长度 | 越短越优 |
| 6 | Router ID | 越小越优 |
# 查看Type2路由的详细信息(含优选属性)
<EVPN-PE1> display bgp evpn routing-table type 2 verbose
*> RD: 10.1.1.1:1000
ESI: 0000.0000.0000.0000.0001
MAC: 00:11:22:33:44:55
IP: 192.168.1.10
NextHop: 10.1.1.1
Type: Active-DAC
LocPrf: 100
Valid: Yes, Best: Yes
Origin: I
> RD: 10.1.1.2:1000 # 非最优(Standby-DAC)
ESI: 0000.0000.0000.0000.0001
MAC: 00:11:22:33:44:55
IP: 192.168.1.10
NextHop: 10.1.2.1
Type: Standby-DAC
LocPrf: 100
Valid: Yes, Best: No
4.6 大规模 MAC 表优化策略
当 VNI 内 MAC 地址数量达到数万级别时,需要采取优化措施:
| 优化策略 | 方法 | 效果 |
|---|---|---|
| 抑制泛洪 MAC | 配置 MAC 黑名单,不学习不泛洪的 MAC | 减少 Type 2 路由数量 20-40% |
| 分层 VNI 设计 | 按部门/楼层划分 VNI,避免单 VNI 过大型 | 分散 MAC 表压力 |
| BGP Route Refresh | 支持渐进式路由刷新,避免瞬时刷新风暴 | 降低 CPU 冲击 |
| MAC 表分段老化 | 对不同 VLAN 设置不同老化时间 | 平衡收敛速度和稳定性 |
| Type 2 路由聚合 | 将同一子网的多条 MAC 路由聚合通告 | 减少 BGP 表项 |
# 配置MAC地址抑制(不学习DHCP服务器等已知MAC)
[EVPN-PE1-vxlan-vni-1000] mac-blackhole 00:AA:BB:CC:DD:EE
# 黑名单MAC不会触发Type2路由通告
# 配置BGP Type2路由最大数量(防DoS)
[EVPN-PE1-bgp-65001-evpn] mac-ip-max-routes 50000 warning-threshold 80
# 超过40000条时发出告警
4.7 MAC-IP 移动性场景
虚拟机迁移(vMotion/Live Migration)时,MAC 地址从一个 VTEP 移动到另一个 VTEP:

| 移动性类型 | MAC 变化 | IP 变化 | EVPN 处理 |
|---|---|---|---|
| 同 VNI 迁移 | 不变 | 不变 | Type 2 路由更新 Next-Hop |
| 跨 VNI 迁移 | 不变 | 不变 | 撤销旧 VNI Type 2,新 VNI 发布 Type 2 |
| IP 变更 | 不变 | 变更 | 撤销旧 MAC+IP 路由,发布新 MAC+IP 路由 |
| MAC 变更 | 变更 | 不变 | 撤销旧 MAC 路由,发布新 MAC 路由 |
4.8 Type 2 路由与 ARP 优化联动
启用 MAC+IP 联合通告后,ARP 流程完全被 BGP 取代:
| 传统 ARP 流程 | EVPN MAC+IP 优化后 |
|---|---|
| CE 发送 ARP Request(广播) | CE 直接查本地 ARP 缓存 |
| VTEP 泛洪 ARP 到所有 VTEP | 无需泛洪 |
| 目标 CE 回复 ARP Reply | 无 ARP 交互 |
| 源 VTEP 学习 MAC+IP 绑定 | VTEP 从 BGP 路由表学习 |
| VTEP 发布 Type 2 MAC+IP 路由 | 转发查 BGP MAC+IP 路由表 |
# 验证ARP优化效果
# 传统模式:CE发起ARP请求
<CE> display arp
Internet Address Physical Address Type
192.168.1.20 incomplete ARS # ARP等待中
# EVPN MAC+IP模式:无需ARP
<CE> display arp
Internet Address Physical Address Type
192.168.1.20 00:AA:BB:CC:DD:EE BGP # BGP下发的静态ARP
# 状态为BGP, 由VTEP通过ARP Proxy直接回复
4.9 VTEP 间 Type 2 路由同步验证 Checklist
| 检查项 | 命令 | 预期结果 |
|---|---|---|
| MAC+IP通告开关 | display current-configuration \| include mac-ip-advertisement |
enable |
| Type 2 路由数量 | display bgp evpn routing-table type 2 \| counting |
与学习MAC数一致 |
| 路由状态 | display bgp evpn routing-table type 2 \| include Best |
全部标记为 Best |
| Next-Hop 可达 | display ip routing-table <next-hop> |
路由可达 |
| BGP 邻居状态 | display bgp evpn peer |
所有 Peer Established |
| MAC 表类型 | display mac-address vni 1000 \| include BGP |
远程MAC类型为BGP |
| ESI 状态 | display ethernet-segment |
Active 状态正确 |
| 路由更新频率 | display bgp evpn peer <ip> | include Upd |
无异常频繁更新 |
五、总结
| 项目 | 要点 |
|---|---|
| Type 2 路由 | EVPN 核心路由类型,通告 MAC/IP 可达性 |
| MAC-only | 仅二层转发,需 ARP 泛洪获取 IP |
| MAC+IP | 二层+三层联合通告,消除 ARP 泛洪 |
| ESI 作用 | 标识 Ethernet Segment,多归属场景必备 |
| Active-DAC | 多归属下仅 Active VTEP 通告 Type 2 路由 |
思考
- Type 2 路由携带 ESI 字段。如果 ESI 为 0(无 ESI),说明该 MAC 地址位于什么场景下?
- MAC+IP 路由消除了 ARP 泛洪。如果 CE 的 IP 地址变更,旧的 MAC+IP 路由如何撤销?BGP 的收敛时间对 IP 变更有什么影响?
- 在多归属场景下,如果 Active VTEP 故障,Standby VTEP 何时开始通告 Type 2 路由?切换期间是否有数据丢失?
下篇预告:第175篇:EVPN VXLAN 网关:集中式与分布式