第340篇:EVPN VXLAN 多活网关部署失败排错

关键词:EVPN、VXLAN、多活网关、Type-2 MAC学习、ARP代理、BGP EVPN、华为CE系列


一、案例背景

某金融企业数据中心部署EVPN VXLAN架构,目标是实现服务器多归属接入和跨子网无缝漫游。在部署多活网关(Active-Active Gateway)模式时,发现部分服务器的跨Leaf通信出现丢包,ARP解析失败率高达60%。

网络架构: - Spine层:4台CE6865(VTEP) - Leaf层:8台CE6860(VTEP+网关) - 服务器:约500台虚拟机/物理机,通过双归接入2台Leaf - Overlay网络:EVPN VXLAN,VNI 100-110

故障现象: 1. 同一VXLAN内、同一子网的双归服务器之间通信丢包率60% 2. ARP请求能够发出,但ARP响应无法返回 3. 单归属服务器通信正常,仅双归属服务器异常 4. 跨VXLAN子网的通信也受影响

二、需求分析与方案设计

2.1 EVPN多活网关原理

EVPN多活网关(Active-Active Gateway)允许同一广播域内的多台VTEP设备同时作为网关,服务器可以双归属到不同的Leaf,提高可靠性。

EVPN多活网关原理 - 图示

2.2 多活网关关键机制

机制 说明 EVPN Route Type
ES(Ethernet Segment) 定义多归属接入域 Type-1 ES Route
MAC/IP地址绑定 通告MAC和IP的绑定关系 Type-2 MAC/IP Route
Ingress Replication 组播/广播流量复制 Type-2 MAC/IP Route
DHCP Relay DHCP跨VXLAN中继 Type-5 IP Prefix Route
Gateway Anycast IP 多活网关共享Gateway IP Type-2 Gateway IP Route

2.2.1 EVPN Route Type详解

Route Type Route Identifier 用途 关键属性
Type-1 (ES) ESI 通告Ethernet Segment成员 ESI、Flag(M位)、MAC列表
Type-2 (MAC/IP) ESI+MAC+IP MAC/IP地址通告 ESI、MAC、IP、Flags
Type-3 (IMET) VNI+IP VTEP发现(Ingress Replication) VNI、VTEP IP、MAC
Type-4 (ES Import) ESI+RT ES到VNI的导入关系 ESI、Import RT
Type-5 (IP Prefix) VNI+Prefix IPv4/IPv6前缀通告 Prefix、Gateway IP、Flags

EVPN Type-1~5 深度对照

Route Type NLRI格式 目的 应用场景 是否携带ESI 路由唯一性
Type-1 ESI(10字节) + Flags 通告ES成员信息,使远端VTEP知晓多归属拓扑 服务器双归、MLAG、Active-Active网关 是 ESI全局唯一
Type-2 ESI + MAC(6字节) + IP(可选) + Ethernet Tag 通告MAC学习信息,支持MAC移动性通知 VXLAN内二层通信、跨VTEP MAC解析 是 MAC+ETag组合唯一
Type-3 Ethernet Tag + VTEP IP 通告VTEP可达性,用于Ingress Replication成员发现和BGP Auto-Cost计算 广播/未知单播泛洪、VTEP间链路开销计算 否 VTEP IP+ETag唯一
Type-4 Ethernet Tag + Import RT 通告Import RT列表,使远端VTEP将IR转换为BMP(Best-Multicast-Point) 组播优化、减少泛洪流量 否 Import RT唯一
Type-5 IPv4/IPv6 Prefix + Gateway IP 通告全局唯一的IP前缀路由,实现三层网关功能 Active-Active网关、跨VXLAN L3路由、IP路由聚合 否 Prefix全局唯一

Type-2 vs Type-5 选型决策树: - 需要MAC移动性(虚拟机vMotion)→ Type-2 - 需要跨VXLAN IP路由聚合 → Type-5 - 需要Anycast Gateway → Type-2(Gateway IP Route)或 Type-5 - 大规模网络(路由数>10万)→ Type-5(可聚合) - 华为CE系列推荐:Type-5 + Type-2混合,MAC本地学习用Type-2,网关路由用Type-5

2.2.2 Ingress Replication vs Multicast VXLAN 对比

对比项 Ingress Replication (IR) Multicast VXLAN
原理 源VTEP向所有已知VTEP复制报文 源VTEP发送组播报文,网络层复制
Underlay要求 单播可达即可 需要PIM-SM组播路由
配置复杂度 低 高
带宽效率 低(重复发送) 高(网络复制)
扩展性 受VTEP数量限制 不受VTEP数量限制
适用场景 VTEP<100的中小型网络 VTEP>100的大型网络
华为推荐 默认推荐 大规模数据中心

Ingress Replication vs Multicast VXLAN 对比 - 图示

2.2.3 ES分裂脑(Split-Brain)防护

ES分裂脑是指同一ES内的多台VTEP无法正确协调,导致数据环路或丢包。

防护机制 原理 配置方式
MLAG检测 通过MLAG心跳检测对端存活 auto-detect mlag
Inband检测 通过ES接口发送检测报文 auto-detect inband
ES Max-Active 限制同时活跃的VTEP数量 maximum-active N
IETF Inband 标准化带内检测 auto-detect ietf-inband

2.2.4 多DC互联EVPN设计模式对比

设计模式 架构特点 收敛时间 优点 缺点 适用场景
集中式网关 网关在Spine/Agg层,Leaf纯转发 快 架构简单、MAC表集中 东西向三角流量、汇聚瓶颈 小型DC、南北向为主
分布式网关 网关下沉至Leaf,本地终结 快 东西向本地交换、高带宽 MAC表分散、需EVPN同步 大规模DC、东西向为主
多活网关(Active-Active) 同子网多Leaf同时作网关 中 最高可用、服务器双归 配置复杂、需ES+Type-5 高可用、双归服务器
混合网关 部分子网集中+部分分布式 中 灵活、按业务选择 运维复杂、排错难 多业务混合DC
EVPN-MH多DC 跨DC多活,Type-5路由同步 慢(跨DC) 跨DC无缝漫游、统一IP DC间链路要求高 多DC容灾、跨DC业务
VXLAN-GRE混合 DC内VXLAN+DC间GRE 慢 DC间兼容性好 隧道管理复杂 异构DC互联

2.3 故障排查思路

故障排查思路 - 图示

三、技术细节与实施过程

3.1 ES配置检查

# Leaf-01检查ES配置
<CE6860-Leaf-01> display evpn ethernet-segment
Ethernet-Segment Information:
  Ethernet-Segment Name    : ES-DC1-RACK01
  Ethernet-Segment ID      : 0000.0000.0000.0001.0001
  Auto-Ethernet-Segment ID : Disabled
  Maximum Active           : 2
  Active                   : 1

# 检查ES绑定的接口
<CE6860-Leaf-01> display evpn ethernet-segment ES-DC1-RACK01
Ethernet-Segment Interface:
  Interface                : Eth-Trunk 10
  Ethernet-Segment Name    : ES-DC1-RACK01
  Ethernet-Segment ID      : 0000.0000.0000.0001.0001
  Node ID                  : 1

# Leaf-02检查ES配置
<CE6860-Leaf-02> display evpn ethernet-segment ES-DC1-RACK01
Ethernet-Segment Interface:
  Interface                : Eth-Trunk 10
  Ethernet-Segment Name    : ES-DC1-RACK01
  Ethernet-Segment ID      : 0000.0000.0000.0001.0001
  Node ID                  : 2

问题发现1:ES的Maximum Active设置为1,但应该设置为2(支持双活)。

3.2 BGP EVPN路由检查

# Leaf-01检查Type-1 ES Route
<CE6860-Leaf-01> display bgp evpn all routing-table route-type 1
Total number of routes: 2

ES-Route ID          ESI                         Origin-VTEP    Flags
ES-DC1-RACK01        0000:0000:0000:0001:0001   10.255.1.1     M=1
ES-DC1-RACK01        0000:0000:0000:0001:0001   10.255.2.1     M=2

# Leaf-02检查Type-1 ES Route
<CE6860-Leaf-02> display bgp evpn all routing-table route-type 1
Total number of routes: 1     <-- ⚠️ 只有1条,缺少Leaf-01的ES Route

ES-Route ID          ESI                         Origin-VTEP    Flags
ES-DC1-RACK01        0000:0000:0000:0001:0001   10.255.2.1     M=2

问题发现2:Leaf-02缺少Leaf-01发布的Type-1 ES Route,ES同步失败。

3.3 Type-2 MAC Route检查

# Leaf-01检查Type-2 MAC Route
<CE6860-Leaf-01> display bgp evpn all routing-table route-type 2
Total number of routes: 15

ESI                  MAC Address         IP Address        Origin-VTEP   Flags
0000:0000:0000:0001:0001  00:11:22:33:44:01  10.100.1.10     10.255.1.1   M=1
0000:0000:0000:0001:0001  00:11:22:33:44:04  10.100.1.40     10.255.1.1   M=1
0000:0000:0000:0001:0001  00:11:22:33:44:04  10.100.1.40     10.255.2.1   M=2

# 注意到VM-04的MAC被Leaf-01和Leaf-02同时通告(M=1和M=2),但IP地址相同
# 这是正常的多活行为

问题发现3:Type-2 MAC Route中缺少部分MAC地址(VM-02和VM-03的MAC未在Leaf-01和Leaf-02之间完全同步)。

3.4 根因分析

经过逐一排查,确定以下根因:

  1. ES Maximum Active配置错误:配置为1而非2,导致ES只允许单活。
  2. ES Node ID配置错误:Leaf-02的Node ID配置为1(与Leaf-01相同),导致ES Route冲突。
  3. BGP EVPN Peer未全互联:部分Leaf之间未建立BGP EVPN会话,导致Type-1/Type-2路由无法同步。

四、实战配置/案例分析

4.1 正确的ES多活配置

# Leaf-01 ES配置(Node ID = 1)
<CE6860-Leaf-01> system-view
[CE6860-Leaf-01] evpn ethernet-segment ES-DC1-RACK01
[CE6860-Leaf-01-evpn-ES-DC1-RACK01] ethernet-segment-id 0000.0000.0000.0001.0001
[CE6860-Leaf-01-evpn-ES-DC1-RACK01] maximum-active 2          # 允许双活
[CE6860-Leaf-01-evpn-ES-DC1-RACK01] auto-detect mlag           # MLAG自动检测
[CE6860-Leaf-01-evpn-ES-DC1-RACK01] quit

# 绑定ES到接口
[CE6860-Leaf-01] interface Eth-Trunk 10
[CE6860-Leaf-01-Eth-Trunk10] evpn ethernet-segment ES-DC1-RACK01 node-id 1  # Node ID = 1
[CE6860-Leaf-01-Eth-Trunk10] quit

# Leaf-02 ES配置(Node ID = 2)
<CE6860-Leaf-02> system-view
[CE6860-Leaf-02] evpn ethernet-segment ES-DC1-RACK01
[CE6860-Leaf-02-evpn-ES-DC1-RACK01] ethernet-segment-id 0000.0000.0000.0001.0001
[CE6860-Leaf-02-evpn-ES-DC1-RACK01] maximum-active 2
[CE6860-Leaf-02-evpn-ES-DC1-RACK01] auto-detect mlag
[CE6860-Leaf-02-evpn-ES-DC1-RACK01] quit

[CE6860-Leaf-02] interface Eth-Trunk 10
[CE6860-Leaf-02-Eth-Trunk10] evpn ethernet-segment ES-DC1-RACK01 node-id 2  # Node ID = 2
[CE6860-Leaf-02-Eth-Trunk10] quit

4.2 BGP EVPN全互联配置

# Leaf-01 BGP EVPN配置(与所有Leaf建立EVPN会话)
[CE6860-Leaf-01] bgp 65100
[CE6860-Leaf-01-bgp-65100] router-id 10.255.1.1
[CE6860-Leaf-01-bgp-65100] evpn enable

# iBGP EVPN Peer(RR或全互联)
[CE6860-Leaf-01-bgp-65100] peer 10.255.0.1 as-number 65100    # RR
[CE6860-Leaf-01-bgp-65100] peer 10.255.0.1 connect-interface LoopBack 100
[CE6860-Leaf-01-bgp-65100] peer 10.255.0.1 address-family evpn
[CE6860-Leaf-01-bgp-65100] peer 10.255.0.1 route-reflector-client

# IPv4 Unicast地址族
[CE6860-Leaf-01-bgp-65100] address-family ipv4
[CE6860-Leaf-01-bgp-65100-ipv4] peer 10.255.0.1 enable
[CE6860-Leaf-01-bgp-65100-ipv4] quit
[CE6860-Leaf-01-bgp-65100] quit

4.3 EVPN VXLAN网关配置

# Leaf-01多活网关配置
[CE6860-Leaf-01] evpn instance 100
[CE6860-Leaf-01-evpn-100] vni 100
[CE6860-Leaf-01-evpn-100] evpn-type evi
[CE6860-Leaf-01-evpn-100] source-interface Vlanif 100
[CE6860-Leaf-01-evpn-100] ip-mac binding learn enable
[CE6860-Leaf-01-evpn-100] arp broadcast enable
[CE6860-Leaf-01-evpn-100] quit

# 配置Vlanif网关(Anycast Gateway IP)
[CE6860-Leaf-01] interface Vlanif 100
[CE6860-Leaf-01-Vlanif100] ip address 10.100.1.254 255.255.255.0
[CE6860-Leaf-01-Vlanif100] evpn instance 100
[CE6860-Leaf-01-Vlanif100] evpn ip-advertisement gateway
[CE6860-Leaf-01-Vlanif100] quit

# VXLAN隧道绑定VNI
[CE6860-Leaf-01] vxlan vtep 10.255.1.1
[CE6860-Leaf-01-vtep-10.255.1.1] vxlan vni 100 interface Vlanif 100
[CE6860-Leaf-01-vtep-10.255.1.1] quit

4.3.1 完整配置模板(华为CE12800核心场景)

以下为华为CE12800完整EVPN VXLAN配置模板,覆盖VTEP、EVPN、VXLAN、BD、VRF等核心组件,可作为部署基线参考。

# =====================================================
# CE12800 EVPN VXLAN 完整配置模板
# 适用:Spine-Leaf架构,Leaf承载VTEP+多活网关
# =====================================================

# ---- 1. 系统基础 ----
sysname CE12800-Leaf01
interface LoopBack 100
 description VTEP_Source_IP
 ip address 10.255.1.1 32
quit

# ---- 2. BGP路由反射器(Underlay + EVPN) ----
bgp 65100
 router-id 10.255.1.1

 # IPv4 Unicast(Underlay IGP替代)
 address-family ipv4 unicast
  peer 10.255.0.1 as-number 65100
  peer 10.255.0.1 connect-interface LoopBack 100
  peer 10.255.0.1 route-reflector-client
  # 发布LoopBack
  network 10.255.1.1 32
 quit

 # EVPN Address-Family
 address-family evpn
  peer 10.255.0.1 as-number 65100
  peer 10.255.0.1 connect-interface LoopBack 100
  peer 10.255.0.1 route-reflector-client
 quit
quit

# ---- 3. VRF(BGP VRF,承载Type-5网关路由) ----
bgp 65100
 vpn-instance VXLAN_100
  rd 65100:100
  route-target import 65100:100
  route-target export 65100:100
  peer 10.255.0.1 as-number 65100
  peer 10.255.0.1 connect-interface LoopBack 100
 quit
quit

# ---- 4. VXLAN VTEP + VNI ----
vxlan vtep 10.255.1.1
 vxlan vni 100 interface Vlanif 100
 # 远端VTEP(或依赖Type-3 IMET自动发现)
 destination-ip 10.255.2.1
 destination-ip 10.255.3.1
 destination-ip 10.255.4.1
quit

# ---- 5. EVPN Instance ----
evpn instance 100
 vni 100
 evpn-type evi
 source-interface Vlanif 100
 ip-mac binding learn enable
 arp broadcast enable
 # Type-5 IP前缀通告(Active-Active网关)
 ip-advertisement gateway
quit

# ---- 6. Bridge Domain ----
bridge-domain 100
 description VXLAN_VNI_100
 evi 100
 mac-limit 2000
quit

# ---- 7. 接入接口(服务器侧) ----
interface Eth-Trunk 10
 mode l2
 trunkport 100GE 1/0/1 100GE 1/0/2
 description Server_Access
 # 绑定ES(多归属)
 evpn ethernet-segment ES-DC1-RACK01 node-id 1
quit

interface Bridge 100
 port Eth-Trunk 10
 port vni 100
quit

# ---- 8. Vlanif网关 ----
interface Vlanif 100
 ip address 10.100.1.254 255.255.255.0
 bridge-domain 100
 vrf-instance VXLAN_100
 evpn instance 100
 evpn ip-advertisement gateway
quit

4.3.2 netmiko批量验证VTEP配置一致性

在大规模EVPN部署中,逐台手工检查VTEP配置不现实。以下Python脚本通过netmiko批量登录VTEP设备,自动比对关键配置项的一致性。

#!/usr/bin/env python3
"""
evpn_vtep_validator.py — 批量验证EVPN VTEP配置一致性
依赖: pip install netmiko pandas
用法: python evpn_vtep_validator.py --hosts vtep_hosts.csv
"""
import argparse
import csv
from netmiko import ConnectHandler
from netmiko.exceptions import NetmikoAuthenticationException, NetmikoTimeoutException
import re


def get_device_config(device: dict) -> dict:
    """通过netmiko登录设备并提取EVPN关键配置"""
    conn = ConnectHandler(**device)
    results = {
        "hostname": "",
        "vtep_ips": [],
        "vnis": [],
        "es_config": {},
        "bgp_evpn_peers": [],
        "errors": []
    }

    # 获取主机名
    output = conn.send_command("display this interface LoopBack 100")
    results["hostname"] = conn.find_prompt().replace(">", "").replace("#", "")

    # 获取VTEP配置
    output = conn.send_command("display vxlan vtep all")
    vtep_matches = re.findall(r'Verification Source-IP\s+([\d.]+)', output)
    results["vtep_ips"] = list(set(vtep_matches))

    # 获取VNI列表
    vni_matches = re.findall(r'VNI\s+(\d+)', output)
    results["vnis"] = list(set(vni_matches))

    # 获取ES配置
    output = conn.send_command("display evpn ethernet-segment all")
    es_ids = re.findall(r'Ethernet-Segment ID\s+([\d.]+)', output)
    max_active = re.findall(r'Maximum Active\s+(\d+)', output)
    for i, es_id in enumerate(es_ids):
        results["es_config"][es_id] = {
            "max_active": int(max_active[i]) if i < len(max_active) else 0
        }

    # 获取BGP EVPN Peer
    output = conn.send_command("display bgp evpn all peer")
    peer_ips = re.findall(r'BGP Peer IP\s+([\d.]+)', output)
    results["bgp_evpn_peers"] = list(set(peer_ips))

    conn.disconnect()
    return results


def validate_consistency(all_configs: list[dict]) -> list[dict]:
    """对比所有VTEP的配置一致性,返回差异报告"""
    issues = []
    hostnames = [c["hostname"] for c in all_configs]

    # 检查VTEP IP是否唯一
    all_vtep_ips = []
    for cfg in all_configs:
        for ip in cfg["vtep_ips"]:
            all_vtep_ips.append((cfg["hostname"], ip))
    vtep_ip_counts = {}
    for host, ip in all_vtep_ips:
        vtep_ip_counts.setdefault(ip, []).append(host)
    for ip, hosts in vtep_ip_counts.items():
        if len(hosts) > 1:
            issues.append({
                "type": "CRITICAL",
                "issue": f"VTEP IP {ip} 被多个设备使用: {', '.join(hosts)}",
                "hosts": hosts
            })

    # 检查VNI范围是否一致
    vni_sets = {c["hostname"]: set(c["vnis"]) for c in all_configs}
    if len(vni_sets) > 1:
        first_vnis = set(next(iter(vni_sets.values())))
        for host, vnis in vni_sets.items():
            diff = first_vnis.symmetric_difference(vnis)
            if diff:
                issues.append({
                    "type": "WARNING",
                    "issue": f"{host} 的VNI集合与其他设备不一致,差异: {diff}",
                    "hosts": [host]
                })

    # 检查ES Max-Active是否为2
    for cfg in all_configs:
        for es_id, info in cfg["es_config"].items():
            if info["max_active"] != 2:
                issues.append({
                    "type": "CRITICAL",
                    "issue": f"{cfg['hostname']} 的ES {es_id} Max-Active={info['max_active']},应为2",
                    "hosts": [cfg["hostname"]]
                })

    # 检查BGP EVPN Peer连通性
    for cfg in all_configs:
        expected_peers = set(c["hostname"] for c in all_configs) - {cfg["hostname"]}
        if len(cfg["bgp_evpn_peers"]) < 1:
            issues.append({
                "type": "CRITICAL",
                "issue": f"{cfg['hostname']} 没有BGP EVPN Peer",
                "hosts": [cfg["hostname"]]
            })

    return issues


def main():
    parser = argparse.ArgumentParser(description="EVPN VTEP配置一致性验证")
    parser.add_argument("--hosts", required=True, help="CSV文件,包含ip,username,password,device_type")
    args = parser.parse_args()

    devices = []
    with open(args.hosts) as f:
        reader = csv.DictReader(f)
        for row in reader:
            devices.append({
                "device_type": row["device_type"],
                "host": row["ip"],
                "username": row["username"],
                "password": row["password"]
            })

    all_configs = []
    for dev in devices:
        try:
            cfg = get_device_config(dev)
            all_configs.append(cfg)
            print(f"[OK] {cfg['hostname']} - VTEP: {cfg['vtep_ips']}, VNI: {cfg['vnis']}")
        except (NetmikoAuthenticationException, NetmikoTimeoutException) as e:
            print(f"[FAIL] {dev['host']} - {e}")

    issues = validate_consistency(all_configs)
    print(f"\n{'='*60}")
    print(f"验证完成: 共检查 {len(all_configs)} 台设备,发现 {len(issues)} 个问题")
    for issue in issues:
        icon = "🔴" if issue["type"] == "CRITICAL" else "🟡"
        print(f"  {icon} [{issue['type']}] {issue['issue']}")


if __name__ == "__main__":
    main()

vtep_hosts.csv 示例:

ip,username,password,device_type
10.255.1.1,admin,Huawei@123,huawei
10.255.2.1,admin,Huawei@123,huawei
10.255.3.1,admin,Huawei@123,huawei
10.255.4.1,admin,Huawei@123,huawei

4.4 验证测试

# 验证ES同步
<CE6860-Leaf-01> display evpn ethernet-segment summary
Ethernet-Segment Summary:
  Total ES              : 8
  Active ES             : 8
  Maximum Active Config : 2
  Auto-Detect Mode      : MLAG

# 验证Type-1路由
<CE6860-Leaf-01> display bgp evpn all routing-table route-type 1 summary
Total Type-1 Routes: 16 (8 ES × 2 Members)

# 验证Type-2路由
<CE6860-Leaf-01> display bgp evpn all routing-table route-type 2 summary
Total Type-2 Routes: 50 (50 VMs)

# 验证Type-3 IMET路由(VTEP发现)
<CE6860-Leaf-01> display bgp evpn all routing-table route-type 3
Total number of routes: 8
Route Distinguisher: 10.255.1.1:100
PeerIP           MAC-Address      Flags
10.255.1.1       00EE.0000.0001   R=1 I=1  <-- Leaf-01自身
10.255.2.1       00EE.0000.0002   R=1 I=1  <-- Leaf-02
10.255.3.1       00EE.0000.0003   R=1 I=1  <-- Leaf-03
...

# 连通性测试
<VM-01> ping 10.100.1.20
PING 10.100.1.20: 56 data bytes
Reply from 10.100.1.20: bytes=56 Sequence=1 ttl=64 time=0.8 ms
Reply from 10.100.1.20: bytes=56 Sequence=2 ttl=64 time=0.9 ms
Reply from 10.100.1.20: bytes=56 Sequence=3 ttl=64 time=0.7 ms
--- 10.100.1.20 ping statistics ---
3 packet(s) transmitted, 3 packet(s) received, 0.00% packet loss

4.5 ES分裂脑排查步骤

当ES内两台VTEP都认为自己是对端Down,导致两台都成为Active时,即为分裂脑。

# 步骤1:检查ES状态
<CE6860-Leaf-01> display evpn ethernet-segment ES-DC1-RACK01
Ethernet-Segment Name    : ES-DC1-RACK01
Active                   : 1          <-- 应该与对端一致
Maximum Active           : 2
Auto-Detect Status       : MLAG-UP    <-- MLAG心跳正常

# 步骤2:检查MLAG心跳
<CE6860-Leaf-01> display mlag summary
MLAG Status: Up
Peer IP: 10.255.100.2
Heartbeat Interval: 3s
Heartbeat Lost: 0

# 步骤3:检查ES检测报文
<CE6860-Leaf-01> display evpn ethernet-segment ES-DC1-RACK01 statistics
Detect Packet Sent: 15234
Detect Packet Received: 15230    <-- 接收数≈发送数,正常
Detect Packet Lost: 4

# 步骤4:如对端Detect Packet Received为0,检查中间链路
# - MLAG心跳链路是否Up
# - 防火墙是否阻断检测报文(Dest UDP Port 4789)

4.6 ARP代理与网关IP通告验证

# 验证Anycast Gateway IP
<CE6860-Leaf-01> display bgp evpn all routing-table route-type 2 gateway
Total number of routes: 8

ESI                  MAC Address         IP Address        Origin-VTEP   Flags
0000:0000:0000:0001:0001  00EE:0001:0000:0100  10.100.1.254    10.255.1.1   G=1 M=1  <-- Leaf-01
0000:0000:0000:0001:0001  00EE:0001:0000:0100  10.100.1.254    10.255.2.1   G=1 M=2  <-- Leaf-02

# Flag G=1 表示这是Gateway IP Route
# 两台Leaf都通告了相同的Gateway MAC和IP,这是正确的Anycast行为

# 验证ARP广播配置
<CE6860-Leaf-01> display evpn instance 100
EVPN Instance: 100
  VNI: 100
  ARP Broadcast: Enabled    <-- 必须启用,否则ARP请求无法跨VXLAN复制
  IP-MAC Binding Learn: Enabled

# 在VM侧验证ARP表
<VM-01> arp -a
Internet Address      Physical Address      Type
10.100.1.254          00-ee-00-01-00-01-00  dynamic  <-- Gateway
10.100.1.20           00-11-22-33-44-02     dynamic  <-- 同VXLAN的VM

4.7 EVPN VXLAN排错快速参考表

故障现象 可能原因 排查命令 修复方法
双归服务器丢包 ES Max-Active配置错误 display evpn ethernet-segment 设置max-active=2
ARP解析失败 ARP广播未启用 display evpn instance X 启用arp broadcast
跨Leaf不通 Type-2路由未同步 display bgp evpn route-type 2 检查BGP EVPN Peer
VXLAN隧道不通 Underlay路由缺失 display ip routing-table 检查IGP路由
分裂脑 MLAG心跳中断 display mlag summary 修复MLAG心跳链路
DHCP失败 DHCP Relay未配置 display dhcp relay 配置DHCP Relay
广播风暴 Ingress Replication异常 display bgp evpn route-type 3 检查IMET路由

4.8 EVPN故障排查Mermaid流程图

EVPN故障排查Mermaid流程图 - 图示

排错优先级矩阵:

优先级 检查项 影响范围 常用命令
P0(最高) Underlay连通性 全VXLAN中断 ping VTEP-IP / display ip routing-table
P0 VXLAN UDP 4789放行 全VXLAN中断 display firewall session table
P1 BGP EVPN Peer状态 路由不同步 display bgp evpn all peer
P1 ES配置(Max-Active/Node-ID) 双归异常 display evpn ethernet-segment
P2 Type-1/Type-2路由完整性 部分通信异常 display bgp evpn route-type 1/2
P2 ARP广播配置 ARP解析失败 display evpn instance X
P3 VRF RT Import/Export 跨VXLAN不通 display vpn-instance
P3 MTU/Jumbo Frame 大包丢包 display interface \| include MTU

五、经验总结

序号 经验类别 经验内容 适用场景
1 ES配置 ES的Maximum Active必须设置为成员数,Node ID必须唯一 EVPN多活
2 BGP设计 EVPN推荐使用RR架构避免全互联,大规模网络必备 EVPN设计
3 MAC同步 Type-2 MAC Route是EVPN通信的基础,必须完整同步 故障排查
4 ARP代理 多活网关必须启用ARP广播,确保ARP请求能被复制 网关配置
5 MLAG检测 ES自动检测建议使用MLAG模式,避免分裂脑 高可用
6 验证方法 部署后必须逐项验证Type-1/2/5路由的完整性 验收测试
7 排错顺序 先查ES→Type-1→Type-2→VXLAN隧道的顺序排查 故障排查
8 监控告警 ES状态变化必须纳入监控,及时发现多活异常 运维监控
9 文档规范 ES ID、Node ID必须有全局规划表 规划文档
10 培训提升 EVPN概念复杂,网工必须深入理解ES和Route Type 技能培训

思考

  1. EVPN多活网关中,如果ES的Node ID配置错误(两台Leaf使用相同的Node ID),会产生什么后果?
  2. EVPN Type-2路由中ESI(Ethernet Segment Identifier)的作用是什么?如果没有ESI,多活网关能否正常工作?
  3. Ingress Replication和Multicast VXLAN两种组播/广播转发方式相比,各有什么优缺点?如何选择?

下篇预告:第341篇:VXLAN 流量负载不均案例分析