查看: 30|回复: 0

实验案例:Cisco IOL XE 跑通 VXLAN EVPN

449

主题

1002

回帖

3054万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
30548395

推广达人宣传达人突出贡献优秀版主论坛元老

QQ

实验案例:Cisco IOL XE 跑通 VXLAN EVPN(2 spine + 4 leaf + 8 主机,含 10 条流量过滤器)

用免费的 Cisco IOL 镜像搭一套完整的 VXLAN EVPN fabric:2 台 spine 做 EVPN route reflector,4 台 leaf 做 VTEP,8 台主机分属 4 个 VLAN;每台 leaf 都有全部 4 个 SVI,用同一 IP + 同一 MAC 做分布式 anycast 网关,不配 L3 VNI 也能跨子网。完整启动配置与 IaC 拓扑放在附件包,正文只留核心配置、验收判据和踩坑清单。

实测环境:EVE-NG + eve-iac agent 0.9.1;Cisco IOS-XE 17.18.2(IOL,l2-iol-xe-17-18-02.bin);VPCS 1.3 (0.8.1)。

???? 完整预配与 IaC 文件见 §10.1 附件包;第 5 节只列核心行,不要直接拿片段去粘贴。

运行态:三条 ping 同时跑,VXLAN-VNI-10010(72)与 VXLAN-VNI-10030(76)同时点亮,ICMP-Request/Reply 各 112 一一对应;单独跑一组时只有对应的那个 VNI 亮。ARP 三项为 0 是正常的——ARP 表已填满,不再发包。

vxlan-evpn-xe-topology.png

vxlan-evpn-xe-runtime.png
upload 附件:vxlan-evpn-xe.zip

0. 实测结果

项 实测结果
Underlay OSPF area 0,每台 leaf 两个邻居 FULL,/30 点对点链路
Overlay iBGP AS 65000,两台 spine 做 RR;每台 leaf 两条 EVPN 会话 Established、PfxRcd > 0
控制面 每台 leaf:show nve vni4 个 Up,show nve peers3 远端 × 4 VNI = 12 个 Up
MAC-IP show l2vpn evpn mac ip每台 leaf 8 条,本地主机指向 Et0/x:vlan,远端主机指向对端 VTEP
数据面 5 组 ping 全部 5/5;同 VLAN ttl=64,跨 VLAN ttl=63
可视化 10 条 traffic filter 全部通过 libpcap 编译并部署

1. 这个实验解决什么

VXLAN EVPN 的教程大多从“两台交换机、一个 VNI”讲起,看完还是不知道真实 fabric 长什么样;而厂商的完整设计文档一上来就是双租户、对称 IRB、ESI 多归,节点多到没法一次看完。这个案例取中间那一档:

  • 6 台 IOL,正好是一台普通 PC 能跑满的规模:2 spine + 4 leaf,underlay 和 overlay 都完整;
  • 4 个 VLAN 分两个区(A 区 10/20、B 区 30/40),能看到“同一个 VLAN 横跨两台 leaf”和“跨 VLAN 要经过网关”两种路径;
  • 刻意不做 L3 VNI:跨子网靠每台 leaf 的 anycast SVI 本地路由,再用目标 VLAN 的 L2 VNI 转发——这是理解“分布式网关到底解决了什么”的最短路径;
  • 10 条流量过滤器把 ARP、ICMP、OSPF、BGP、VXLAN 封装和指定 VNI 在拓扑上实时点亮,还能给出“该不亮就不亮”的反证。

跑完这个实验,再回头看 cEOS 那套对称 IRB 双租户,会顺畅很多。

2. 镜像与规格

节点 角色 EVE 模板 镜像 vCPU / RAM 网口
SPINE1 / SPINE2 EVPN RR(不是 VTEP) iol l2-iol-xe-17-18-02.bin 1 / 1024 MB Ethernet0/0..0/3
LEAF1 … LEAF4 VTEP + 分布式网关 iol l2-iol-xe-17-18-02.bin 1 / 1024 MB Ethernet0/0..0/3
HOST-A1 … HOST-B4 主机 vpcs EVE 自带 — eth0

注意事项:

  • IOL 的 attributes.ethernet 填 1 就得到 4 个口(Ethernet0/0..0/3),不是“1 个口”——这是 IOL 模板自己的 ×4 规则,和 VyOS 那类按个数计的模板不同。
  • 镜像必须是支持 VXLAN 的 XE 版本:interface nve1 和 l2vpn evpn 两条命令都能进才算数。15.2 的 l2-adventerprisek9-ms 两条都报 % Invalid input。
  • l2-* 是三层交换机镜像(能交换也能路由),不是纯二层交换机;l3-* 是路由器镜像。本实验 leaf 更贴近三层交换机,选 l2-*。
  • 节点名必须纯 ASCII。中文节点名在 EVE 往返时会丢字,eve-iac 部署报 invalid_native_format 并静默删库。

确认镜像没拿错,登录任意一台 IOL 执行 show version,应同时看到 Version 17.18.2、System image file is "unix:/opt/unetlab/addons/iol/bin/l2-iol-xe-17-18-02.bin" 和 4 Ethernet interfaces。

3. 拓扑与地址

两台 spine 各用 4 个口接 4 台 leaf;每台 leaf 的 Ethernet0/0 / Ethernet0/1 上联两台 spine,Ethernet0/2 / Ethernet0/3 接两台主机。

# 链路 类型 网段(A 端 / B 端)
1 SPINE1 Et0/0↔ LEAF1 Et0/0 路由口 10.0.1.0/30(.1/.2)
2 SPINE1 Et0/1↔ LEAF2 Et0/0 路由口 10.0.1.4/30(.5/.6)
3 SPINE1 Et0/2↔ LEAF3 Et0/0 路由口 10.0.1.8/30(.9/.10)
4 SPINE1 Et0/3↔ LEAF4 Et0/0 路由口 10.0.1.12/30(.13/.14)
5 SPINE2 Et0/0↔ LEAF1 Et0/1 路由口 10.0.2.0/30(.1/.2)
6 SPINE2 Et0/1↔ LEAF2 Et0/1 路由口 10.0.2.4/30(.5/.6)
7 SPINE2 Et0/2↔ LEAF3 Et0/1 路由口 10.0.2.8/30(.9/.10)
8 SPINE2 Et0/3↔ LEAF4 Et0/1 路由口 10.0.2.12/30(.13/.14)
9 LEAF1 Et0/2/Et0/3↔ HOST-A1 / A2 access VLAN 10 / VLAN 20
10 LEAF2 Et0/2/Et0/3↔ HOST-A3 / A4 access VLAN 10 / VLAN 20
11 LEAF3 Et0/2/Et0/3↔ HOST-B1 / B2 access VLAN 30 / VLAN 40
12 LEAF4 Et0/2/Et0/3↔ HOST-B3 / B4 access VLAN 30 / VLAN 40

环回与角色:

设备 角色 Loopback0 BGP
SPINE1 EVPN RR 10.255.0.1/32 AS 65000,无 nve1
SPINE2 EVPN RR 10.255.0.2/32 AS 65000,无 nve1
LEAF1 VTEP 10.255.0.11/32 AS 65000,与两台 spine 建邻居
LEAF2 VTEP 10.255.0.12/32 同上
LEAF3 VTEP 10.255.0.13/32 同上
LEAF4 VTEP 10.255.0.14/32 同上

VLAN / VNI / 网关:

VLAN 名称 VNI 子网 网关(所有 leaf 相同)
10 WEB 10010 10.10.10.0/24 10.10.10.1,MAC 0000.5e00.0101
20 APP 10020 10.10.20.0/24 10.10.20.1,同 MAC
30 DB 10030 10.10.30.0/24 10.10.30.1,同 MAC
40 OPS 10040 10.10.40.0/24 10.10.40.1,同 MAC

主机地址:

主机 IP / 24 网关 VLAN 接入 主机 IP / 24 网关 VLAN 接入
HOST-A1 10.10.10.11 .1 10 LEAF1 Et0/2 HOST-B1 10.10.30.11 .1 30 LEAF3 Et0/2
HOST-A2 10.10.20.11 .1 20 LEAF1 Et0/3 HOST-B2 10.10.40.11 .1 40 LEAF3 Et0/3
HOST-A3 10.10.10.12 .1 10 LEAF2 Et0/2 HOST-B3 10.10.30.12 .1 30 LEAF4 Et0/2
HOST-A4 10.10.20.12 .1 20 LEAF2 Et0/3 HOST-B4 10.10.40.12 .1 40 LEAF4 Et0/3

EVE 连线界面里的端口显示为 e0/0 这类短名,设备内部是 Ethernet0/0,两者是同一个口。

4. 关键设计

  • spine 只做 RR,不做 VTEP:两台 spine 上没有 nve1,只跑 OSPF 和 BGP EVPN 反射。VTEP 越少,排错路径越短;spine 宕一台,EVPN 路由由另一台继续反射(本实验未做故障收敛测试)。
  • L2 VNI 必须走 EVI:只配 interface nve1 下的 member vni 会出现“BGP 邻居 Established,但 show bgp l2vpn evpn 全空、PfxRcd = 0”。每个 VLAN 都要有 l2vpn evpn instance vlan-based 和 vlan configuration → member evpn-instance。
  • ingress-replication,不用组播 underlay:l2vpn evpn 全局配 replication-type ingress,每个 VNI 在 nve1 下配 ingress-replication。拓扑上不需要 PIM,省掉一整层变量。
  • **分布式 anycast 网关:同 IP + 同 MAC + no ip proxy-arp**:4 台 leaf 的 Vlan10 都是 10.10.10.1 和 0000.5e00.0101,主机换 leaf 时 ARP 缓存不失效;no ip proxy-arp 防止某台 leaf 用 anycast MAC 代替远端主机应答,破坏 MAC-IP 学习。
  • 不配 L3 VNI:跨子网由本地 anycast SVI 路由,再用目标 VLAN 的 L2 VNI 转发。代价是每台 leaf 都要有全部 4 个 SVI;收益是没有 VRF、没有对称 IRB,链路只有一条。
  • 用 switchport voice vlan 保活 SVI:每台 leaf 只有 2 个 VLAN 有本地 access 口,另外 2 个 VLAN 在开机时本地没有 up 端口,SVI 会一直是 down;no autostate 拉不起来。把缺失的 VLAN 配成主机口的 voice VLAN,让它本地 active,SVI 就能开机 up,而主机的 untagged 流量仍走 access VLAN。

5. 核心配置(完整预配见附件)

完整逐字的 14 份配置在附件包里(§10.1)。本节只摘核心行说明“这台设备为什么能参与 VXLAN/EVPN”,不要直接拿片段粘贴,复现请用附件里的 configs/default/n_X.cfg。

5.1 SPINE1 / SPINE2(两台同构,只列 SPINE1 的行)

l2vpn evpn
 replication-type ingress
 router-id Loopback0
!
router bgp 65000
 no bgp default ipv4-unicast
 address-family l2vpn evpn
  neighbor 10.255.0.11 route-reflector-client
  neighbor 10.255.0.11 send-community extended

要点:spine **没有 nve1**,只反射 EVPN 路由。show nve vni 在 spine 上会报错,这是对的。

5.2 LEAF1 … LEAF4(四台同构,只列 LEAF1 的行)

ip routing
vtp mode transparent
!
vlan configuration 10
 member evpn-instance 10 vni 10010
!
l2vpn evpn instance 10 vlan-based
 encapsulation vxlan
 replication-type ingress
 advertise mac enable
!
interface nve1
 no shutdown
 source-interface Loopback0
 host-reachability protocol bgp
 member vni 10010
  ingress-replication
!
interface Vlan10
 no autostate
 no ip proxy-arp
 mac-address 0000.5e00.0101
 ip address 10.10.10.1 255.255.255.0

vlan 20 / 30 / 40 各重复一遍(EVI 号 = VLAN 号,VNI 号见 §3),四台 leaf 的 SVI 地址和 MAC 完全相同。

5.3 主机口:voice VLAN 保活

interface Ethernet0/2
 switchport mode access
 switchport access vlan 10
 switchport voice vlan 30
 spanning-tree portfast

LEAF1/LEAF2 的主机口补 VLAN 30/40,LEAF3/LEAF4 补 VLAN 10/20。**必须 switchport mode access**:IOL 的 trunk 口不接收 VPCS 的 untagged 流量。

5.4 VPCS 主机(完整两行)

set pcname HOST-A1
ip 10.10.10.11/24 10.10.10.1

VPCS 的启动脚本不是 Cisco CLI:主机名要 set pcname NAME,地址行是 ip ADDR/MASK GATEWAY,**ip 行不要加 set**。

6. 复现步骤

6.1 手工 EVE(不需要 eve-iac)

  1. 新建 lab,按 §2 建 6 台 iol + 8 台 vpcs;IOL 的 Ethernet 数量填 1(4 个口)。
  2. 按 §3 连 16 条链路:spine 用 Et0/0..0/3 接 4 台 leaf,leaf 用 Et0/0/0/1 上联、Et0/2/Et0/3 接主机。
  3. 把附件里 configs/default/n_1.cfg … n_14.cfg 分别粘进对应节点的 Startup Config。
  4. 对 6 台 IOL 执行 Wipe,再 Start——顺序不能反(原因见 §8.3)。
  5. 启动后按 §7 逐项验收。手工粘贴配置时,务必先 vtp mode transparent,再写 vlan 块。

6.2 IaC 一键复现(eve-iac)

目录结构与 .eve-iac.yml:

vxlan-evpn-xe/
├── .eve-iac.yml
├── topology.yml
└── configs/default/n_1.cfg … n_14.cfg
version: 1
topology: topology.yml

eve:
  lab: /IaC/vxlan-evpn-xe.unl

topology.yml、.eve-iac.yml 与 14 份配置都在附件包里。MCP 调用顺序:

eve_iac_status                       # 确认工程被发现,mode=create
eve_iac_validate                     # 拓扑 + 10 条 BPF 表达式编译
eve_iac_plan                         # 首次应为 create
eve_iac_deploy replace=true          # 建 lab
eve_iac_start                        # 启动全部节点

两条工具边界:eve_iac_deploy 返回 timeout 多半是假失败,先 inspect refresh=true 看结果再决定是否重试;0.9.1 下改启动配置后 reconcile 只上传不激活,**要生效必须手动 stop → wipe → start**(wipe 需明确授权)。

7. 验收判据

7.1 Underlay

show ip ospf neighbor

期望每台 leaf 两个 FULL/ -(对端 10.0.1.1、10.0.2.1),spine 侧看到 4 个 FULL。show ip route 里应能看到其他所有设备的 10.255.0.x/32 环回。

7.2 Overlay 控制面

show bgp l2vpn evpn summary

期望两台邻居 Established、PfxRcd > 0(实测 24 = 3 台远端 leaf × 每台 8 条;主机上下线时会掉,不要死记数字)。

show nve vni
show nve peers

期望 show nve vni 4 个 VNI 全 Up;show nve peers 每个 VNI 都有 3 个远端 VTEP,共 12 个 Up。

show l2vpn evpn mac ip

期望 8 条主机记录:本地主机 Next Hop 是 Et0/2:10 / Et0/3:20(接口:VLAN),远端主机是对端 VTEP 的环回(10.255.0.12/13/14)。这 8 条齐全,说明 type-2 路由已经跨 leaf 交换完成。

7.3 数据面:TTL 是最便宜的判据

验收全部在 VPCS 上做,不要用 IOL 自己 ping 自己。

源 目的 路径 预期 判据
HOST-B1 10.10.30.12(HOST-B3) 同 VLAN 30,LEAF3 → LEAF4 5/5 **ttl=64**:纯二层桥接
HOST-B1 10.10.40.12(HOST-B4) 跨 VLAN 30 → 40,LEAF3 → LEAF4 5/5 **ttl=63**:恰好一跳
HOST-B1 10.10.40.11(HOST-B2) 跨 VLAN,同 LEAF3 5/5 ttl=63
HOST-B1 10.10.10.11(HOST-A1) 跨 VLAN 30 → 10,LEAF3 → LEAF1 5/5 ttl=63
HOST-B3 10.10.30.11(HOST-B1) 同 VLAN 反向 5/5 ttl=64
HOST-B1> ping 10.10.30.12 -c 5
84 bytes from 10.10.30.12 icmp_seq=1 ttl=64 time=1.726 ms
...
HOST-B1> ping 10.10.40.12 -c 5
84 bytes from 10.10.40.12 icmp_seq=1 ttl=63 time=3.566 ms
...

同 VLAN 出现 63,说明它被某个 SVI 路由了一次,路径就不对了。TTL 比“ping 通”精确得多。

7.4 Traffic filters:该亮什么、该不亮什么

10 条过滤器(timeout 全部 500 ms):

# 标题 表达式 颜色
1 ARP-Request (arp and arp[6:2] = 1) or (vlan and arp and arp[6:2] = 1) #00e5ff
2 ARP-Reply (arp and arp[6:2] = 2) or (vlan and arp and arp[6:2] = 2) #76ff03
3 ICMP-Request (icmp[0] == 8) or (vlan and icmp[0] == 8) #ff4081
4 ICMP-Reply (icmp[0] == 0) or (vlan and icmp[0] == 0) #651fff
5 OSPF-Hello (ip proto 89 and ip[21] = 1) or (vlan and ip proto 89 and ip[21] = 1) #ffd600
6 BGP-EVPN (tcp port 179) or (vlan and tcp port 179) #ff6d00
7 VXLAN-All (udp port 4789) or (vlan and udp port 4789) #00b8d4
8 VXLAN-VNI-10010 (udp port 4789 and udp[12:2] = 0x0027 and udp[14:1] = 0x1a) or (vlan and udp port 4789 and udp[12:2] = 0x0027 and udp[14:1] = 0x1a) #c6ff00
9 VXLAN-VNI-10030 (udp port 4789 and udp[12:2] = 0x0027 and udp[14:1] = 0x2e) or (vlan and udp port 4789 and udp[12:2] = 0x0027 and udp[14:1] = 0x2e) #ff00e5
10 VXLAN-Inner-ARP (udp port 4789 and udp[28:2] = 0x0806) or (vlan and udp port 4789 and udp[28:2] = 0x0806) #ffab00

在 EVE 的 Traffic Filters 面板里,期望看到:

观察位置 应亮 说明
接入链路(leaf ↔ 主机) ARP-Request/Reply、ICMP-Request/Reply 主机帧不打标,VLAN 变体那半段不匹配
underlay 链路(spine ↔ leaf) OSPF-Hello、BGP-EVPN、VXLAN-All BGP keepalive 间隔长,高亮只闪一下
同 VLAN ping(B1 → B3) VXLAN-VNI-10030亮,**VXLAN-VNI-10010不亮** 二层流量只在 VLAN 30 的 VNI 里走
跨 VLAN ping(B1 → A1) VXLAN-VNI-10010亮,VXLAN-VNI-10030不亮 网关路由后,帧进了目标 VLAN 的 VNI
任一次首次 ping VXLAN-Inner-ARP亮 ARP 请求被泛洪进 VXLAN
underlay 链路 ICMP-Request/Reply不亮 最漂亮的一条反证:ICMP 已被封进 UDP 4789,外层协议号是 17,icmp[]匹配不到

命中次数只能在 EVE 面板看,MCP 没有读通道。500 ms 窗口下零星报文可能漏抓,发 5–10 次 ping 再观察。

BPF 写法注意:这些是 classic libpcap/tcpdump 语法,不是 Wireshark 显示过滤器;proto[offset:size] 的 size 只能是 1/2/4,所以 VNI 必须拆成 udp[12:2] + udp[14:1](udp[12:3] 编译不过);VLAN 变体必须加括号,and/or 同级左结合,vlan and A or B 只会让 vlan 约束 A;OSPF 类型字节在 ip[21] 而不是 ip[20]。

7.5 判据的边界

  • 不要只凭 ping 判断成功:show l2vpn evpn mac ip 的 8 条记录和 show nve peers 的 12 个 Up 才是控制面真的工作了的证据。
  • show ip interface brief 会多出一个 Tunnel0,IP 与 Loopback0 相同并 up/up——这是 XE 为 VXLAN 自动生成的,不是配错。
  • show interfaces nve1 的计数器恒为 0,隧道 MAC 也不进普通 MAC 表;这是 IOL 的实现限制,不是隧道没通。

8. 踩坑清单(按“会骗到你”的程度排序)

8.1 镜像不对:15.2 的 adv 镜像根本没有 VXLAN/EVPN ★最根本

interface nve1 和 l2vpn evpn 两条命令都报 % Invalid input detected at '^' marker。不是配置写错,是镜像没有这个功能。 判断方法只有一个:进全局配置敲这两条,都能进才算支持。不要看版本号或文件名猜。

8.2 L2 VNI 只配 member vni 不出路由 ★

只在 interface nve1 下写 member vni 10010 + ingress-replication,会得到:**BGP 会话 Established,但 show bgp l2vpn evpn 全空、PfxRcd = 0**。必须补 EVI(l2vpn evpn instance + vlan configuration → member evpn-instance)。这是最容易“看起来配了其实没配”的一处:underlay 健康、会话健康,只有 overlay 是空的。

8.3 vlan.dat 跨 stop/start 保留,会毒化启动解析 ★

同一份启动配置,在旧 vlan.dat 上 stop → start:vlan 块名字不更新(VLAN0010 而不是 WEB),switchport voice vlan 行直接从 running-config 消失;wipe 后 start 则 100% 正确。所以首次导入配置后要 wipe 再 start,改过 VLAN 结构后也要 wipe 再 start。用 stop+start 验证预配配置,只会得到“配置没生效”的假象。

8.4 必须 vtp mode transparent,否则 VLAN 块被静默吞掉 ★

IOL 默认 VTP Server 模式,启动配置里的 vlan 10 / name WEB 整块可能被静默丢弃:VLAN 不存在,但接口下的 switchport access vlan 10 却留着。症状是 show vlan brief 里没有 VLAN 10、主机完全不通。验证用 show vtp status,应显示 Transparent。

8.5 no autostate 救不了“开机时没有 up 端口”的 SVI ★

每台 leaf 只有 4 个 VLAN 里的 2 个有 access 口,另外 2 个的 SVI 在创建瞬间本地没有 active 端口 → 初始 down;no autostate 是运行态属性,拉不起已经 down 的 SVI。反过来在启动配置里写 shutdown + no shutdown 想“手动拉一把”,解析时会被合并,也无效。唯一稳妥的解法是 switchport voice vlan <缺失 VLAN>。

于是 show vlan brief 会看到“反直觉”的一幕:LEAF1 的 Et0/2 是 access VLAN 10,却同时关联 VLAN 30。这是故意的,不是配错。

8.6 IOL 的 trunk 口不接受 VPCS 的 untagged 流量 ★

主机口配成 switchport mode trunk + native VLAN + portfast trunk:SVI 全 up,但接在该口的 VPCS 完全不通,接口输入计数为 0。改回 switchport mode access 立刻恢复。VPCS 不打标签,IOL 的 trunk 口也不收 untagged 入向帧——主机口只能 access。

8.7 anycast 网关三件套缺一不可 ★

同 IP、同 MAC(0000.5e00.0101)、no ip proxy-arp。少 MAC,主机换 leaf 后 ARP 缓存失效;少 no ip proxy-arp,某台 leaf 可能用自己的 anycast MAC 代替远端主机应答,把“远端主机自己的 ARP 应答”变成“网关代理应答”,破坏 MAC-IP 学习的判据。

8.8 权限级别:show running-config / ping source 要先 enable

show running-config 在 LEAF1>(user exec)下报 Invalid input,不是镜像坏了,只是权限不够;ping 带 source / repeat、clear arp-cache 同样只在特权模式可用。在 user exec 下测出的“这命令不存在”结论全都不可信。

8.9 BGP EVPN 的三个必配项

address-family l2vpn evpn + activate(否则不交换 EVPN 路由)、send-community extended(否则扩展团体传不过去)、spine 上的 route-reflector-client(leaf 只与 spine 建邻居,没有 RR 配置 leaf 之间收不到彼此的路由)。另外:l2vpn evpn 下的 router-id 要写接口名 Loopback0 而不是 IP;nve1 的 source-interface 只接受 Loopback;host-reachability protocol bgp 不能漏。

8.10 三个容易漏的单行配置

漏了 症状
leaf 上的 ip routing SVI 有地址但不转发,跨 VLAN 完全不通
uplink 上的 no switchport 口还是二层口,IP 配不进去,OSPF 起不来
uplink 上的 ip ospf network point-to-point OSPF 选 DR/BDR,收敛行为与预期不符

8.11 VPCS 的语法与控制台有损

set pcname HOST-A1 的 set 不能漏,漏了报 unknown VPCS command,而且会让整批 config_edit 原子失败(同批其他节点配置一起不落盘)。控制台偶尔整条空读、或只把最后一行吞进提示符、或报 Bad command: "pipe2 failed";对策是以“读到的内容是否满足预期”作判据,不满足就退避重读,连续失败对这台 VPCS 做一次 stop → start(不用 wipe)。

8.12 排障顺序

从下往上查,不要一上来就怀疑 VXLAN:① 镜像能不能进 nve1 / l2vpn evpn(§8.1)→ ② show ip interface brief 的 uplink 和 SVI 是否 up/up → ③ show ip ospf neighbor 是否 FULL → ④ show bgp l2vpn evpn summary 是否 Established、PfxRcd > 0 → ⑤ show nve vni / show nve peers → ⑥ show l2vpn evpn mac ip 是否 8 条 → ⑦ 最后才在 VPCS 上 ping 看 TTL。

9. 已知限制

  • 没有 L3 VNI / 对称 IRB:刻意。跨子网靠每台 leaf 的 anycast SVI 本地路由 + L2 VNI 转发,不覆盖 VRF-aware EVPN。
  • 没有 EVPN 多归属 / ESI:每台主机只挂一台 leaf,练不了 all-active 和别名 MAC。
  • 没有做故障收敛测试:拓扑有双 uplink 冗余,但没测过挂掉一台 spine 的收敛时间。
  • 没验 VXLAN MTU / 分片:全是小包 ping,撞不到 underlay MTU 边界。
  • 只有 2 个 VNI 配了专用过滤器:10010 / 10030 作代表;10020 / 10040 照抄改 udp[14:1] 为 0x24 / 0x38 即可。
  • IOL 的 NVE 计数器不可用:恒为 0,只能用控制面表验证。
  • 版本敏感:实测基于 IOS-XE 17.18.2;其他版本请先确认 interface nve1 与 show l2vpn evpn mac ip 的输出格式。

10. 附录

10.1 A. 附件包(完整预配 + IaC)

完整配置与 IaC 文件打包为 **vxlan-evpn-xe.zip**(约 228 KB)。下载方式(发布时替换):

???? <TODO:网盘链接 / 公众号自动回复关键字 / 阅读原文>

包内结构:

vxlan-evpn-xe/
├── README.md                 # 文件清单、双路径复现、校验方法
├── .eve-iac.yml              # 工程描述符(eve.lab 需改成你的路径)
├── topology.yml              # 14 节点 / 16 链路 / 10 条 traffic_filters
├── topology.png              # 拓扑图(2560×1440)
└── configs/default/
    ├── n_1.cfg … n_6.cfg     # SPINE1/2、LEAF1..4
    └── n_7.cfg … n_14.cfg    # HOST-A1..A4、HOST-B1..B4

配置文件 SHA-256(按原始字节计算,无结尾换行,与 eve_iac_config index 一致):

文件 字节 SHA-256
n_1.cfg 1915 d16b1db7e41b6530a6774112c2334857f61717ece019d3de4f649d296f30f100
n_2.cfg 1915 95365555a3f1524871156675f091882058351358ef2813817c29d0001753757e
n_3.cfg 2914 493b41e3533f8105002f111e9ee57f5b89ab8ddd4b9b26e2369c64371c3f28ee
n_4.cfg 2914 d8bc3d3abc31e017ad19082b7e71e4ba2b7c85cbb78b6d04b7a4e267d81ed8fb
n_5.cfg 2916 12b1553e55a1429a787fd5c71858e0f7b12df117b933ff6dbabdd30633e1ba1c
n_6.cfg 2916 f9dad2c1c78a06cb8465b5be6414f9147115897ec39b8378ed0ad473fcfee165
n_7.cfg 47 3f1b83dcdcc6a3206d35a9cfc037022ec2da94ffbea4ed48ca7b656ead203f64
n_8.cfg 47 a7083c29d157c5519cc41e9f7125409a1b602c8333e22ecf0e77c633b493b9a8
n_9.cfg 47 8f12c31fb669170472f7d2b9594bcab0d07daca679b6f7b3a14978b342e265f6
n_10.cfg 47 293ba9b28d61c4991b9dc3a5b882759edcc9e8d97815fdc229749e66f3c8878f
n_11.cfg 47 2dc96240376b3b8082f62c5a8b653acb88305728a9bd63879666a8b635e0f94a
n_12.cfg 47 59ab615593c81e5ee162851e5e10f420c819e6207fc8f40f8fc4b013fe6aa778
n_13.cfg 47 2b71aa599606c5f865b75655120713643093240539316aaa1f16f7fb60153980
n_14.cfg 47 14aee65642123725a74110df7b1bc2fc516879851f425b03b94a132e872ea19e

下载后核对(PowerShell):Get-FileHash .\configs\default\n_1.cfg -Algorithm SHA256。

10.2 B. topology.yml 结构

完整 topology.yml 在附件包里,核心结构如下(省略部分节点、链路与 filter):

version: eve-iac/v1
name: vxlan-evpn-xe

configsets:
  default:
    n_1: configs/default/n_1.cfg
    # n_2 … n_14 同理

nodes:
  n_1:
    name: SPINE1
    template: iol
    image: l2-iol-xe-17-18-02.bin
    configset: default
    icon: Router-2D-Cat-Blue-S.svg
    position: {x: 450, y: 80}
    attributes: {delay: 0, disable_offload: false, ethernet: 1, keepalive: false,
                 nvram: 1024, ram: 1024, serial: 0}
  # n_2 … n_14 同理

links:
  - endpoints: - {node: n_1, interface: e0/0}
      - {node: n_3, interface: e0/0}
  # 其余 15 条链路同理

traffic_filters:
  filter_1:
    title: ARP-Request
    expr: "(arp and arp[6:2] = 1) or (vlan and arp and arp[6:2] = 1)"
    color: "#00e5ff"
    timeout: 500
    enabled: 1
  # filter_2 … filter_10 见 §7.4

10.3 C. MCP 调用序列(对照用)

eve_iac_status
eve_iac_validate
eve_iac_plan
eve_iac_deploy replace=true
eve_iac_start
eve_iac_console_exec  {node: "n_3", command: "show bgp l2vpn evpn summary"}
eve_iac_console_exec  {node: "n_3", command: "show nve peers"}
eve_iac_console_exec  {node: "n_3", command: "show l2vpn evpn mac ip"}
eve_iac_console_exec  {node: "n_11", command: "ping 10.10.30.12 -c 5"}

10.4 D. 版本与验证记录

  • 2026-10-18:首次搭建并实测。IOS-XE 17.18.2(IOL XE)、VPCS 1.3、eve-iac agent 0.9.1。
  • 2026-11-01:按《实验案例发布工作流》重排为发布版;正文只保留核心配置,完整预配、topology.yml、.eve-iac.yml、拓扑图打包进 vxlan-evpn-xe.zip。
  • 验证:eve_iac_plan 为 no changes;10 条 filter 全部编译通过;14 份配置的字节数与 SHA-256 与 eve_iac_config index 逐一核对一致。
  • 实测通过:OSPF FULL、EVPN Established、nve peers 12 个 Up、MAC-IP 8 条、5 组 ping 5/5(ttl=64 / ttl=63)。
不忘初心
回复

使用道具 举报

本版积分规则

Copyright   ©2015-2026  EmulatedLab  Powered by Discuz!©   ( 浙ICP备2021010423号-1 )
快速回复 返回列表 返回顶部