查看: 75|回复: 0

实验案例:H3C MSR36 分布式 EVPN 网关

452

主题

1005

回帖

3054万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
30548563

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

QQ

1 实验案例:H3C MSR36 分布式 EVPN 网关——8 节点、双 VXLAN、L3VNI 承载数据

4 台 MSR36 路由器 + 2 台 MSR36 模拟主机 + 2 台 VPCS 组成的 EVPN 分布式网关 fabric: RTA/RTB 做 anycast 网关(local-proxy-arp + arp suppression),RTC 是边界网关,RTD 是 BGP EVPN 的 RR。 VM1/VM3 属 VXLAN 10,VM2/VM4 属 VXLAN 20,同 VXLAN 二层互通、跨 VXLAN 三层互通。 本案例的重点不是配置,是「五条数据流各自长什么样」——每一条都用 reset arp + ping + 实时截图固定下来, 13 条 traffic filter 的命中数会给出一个反直觉的结论:同网段流量也走 L3VNI,不走 L2VNI。 实测环境:EVE-NG + eve-iac agent 0.9.1;H3C MSR36(msr36_hcl-7.1.064-EmulatedLab)、VPCS。

拓扑

1.1 0. 实测结果

项 实测结果
规模 8 节点 / 7 链路 / 13 条 traffic filter
Underlay OSPF 1 / area 0,RTA/RTB/RTC ↔ RTD 邻居 FULL
Overlay iBGP AS 200,RTA ↔ RTD(4.4.4.4)Established,PrefRcv 5
VSI vpna1 up(display l2vpn vsi name vpna)
数据流验证 5 条全部通过:同 VXLAN ×2、跨 VXLAN ×2、广域网 ×1
封装路径 全部走 L3VNI 1000,VNI-10/20 恒为 0
部署耗时 replace 13.4 秒;plan 4.4 秒

1.2 1. 这个实验解决什么

单独看 VXLAN 只验证「二层能通」,单独看 EVPN 又碰不到数据面。这个案例把两者接起来,并用 filter 把控制面、二层泛洪、三层数据拆开观察:

  • 两个 VXLAN 两个子网:VM1/VM3 → 10.1.1.0/24(VXLAN 10),VM2/VM4 → 10.1.2.0/24(VXLAN 20)。
  • 分布式网关:RTA/RTB 的 Vsi-interface1/2 配 anycast 网关(10.1.1.1 / 10.1.2.1,共享 MAC 0001-0001-0001 / 0002-0002-0002)。
  • L3VNI 承载三层:Vsi-interface3 配 l3-vni 1000,跨 VTEP 三层报文统一用 VNI 1000 封装。
  • 五条数据流逐条留证:每条都有截图和命中数,不靠 show 命令"应该通"。

边界:实验拓扑,不是生产设计——没有 ESI 多归属、没有 BFD、没有 SR-TE。

1.3 2. 镜像与规格

节点 型号 EVE 模板 镜像 vCPU / RAM 网口
RTA / RTB / RTC / RTD MSR36-20 msr36_hcl msr36_hcl-7.1.064-EmulatedLab 2 / 512 MB 11
VM1 / VM2 MSR36-20 msr36_hcl 同上 2 / 512 MB 11
VM3 / VM4 VPCS vpcs EVE 自带 — eth0

1.4 3. 拓扑与地址

端点 A 端点 B 网段
RTD GE0/0 RTA GE0/0 11.1.1.0/30
RTD GE0/1 RTB GE0/0 12.1.1.0/30
RTD GE0/2 RTC GE0/0 13.1.1.0/30
RTA GE0/1 VM1 GE0/0 VXLAN 10 接入
RTA GE0/2 VM2 GE0/0 VXLAN 20 接入
RTB GE0/1 VM3 eth0 VXLAN 10 接入
RTB GE0/2 VM4 eth0 VXLAN 20 接入
设备 地址
RTA / RTB / RTC / RTD LoopBack0 1.1.1.1 / 2.2.2.2 / 3.3.3.3 / 4.4.4.4(/32)
RTC LoopBack1(vpn1) 20.1.1.1/32(广域网对端)
分布式网关 10.1.1.1(Vsi-if1)、10.1.2.1(Vsi-if2)、l3-vni 1000(Vsi-if3)
主机 VM1 10.1.1.10、VM3 10.1.1.20、VM2 10.1.2.10、VM4 10.1.2.20

1.5 4. 关键设计

  1. IP 地址 + OSPF 打通到 Loopback
  2. 创建 VXLAN 与 VSI,VSI 下配 EVPN 实例
  3. BGP L2VPN EVPN 与 RR 建邻居
  4. 接口关联 VSI(xconnect vsi vpna/vpnb)
  5. 分布式网关:anycast IP + 相同 MAC + local-proxy-arp + distributed-gateway local
  6. L3VNI:Vsi-interface3 配 l3-vni 1000

1.6 5. 核心配置

完整预配见 configs/default/n_*.cfg(8 份)。RTA 关键片段:

vsi vpna
 gateway vsi-interface 1
 arp suppression enable
 vxlan 10
  evpn encapsulation vxlan
   route-distinguisher auto
   vpn-target auto export-extcommunity
   vpn-target auto import-extcommunity
interface Vsi-interface1
 ip binding vpn-instance vpn1
 ip address 10.1.1.1 255.255.255.0
 mac-address 0001-0001-0001
 local-proxy-arp enable
 distributed-gateway local
interface Vsi-interface3
 ip binding vpn-instance vpn1
 l3-vni 1000

1.7 6. 复现步骤

eve_iac_deploy  lab=evpn_1     # 约 13 秒
eve_iac_start   lab=evpn_1     # 约 70 秒到 CLI
eve_iac_inspect lab=evpn_1     # 确认 8/8 running

配置由 H3C configscript 三遍下发(PUT_PASSES=3),预期 pass 3 后 diff 为空。

1.8 7. 五条数据流的验证(逐条留证)

1.8.1 7.1 验证方法

每条流都走同一套流程,保证可比:

# 1) 清 ARP 动态表项,强制下一次 ping 重新学习
<RTA> reset arp dynamic
<RTB> reset arp dynamic

# 2) 从指定主机 ping(5~10 包即可,包数过多会被判为洪泛而拒绝)
VPCS> ping <target> 10

# 3) ping 进行中,在 EVE 的 Traffic Filters 面板截图
#    (把 filter 的 timeout 临时调到 2000 ms,高亮才驻留得住)

为什么必须抢时间窗:10 个包约 5.6 秒,而 EVE 拓扑页首次加载约 20 秒。 务必先把拓扑页打开预热,再在 ping 进行中截图,否则截到的必然是「面板有计数、链路全暗」。

1.8.2 7.2 13 条 filter 一览

Traffic Filters 面板:13 条过滤器与实时命中

# 过滤器 表达式 颜色 作用层
1 ARP-Request (arp and arp[6:2] = 1) or (vlan and arp and arp[6:2] = 1) 红 #e53935 接入 L2
2 ARP-Reply (arp and arp[6:2] = 2) or (vlan and arp and arp[6:2] = 2) 绿 #43a047 接入 L2
3 ICMP-Request (icmp[0] == 8 and icmp[4:2] != 0xffff) or (vlan and …) 粉 #d81b60 接入 L3
4 ICMP-Reply (icmp[0] == 0 and icmp[4:2] != 0xffff) or (vlan and …) 黄 #fdd835 接入 L3
5 VXLAN-All udp port 4789 紫 #8e24aa VXLAN 总量
6 BGP-EVPN tcp port 179 白 #ffffff 控制面
7 OSPF ip proto 89 银 #e0e0e0 Underlay
8 VXLAN-VNI-10 udp port 4789 and udp[12:2] = 0x0000 and udp[14:1] = 0x0a 紫红 #d500f9 L2 VNI
9 VXLAN-VNI-20 udp port 4789 and udp[12:2] = 0x0000 and udp[14:1] = 0x14 琥珀 #ffab00 L2 VNI
10 VXLAN-Inner-ARP udp port 4789 and udp[28:2] = 0x0806 亮绿 #76ff03 VXLAN 内层
11 VXLAN-Inner-ICMP udp port 4789 and udp[28:2] = 0x0800 and udp[39] = 1 橙 #ff6d00 VXLAN 内层
12 WAN-Gateway ip host 20.1.1.1 琥珀 #ffd600 广域网边界
13 VXLAN-L3VNI-1000 udp port 4789 and udp[12:2] = 0x0003 and udp[14:1] = 0xe8 红 #ff1744 L3 VNI(数据面)

VNI 必须拆成 udp[12:2](高 16 位)+ udp[14:1]****(低 8 位)——udp[12:3] 编译不过(BPF 只支持 1/2/4 字节读取)。 内层 ethertype 是 udp[28:2](8 UDP + 8 VXLAN + 12 内层 MAC),内层 IP proto 是 udp[39]。

1.8.3 7.3 流 A:同 VXLAN 10(VM3 → VM1)

流A

过滤器 颜色 命中 含义
ARP-Request/ARP-Reply 红 #e53935/ 绿 #43a047 6 / 6 两端接入链路学习 ARP
ICMP-Request 粉 #d81b60 34 VM3 → VM1 的 echo 请求
ICMP-Reply 黄 #fdd835 34 VM1 的 echo 应答
VXLAN-All 紫 #8e24aa 68 核心链路上的 VXLAN 封装总量
VXLAN-Inner-ICMP 橙 #ff6d00 68 解封装后的内层 ICMP
VXLAN-L3VNI-1000 红 #ff1744 68 实际承载数据的 VNI
VXLAN-VNI-10/VNI-20 紫红 #d500f9/ 琥珀 #ffab00 0 / 0 二层 VNI 未承载任何数据
WAN-Gateway 琥珀 #ffd600 0 本流不涉及广域网

链路高亮:RTA—VM1、RTB—VM3 亮红黄(两端的接入链路),RTA—VM2、RTB—VM4 保持默认蓝。 读法:只有 VXLAN 10 的两台主机所在的接入链路亮,VXLAN 20 侧完全没动——说明流被正确限定在 VXLAN 10 内。

1.8.4 7.4 流 B:同 VXLAN 20(VM4 → VM2)

流B

过滤器 颜色 命中 含义
ARP-Request/ARP-Reply 红 / 绿 7 / 7 VM4/VM2 侧 ARP
ICMP-Request 粉 #d81b60 42 VM4 → VM2 的请求
ICMP-Reply 黄 #fdd835 42 VM2 的应答
VXLAN-All 紫 #8e24aa 84 封装总量
VXLAN-Inner-ICMP 橙 #ff6d00 84 内层 ICMP
VXLAN-L3VNI-1000 红 #ff1744 84 承载 VNI
VXLAN-VNI-10/VNI-20 紫红 / 琥珀 0 / 0 二层 VNI 未承载数据

链路高亮:RTA—VM2、RTB—VM4 亮,VM1/VM3 侧暗——与流 A 完全对称。

1.8.5 7.5 流 C:跨 VXLAN 三层(VM3 → VM2)

流C

过滤器 颜色 命中 含义
ARP-Request/ARP-Reply 红 / 绿 7 / 7 跨 VXLAN 需先解析网关 MAC
ICMP-Request 粉 #d81b60 54 VM3 → VM2(跨子网)
ICMP-Reply 黄 #fdd835 54 VM2 的应答
VXLAN-All 紫 #8e24aa 108 封装总量
VXLAN-Inner-ICMP 橙 #ff6d00 108 内层 ICMP
VXLAN-L3VNI-1000 红 #ff1744 108 承载 VNI(跨 VXLAN 必走 L3VNI)
VXLAN-VNI-10/VNI-20 紫红 / 琥珀 0 / 0 二层 VNI 仍未承载数据

链路高亮:RTB—VM3(源侧)→ RTD—RTB → RTD—RTA → RTA—VM2(目的侧),一条完整的跨 VTEP 路径。

这是分布式网关的核心验证:源在 VXLAN 10、目的在 VXLAN 20,两台主机不同子网、不同 VTEP,靠 RTA/RTB 的 anycast 网关做三层转发,封装统一用 L3VNI 1000。

1.8.6 7.6 流 D:跨 VXLAN 反向(VM4 → VM1)

流D

路径与流 C 相反:RTB—VM4 → RTD—RTB → RTD—RTA → RTA—VM1。 验证的是「网关在两个方向都对称」,而不是只有单向能通。

1.8.7 7.7 流 E:VXLAN → 广域网(VM3 → 20.1.1.1)

流E

过滤器 颜色 命中 含义
ICMP-Request 粉 #d81b60 71 VM3 → 20.1.1.1
ICMP-Reply 黄 #fdd835 71 RTC 的应答
VXLAN-All 紫 #8e24aa 144 fabric 内封装总量
VXLAN-Inner-ICMP 橙 #ff6d00 144 内层 ICMP
VXLAN-L3VNI-1000 红 #ff1744 144 承载 VNI
WAN-Gateway 琥珀 #ffd600 2 出 fabric 的裸 IP(请求+应答)
VXLAN-VNI-10/VNI-20 紫红 / 琥珀 0 / 0 仍未参与

链路高亮:RTB—VM3 → RTD—RTB → RTD—RTC** 变黄绿**(平时这条链路始终是默认色)。

这条流证明边界网关生效:VXLAN 内的主机访问 VXLAN 外部地址,报文从 RTB 进入 fabric、经 RTD 送到 RTC, 再由 RTC 的 vpn1 实例转发出去。WAN-Gateway(ip host 20.1.1.1)命中 2 次,正是请求和应答。

1.8.8 7.8 五条流汇总

流 源 → 目的 路径 L3VNI 关键证据
A VM3 → VM1 RTA↔VM1、RTB↔VM3 68 VXLAN 20 侧全暗
B VM4 → VM2 RTA↔VM2、RTB↔VM4 84 与 A 对称
C VM3 → VM2 RTB→RTD→RTA 108 跨 VTEP 三层
D VM4 → VM1 RTB→RTD→RTA — 与 C 反向对称
E VM3 → 20.1.1.1 RTB→RTD→RTC 144 RTD—RTC变黄绿 +WAN-Gateway=2

共同点:每一条流的 VXLAN-All 都等于 ICMP-Request + ICMP-Reply,也等于 VXLAN-L3VNI-1000。 三个数字咬合,说明没有一条数据走 L2VNI。

1.8.9 7.9 反直觉结论:同网段也走 L3VNI

直觉:VM3 和 VM1 同在 10.1.1.0/24、同在 VXLAN 10,应该是二层转发,走 VNI 10。

实测:VXLAN-VNI-10 恒为 0,VXLAN-L3VNI-1000 等于全部包数。原因有两条,都在配置里:

  1. arp suppression enable(VSI 视图)——VTEP 本地代理 ARP,泛洪被抑制,不进 VXLAN;
  2. local-proxy-arp enable(Vsi-interface)——网关代理 ARP,主机看到的对端 MAC 是网关 MAC。

验证:

VM1 的 ARP 表:网关与对端 MAC 相同

<VM1> display arp
10.1.1.1    0001-0001-0001   GE0/0    ← 网关
10.1.1.20   0001-0001-0001   GE0/0    ← VM3,MAC 是网关的

0001-0001-0001 是 RTA Vsi-interface1 的 MAC。对端 MAC 等于网关 MAC,说明流量被引导到网关做三层转发。

判据:分布式网关场景下,先看 ARP 表里对端 MAC 是不是网关 MAC——是就说明走了三层,别去 VNI-10 里找数据。

1.9 8. 踩坑清单

  1. display l2vpn vsi****(不带 name)偶发空读——必须 display l2vpn vsi name vpna,否则误判「VSI 没建」。
  2. Vsi-interface** 必须先于 vsi 建**——HCL 允许预引用,EVE 镜像不允许,第一遍报 % Wrong parameter,靠三遍下发的第二遍补上。
  3. VPCS 的 ping 第二个参数不是包数——ping 10.1.1.10 10000 仍只跑 5 个包。
  4. 单次 ping 包数别贪多——超出常规数量会被判为洪泛并拒绝,验收用 5~10 包即可。
  5. 截图必须抢时间窗——10 个包只有 5.6 秒,必须先把拓扑页打开预热,再在 ping 进行中截;等 ping 结束再打开页面必然全 0。
  6. udp[12:3]** 编译不过**——VNI 是 3 字节,BPF 只支持 1/2/4,必须拆 udp[12:2] + udp[14:1]。
  7. filter 计数是 2 秒窗口(本案例为截图调到 2000 ms,标准值是 500 ms)——零星报文会漏抓,发 5~10 次 ping 再观察。
  8. #00e5ff** 青色不能用**——深色画布上接近默认链路色,改 #ff6d00 橙。
  9. H3C 镜像上核心链路 ICMP 会亮——与 Cisco IOL 案例「内层不亮」相反,不要照抄别人的结论。
  10. reconcile** 紧跟 edit 会返回 ****applied: None**——plan 缓存没刷新,等 2~3 秒先跑一次 plan 再 reconcile。

1.10 9. 附件

  • topology.yml — eve-iac 拓扑(含 13 条 traffic_filters)

  • configs/default/n_*.cfg — 8 份启动配置

  • figures/ — 拓扑图 + 5 张数据流截图 + filter 面板截图

    upload 附件:evpn_1.zip

不忘初心
回复

使用道具 举报

本版积分规则

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