1. 为什么需要M-LAGBGP EVPNVXLAN这套组合拳如果你在数据中心网络里摸爬滚打过几年肯定遇到过这样的头疼事服务器要双上联做高可用结果两台接入交换机之间得跑生成树协议STP一半的链路被阻塞带宽资源白白浪费。业务要跨机柜甚至跨机房迁移IP地址段得跟着改运维兄弟叫苦连天。想搞个东西向流量的大二层网络传统的VLAN数量又成了天花板而且网络规模一大广播风暴的风险就让人睡不着觉。我当年就踩过这些坑。后来VXLAN技术出现了它用“MAC in UDP”的封装方式把二层帧打包在三层IP包里传输一下子就把虚拟网络的规模从4096个VLAN扩展到了1600万个VNIVXLAN Network Identifier彻底解决了大二层扩展的问题。但光有VXLAN还不够隧道怎么自动建立网络拓扑变了怎么动态感知这时候BGP EVPNEthernet VPN协议站了出来。它就像是VXLAN网络的“智能导航系统”利用BGP协议扩展的地址族在控制面自动交换MAC地址、IP地址和VTEPVXLAN Tunnel Endpoint信息让VXLAN隧道的建立和维护从手动配置的苦力活变成了自动化的智能操作。那服务器双活接入的高可靠性怎么保证这就是M-LAGMultichassis Link Aggregation Group的用武之地了。你可以把它理解为一台“虚拟的交换机”由两台物理交换机协同工作对上游和下游设备来说它们就像是一台设备。服务器通过链路聚合如LACP连接到这个“虚拟交换机”上不仅实现了链路级的冗余还能让所有链路同时转发流量实现了真正的双活带宽利用率100%。这套“M-LAG做高可靠接入BGP EVPN做智能控制VXLAN做灵活Overlay”的组合就成了现代数据中心Leaf-Spine架构下的“黄金标准”。它既能满足云和虚拟化对网络灵活性的苛刻要求又能提供电信级的高可靠性实测下来非常稳。2. 动手之前搞懂我们的实验目标和拓扑光说不练假把式咱们直接上实战。我选用华为的ENSP_Pro模拟器来搭建环境因为它对VXLAN和EVPN的支持比较完善能模拟出真实设备的绝大部分行为。这次我们的目标很明确构建一个支持IPv4/IPv6双栈业务的分布式VXLAN网关网络并且从服务器接入到核心转发全程都要高可靠。先来看看我们设计的网络蓝图。这是一个典型的Spine-Leaf两级架构非常清晰Spine层核心层两台设备Spine1和Spine2。它们不仅是Overlay VXLAN网络的核心负责Leaf之间的东西向流量转发同时还兼任着网络出口网关的角色负责南北向流量出入数据中心。Leaf层接入层四台设备两两一组。Leaf1和Leaf2组成一个M-LAG系统共同接入一批服务器Leaf3和Leaf4组成另一个M-LAG系统接入另一批服务器。Leaf设备在这里扮演分布式三层网关的角色这意味着服务器的默认网关直接就设在Leaf上跨子网通信流量在Leaf这里就完成路由不用再绕到Spine大大减少了延迟和Spine的压力。Underlay网络这是底层承载网络我们使用IPv4地址运行OSPF协议。它的唯一任务就是让所有设备的Loopback接口比如Spine的1.1.1.1Leaf的2.2.2.2、3.3.3.3等能够三层互通。你可以把它想象成高速公路系统负责把数据包从A点的隧道入口运到B点的隧道出口。Overlay网络这是建立在Underlay之上的虚拟网络我们通过VXLAN隧道来构建。业务流量包括IPv4和IPv6在这个虚拟层里跑完全感知不到底层物理网络的复杂结构。BGP EVPN协议则负责自动为这些VXLAN隧道“牵线搭桥”。服务器通过接入交换机图中SW1、SW2以链路聚合方式连接到M-LAG PairLeaf1/2或Leaf3/4。这样一来任何一台Leaf设备、任何一个端口、任何一条链路故障业务都能在毫秒级内切换服务器完全无感。下面这个表格列出了关键的管理和互联IP地址配置的时候可别搞混了设备接口IPv4地址/掩码IPv6地址如配置说明Spine1GE1/0/1192.168.1.1/24-连接Leaf1GE1/0/2192.168.2.1/24-连接Leaf2GE1/0/3192.168.3.1/24-连接Leaf3GE1/0/4192.168.4.1/24-连接Leaf4GE1/0/510.1.10.1/24fc00:10::1/64上行出口如连接PEGE1/0/610.1.20.1/24fc00:20::1/64上行出口冗余Loopback11.1.1.1/32-VTEP源地址、BGP Router IDLoopback24.4.4.4/32-M-LAG DFS Group源地址Spine2GE1/0/1192.168.5.1/24-连接Leaf1GE1/0/2192.168.6.1/24-连接Leaf2GE1/0/3192.168.7.1/24-连接Leaf3GE1/0/4192.168.8.1/24-连接Leaf4GE1/0/510.1.30.1/24fc00:30::1/64上行出口GE1/0/610.1.40.1/24fc00:40::1/64上行出口冗余Loopback11.1.1.1/32-VTEP源地址、BGP Router IDLoopback25.5.5.5/32-M-LAG DFS Group源地址Leaf1GE1/0/1192.168.1.2/24-连接Spine1GE1/0/2192.168.5.2/24-连接Spine2Loopback12.2.2.2/32-VTEP源地址、BGP Router IDLoopback26.6.6.6/32-M-LAG DFS Group源地址Leaf2GE1/0/1192.168.2.2/24-连接Spine1GE1/0/2192.168.6.2/24-连接Spine2Loopback12.2.2.2/32-VTEP源地址与Leaf1相同Anycast VTEPLoopback27.7.7.7/32-M-LAG DFS Group源地址注意这里有个关键点Leaf1和Leaf2作为M-LAG配对设备它们的VTEP源地址Loopback1配置成了相同的2.2.2.2。这叫做Anycast VTEP技术。对于网络中的其他设备如Spine、Leaf3来说它们认为只有一台VTEP地址为2.2.2.2的设备这极大地简化了BGP EVPN对等体的配置和路由学习。实际流量会根据最优路径到达Leaf1或Leaf2由它们俩内部通过Peer-Link同步信息共同处理发往2.2.2.2的流量。3. 第一步打好地基——配置Underlay网络OSPF万丈高楼平地起Underlay网络就是我们的地基。这一步的目标很简单让Spine和Leaf之间所有接口的IP地址都能通过OSPF协议相互学习到最终实现所有设备Loopback地址的互通。只有Loopback通了后续BGP EVPN对等体关系才能建立起来。配置其实很标准化咱们以Leaf1为例其他设备举一反三。核心就三点接口切三层模式、配IP地址、起OSPF。这里我强烈建议把Spine和Leaf之间的链路网络类型设为p2p点对点这样OSPF的邻居建立和路由计算最快避免在广播网络里选DR/BDR的麻烦。# 进入系统视图给设备改个名 HUAWEI system-view [~HUAWEI] sysname Leaf1 [*HUAWEI] commit # 配置连接Spine1的物理接口 [~Leaf1] interface gigabitethernet 1/0/1 [~Leaf1-GE1/0/1] undo portswitch # 将接口从二层模式切换为三层路由模式 [*Leaf1-GE1/0/1] ip address 192.168.1.2 24 [*Leaf1-GE1/0/1] ospf network-type p2p # 设置OSPF网络类型为点对点 [*Leaf1-GE1/0/1] quit # 配置连接Spine2的物理接口 [*Leaf1] interface gigabitethernet 1/0/2 [*Leaf1-GE1/0/2] undo portswitch [*Leaf1-GE1/0/2] ip address 192.168.5.2 24 [*Leaf1-GE1/0/2] ospf network-type p2p [*Leaf1-GE1/0/2] quit # 配置Loopback接口这个地址非常重要 [*Leaf1] interface loopback 1 [*Leaf1-LoopBack1] ip address 2.2.2.2 32 # 这是VTEP地址全网必须唯一除M-LAG配对设备外 [*Leaf1-LoopBack1] quit [*Leaf1] interface loopback 2 [*Leaf1-LoopBack2] ip address 6.6.6.6 32 # 这是M-LAG DFS Group的源地址用于双活检测 [*Leaf1-LoopBack2] quit # 启用OSPF进程并发布直连网段 [*Leaf1] ospf 1 router-id 2.2.2.2 # 建议手动指定Router ID为Loopback1地址 [*Leaf1-ospf-1] area 0 [*Leaf1-ospf-1-area-0.0.0.0] network 192.168.1.0 0.0.0.255 # 发布连接Spine1的网段 [*Leaf1-ospf-1-area-0.0.0.0] network 192.168.5.0 0.0.0.255 # 发布连接Spine2的网段 [*Leaf1-ospf-1-area-0.0.0.0] network 2.2.2.2 0.0.0.0 # 发布VTEP地址 [*Leaf1-ospf-1-area-0.0.0.0] network 6.6.6.6 0.0.0.0 # 发布M-LAG检测地址 [*Leaf1-ospf-1-area-0.0.0.0] quit [*Leaf1-ospf-1] quit [*Leaf1] commit按照同样的方法把Spine1、Spine2、Leaf2、Leaf3、Leaf4都配置好。重点检查各设备之间的互联IP不要配错OSPF区域都放在Area 0。配置完成后别急着往下走一定要做连通性测试。用display ospf peer看看邻居状态是不是Full然后用ping命令测试一下从Leaf1能否ping通Spine1的Loopback11.1.1.1、Spine2的Loopback1也是1.1.1.1注意这是两台设备相同的Anycast IP以及Leaf3的Loopback13.3.3.3。只有底层IP全网互通了上面的VXLAN和EVPN才能玩得转。4. 第二步构建高可靠接入——配置M-LAG双活系统地基打牢了现在我们来给服务器接入层加上“双保险”——M-LAG。在这个实验里Leaf1和Leaf2组成一个M-LAG系统共同接入一个服务器群比如通过接入交换机SW1。Leaf3和Leaf4组成另一个系统。M-LAG的核心思想是“两台设备一个逻辑形象”。对服务器来说它通过标准的LACP协议连接到一台“交换机”上对上游的Spine来说它们也是和两台独立的Leaf建立邻居和路由关系完全感知不到底层的M-LAG协作。配置M-LAG有几个关键部分我结合命令给你拆解一下1. 配置DFS Group与双活检测DFSDual-Active DetectionGroup是M-LAG的“大脑”配对的两台设备必须属于同一个Group。双活检测用于监控Peer-Link链路状态一旦发现对端设备故障存活的一方会接管所有业务。我们使用三层检测基于IP的方式。# 在Leaf1上配置 [~Leaf1] stp mode rstp # 生成树模式设为RSTP [*Leaf1] stp v-stp enable # 启用V-STP这是M-LAG所需的虚拟STP模式 [*Leaf1] dfs-group 1 # 进入DFS Group 1 [*Leaf1-dfs-group-1] dual-active detection source ip 6.6.6.6 peer 7.7.7.7 # 指定本端和对端的检测源IP就是之前配的Loopback2 [*Leaf1-dfs-group-1] priority 150 # 设置优先级值小的为主设备。这里Leaf1优先级高值小默认为主。 [*Leaf1-dfs-group-1] quit2. 配置Peer-Link这是M-LAG的“心跳线”和“数据同步通道”必须是一个高带宽、高可靠性的聚合链路。两台Leaf通过它同步MAC表、ARP表、以及某些控制信息。[~Leaf1] interface eth-trunk 1 # 创建Eth-Trunk 1作为Peer-Link [*Leaf1-Eth-Trunk1] trunkport gigabitethernet 1/0/3 # 将物理接口加入聚合口建议至少两个万兆口 [*Leaf1-Eth-Trunk1] trunkport gigabitethernet 1/0/4 [*Leaf1-Eth-Trunk1] mode lacp-static # 模式设为静态LACP [*Leaf1-Eth-Trunk1] peer-link 1 # 关键将此Eth-Trunk声明为Peer-Link [*Leaf1-Eth-Trunk1] quit3. 配置M-LAG成员口Server-Facing这是连接下游服务器或交换机的接口。同一个M-LAG ID在两台设备上对应同一个逻辑链路组。# 假设Eth-Trunk2用于连接服务器VLAN 10 Eth-Trunk3用于连接服务器VLAN 20 [~Leaf1] interface eth-trunk 2 [*Leaf1-Eth-Trunk2] mode lacp-static [*Leaf1-Eth-Trunk2] trunkport gigabitethernet 1/0/5 [*Leaf1-Eth-Trunk2] dfs-group 1 m-lag 1 # 将此接口绑定到DFS Group 1并指定M-LAG ID为1 [*Leaf1-Eth-Trunk2] stp edged-port enable # 启用边缘端口避免触发STP计算 [*Leaf1-Eth-Trunk2] quit [~Leaf1] interface eth-trunk 3 [*Leaf1-Eth-Trunk3] mode lacp-static [*Leaf1-Eth-Trunk3] trunkport gigabitethernet 1/0/6 [*Leaf1-Eth-Trunk3] dfs-group 1 m-lag 2 # M-LAG ID为2 [*Leaf1-Eth-Trunk3] stp edged-port enable [*Leaf1-Eth-Trunk3] quit4. 配置Monitor Link监控链路这是一个可选的但非常推荐的功能。它建立了上行链路连接Spine和下行M-LAG成员口之间的联动关系。如果所有上行链路都故障设备会自动关闭下行M-LAG口避免形成“孤岛”导致流量黑洞。[~Leaf1] monitor-link group 1 [*Leaf1-mtlk-group1] port gigabitethernet 1/0/1 uplink # 将连接Spine的物理口设为上行口 [*Leaf1-mtlk-group1] port gigabitethernet 1/0/2 uplink [*Leaf1-mtlk-group1] port eth-trunk 2 downlink 1 # 将M-LAG成员口设为下行口并关联到上行口组1 [*Leaf1-mtlk-group1] port eth-trunk 3 downlink 2 [*Leaf1-mtlk-group1] quit [*Leaf1] commitLeaf2的配置与Leaf1镜像注意双活检测的源IP和对端IP要互换。配置完成后务必使用display dfs-group 1 peer-link和display dfs-group 1 m-lag brief命令检查Peer-Link和M-LAG成员口的状态是否为Up和active(*)-active。同时在下游的接入交换机SW1上你需要创建一个Eth-Trunk把连接Leaf1和Leaf2的两个物理口都加进去并允许相应的VLAN通过。这样服务器就能通过LACP与这个“虚拟”的M-LAG系统建立聚合链路了。5. 第三步搭建智能虚拟网络——配置BGP EVPN与VXLAN前面两步完成了物理和链路层的准备现在进入最核心的Overlay网络配置。这一步我们要做三件大事建立BGP EVPN对等体关系、创建VPN/EVPN实例并关联VNI、配置分布式网关接口。这是整个方案的大脑和神经。### 5.1 建立BGP EVPN对等体让设备“互相认识”在这个设计中Spine设备充当路由反射器RR。Leaf设备只需要与两台Spine建立BGP EVPN邻居然后由Spine负责在所有Leaf之间反射EVPN路由。这大大减少了全互联带来的配置量和会话数。我们先配置Spine1。# 在Spine1上配置 [~Spine1] evpn-overlay enable # 全局使能EVPN Overlay功能 [*Spine1] bgp 100 # 进入BGP进程AS号为100 [*Spine1-bgp] private-4-byte-as enable # 使能4字节私有AS号某些场景需要 [*Spine1-bgp] group Leafs internal # 创建一个名为Leafs的IBGP对等体组 [*Spine1-bgp] peer Leafs connect-interface LoopBack2 # 指定使用LoopBack2作为建立TCP连接的源接口 [*Spine1-bgp] peer 6.6.6.6 as-number 100 # 将Leaf1的M-LAG检测地址非VTEP地址加入对等体 [*Spine1-bgp] peer 6.6.6.6 group Leafs # 同时将其归入Leafs组 [*Spine1-bgp] peer 7.7.7.7 as-number 100 [*Spine1-bgp] peer 7.7.7.7 group Leafs [*Spine1-bgp] peer 8.8.8.8 as-number 100 # Leaf3的Loopback2 [*Spine1-bgp] peer 8.8.8.8 group Leafs [*Spine1-bgp] peer 9.9.9.9 as-number 100 # Leaf4的Loopback2 [*Spine1-bgp] peer 9.9.9.9 group Leafs [*Spine1-bgp] ipv4-family unicast # 在IPv4单播地址族下通常不需要与Leaf建立邻居可以跳过或去使能 [*Spine1-bgp-af-ipv4] undo peer Leafs enable [*Spine1-bgp-af-ipv4] quit [*Spine1-bgp] l2vpn-family evpn # 进入关键的L2VPN EVPN地址族 [*Spine1-bgp-af-evpn] peer Leafs enable # 使能Leafs组在EVPN地址族下的能力 [*Spine1-bgp-af-evpn] peer Leafs reflect-client # 将自己配置为路由反射器Leafs组是它的客户 [*Spine1-bgp-af-evpn] peer Leafs advertise irb # 向Leaf反射IRB集成路由桥接类型路由这是三层网关信息 [*Spine1-bgp-af-evpn] peer Leafs advertise irbv6 # 反射IPv6的IRB路由 [*Spine1-bgp-af-evpn] quit [*Spine1-bgp] quit [*Spine1] commit注意这里与Leaf建立BGP会话的地址我们使用的是Leaf的Loopback2地址6.6.6.6, 7.7.7.7等而不是VTEP地址2.2.2.2, 3.3.3.3。这是因为M-LAG配对设备共享同一个Anycast VTEP地址如果用它建邻居Spine无法区分两台设备。用独立的Loopback2地址可以建立独立的BGP会话确保控制面路由的正确传递。Spine2的配置类似。Leaf侧的配置则是指向两台Spine的Loopback2地址4.4.4.4和5.5.5.5。配置完成后用display bgp evpn peer命令检查状态应该是Established。### 5.2 创建VPN实例与EVPN实例划分虚拟网络我们可以把VPN实例理解为一个独立的路由表用于隔离不同租户或业务的流量。EVPN实例则负责管理特定VNIVXLAN网络标识符的二层MAC地址学习和三层主机路由发布。这里我们创建一个名为vpn1的VPN实例并为不同的业务VLAN对应不同的BD创建EVPN实例。# 在Leaf1上配置 [~Leaf1] ip vpn-instance vpn1 # 创建VPN实例vpn1 [*Leaf1-vpn-instance-vpn1] ipv4-family [*Leaf1-vpn-instance-vpn1-af-ipv4] route-distinguisher 6.6.6.6:1 # 设置RD格式通常为设备IP:数字需唯一 [*Leaf1-vpn-instance-vpn1-af-ipv4] vpn-target 0:1 export-extcommunity # 设置出方向VPN Target用于路由导出 [*Leaf1-vpn-instance-vpn1-af-ipv4] vpn-target 0:1 import-extcommunity # 设置入方向VPN Target用于路由导入 [*Leaf1-vpn-instance-vpn1-af-ipv4] quit [*Leaf1-vpn-instance-vpn1] ipv6-family # 同样为IPv6地址族配置RD和VPN Target [*Leaf1-vpn-instance-vpn1-af-ipv6] route-distinguisher 6.6.6.6:1 [*Leaf1-vpn-instance-vpn1-af-ipv6] vpn-target 0:1 export-extcommunity [*Leaf1-vpn-instance-vpn1-af-ipv6] vpn-target 0:1 import-extcommunity [*Leaf1-vpn-instance-vpn1-af-ipv6] quit [*Leaf1-vpn-instance-vpn1] quit # 创建桥接域BD10并关联VNI和EVPN实例 [*Leaf1] bridge-domain 10 [*Leaf1-bd10] vxlan vni 10 # 为BD 10分配VNI 10 [*Leaf1-bd10] evpn [*Leaf1-bd10-evpn] route-distinguisher 6.6.6.6:10 # EVPN实例的RD [*Leaf1-bd10-evpn] vpn-target 0:10 export-extcommunity # 用于BD内MAC地址路由的发布与接收 [*Leaf1-bd10-evpn] vpn-target 0:10 import-extcommunity [*Leaf1-bd10-evpn] vpn-target 0:1 export-extcommunity # 额外导出到VPN实例vpn1用于发布三层主机路由 [*Leaf1-bd10-evpn] quit [*Leaf1-bd10] quit # 创建BD 20配置类似 [*Leaf1] bridge-domain 20 [*Leaf1-bd20] vxlan vni 20 [*Leaf1-bd20] evpn [*Leaf1-bd20-evpn] route-distinguisher 6.6.6.6:20 [*Leaf1-bd20-evpn] vpn-target 0:20 export-extcommunity [*Leaf1-bd20-evpn] vpn-target 0:20 import-extcommunity [*Leaf1-bd20-evpn] vpn-target 0:1 export-extcommunity [*Leaf1-bd20-evpn] quit [*Leaf1-bd20] quit### 5.3 配置VXLAN隧道接口NVE与分布式网关NVENetwork Virtualization Edge接口是VXLAN隧道的逻辑端点。我们需要在每台Leaf上创建它并指定哪些VNI需要通过BGP EVPN来动态学习对端VTEP。[~Leaf1] interface nve 1 # 创建NVE 1接口 [*Leaf1-Nve1] source 2.2.2.2 # 指定VTEP源地址即Loopback1地址 [*Leaf1-Nve1] mac-address 0000-5e00-0102 # 配置一个MAC地址用于VXLAN封装 [*Leaf1-Nve1] vni 10 head-end peer-list protocol bgp # 为VNI 10启用头端复制并通过BGP协议动态学习对等体 [*Leaf1-Nve1] vni 20 head-end peer-list protocol bgp [*Leaf1-Nve1] quit [*Leaf1] commit接下来是分布式网关配置的精髓在Leaf上为每个BD创建VBDIFVirtual Bridge Domain Interface接口并配置相同的Anycast网关IP。这样无论服务器连接到哪台Leaf它的默认网关地址都是一样的实现了网关的“分布式”部署。# 在Leaf1上配置VBDIF10作为VLAN 10VNI 10的三层网关接口 [~Leaf1] interface vbdif 10 [*Leaf1-Vbdif10] ip binding vpn-instance vpn1 # 将接口绑定到VPN实例vpn1 [*Leaf1-Vbdif10] ip address 10.1.1.254 24 # 配置IPv4网关地址 [*Leaf1-Vbdif10] ipv6 enable [*Leaf1-Vbdif10] ipv6 address fc00:1::1 64 # 配置IPv6网关地址 [*Leaf1-Vbdif10] mac-address 0000-5e00-0105 # 配置网关MAC地址 [*Leaf1-Vbdif10] vxlan anycast-gateway enable # 关键启用Anycast网关功能 [*Leaf1-Vbdif10] arp collect host enable # 启用ARP代答和主机信息收集用于发布主机路由 [*Leaf1-Vbdif10] ipv6 nd collect host enable # 启用IPv6 ND代答和主机信息收集 [*Leaf1-Vbdif10] quit # 配置VBDIF20作为VLAN 20的网关 [*Leaf1] interface vbdif 20 [*Leaf1-Vbdif20] ip binding vpn-instance vpn1 [*Leaf1-Vbdif20] ip address 10.1.2.254 24 [*Leaf1-Vbdif20] ipv6 enable [*Leaf1-Vbdif20] ipv6 address fc00:2::1 64 [*Leaf1-Vbdif20] mac-address 0000-5e00-0106 [*Leaf1-Vbdif20] vxlan anycast-gateway enable [*Leaf1-Vbdif20] arp collect host enable [*Leaf1-Vbdif20] ipv6 nd collect host enable [*Leaf1-Vbdif20] quit [*Leaf1] commit关键点在Leaf2上VBDIF10和VBDIF20的IP地址、MAC地址必须配置得和Leaf1完全一样。这就是Anycast网关它使得两台Leaf对服务器呈现为同一个网关。当服务器发送ARP请求寻找网关时哪台Leaf先收到请求就由哪台回应。同时Leaf会通过BGP EVPN将学习到的主机ARP/IP信息类型为IP Prefix Route或MAC/IP Route发布出去其他Leaf学习后跨子网转发时就知道该把流量送到哪个具体的VTEP了。6. 第四步打通任督二脉——配置Spine上的路由与验证Leaf作为分布式网关处理了服务器之间的东西向流量。但服务器访问外网南北向流量需要经过Spine。Spine在这里作为出口网关需要知道如何到达内部的服务器网段也需要有默认路由指向外部的PE路由器。在Spine1上配置静态路由# 配置去往公网外部的默认路由 [~Spine1] ip route-static 0.0.0.0 0.0.0.0 10.1.10.2 [~Spine1] ip route-static 0.0.0.0 0.0.0.0 10.1.20.2 preference 70 # 可以设置浮动路由优先级不同 [~Spine1] ipv6 route-static :: 0 fc00:10::2 [~Spine1] ipv6 route-static :: 0 fc00:20::2 preference 70 # 配置去往内部服务器网段的路由下一跳指向VPN实例因为Leaf通过EVPN发布了这些主机路由到VPN实例中 [~Spine1] ip route-static 10.1.1.0 24 vpn-instance vpn1 [~Spine1] ip route-static 10.1.2.0 24 vpn-instance vpn1 [~Spine1] ip route-static 10.1.3.0 24 vpn-instance vpn1 [~Spine1] ipv6 route-static fc00:1:: 64 vpn-instance vpn1 [~Spine1] ipv6 route-static fc00:2:: 64 vpn-instance vpn1 [~Spine1] ipv6 route-static fc00:3:: 64 vpn-instance vpn1 # 配置VPN实例内部的默认路由指向公网实例让从服务器来的回程流量能出去 [~Spine1] ip route-static vpn-instance vpn1 0.0.0.0 0.0.0.0 public [~Spine1] ipv6 route-static vpn-instance vpn1 :: 0 publicSpine2做类似配置。至此所有配置完成。现在来进行最终的验证。验证1检查VXLAN隧道状态。在任意设备上使用display vxlan tunnel你应该能看到动态建立的VXLAN隧道。例如在Spine1上会看到通往Leaf2.2.2.2和Leaf3/43.3.3.3的隧道。在Leaf1上会看到通往Leaf3/43.3.3.3的隧道。状态都应为up。验证2检查BGP EVPN路由。在Spine1上使用display bgp evpn routing-table可以看到从Leaf学习到的类型2MAC/IP和类型5IP前缀路由。这些路由里包含了主机IP、MAC和下一跳VTEP如2.2.2.2的信息。验证3实际业务测试。这是最关键的。在连接到Leaf1/2的服务器假设IP为10.1.1.10上去ping连接到Leaf3/4的服务器假设IP为10.1.3.10。第一次ping可能会稍有延迟因为需要触发ARP学习和EVPN路由发布。后续ping应该畅通无阻。你可以同时在Leaf1和Spine1上抓包会看到ICMP请求被封装在VXLAN隧道里外层源IP是2.2.2.2目的IP是3.3.3.3这就是Overlay网络在工作的直接证据。验证4高可用测试。模拟故障比如拔掉Leaf1上连接服务器的一条链路或者直接关闭Leaf1的电源。观察服务器的业务是否中断通常应该是毫秒级切换一次ping超时后恢复。同时检查Leaf2是否接管了所有流量M-LAG状态是否正常切换。踩过的坑提醒在配置Anycast VTEP时确保两台Leaf的VTEP源地址相同但BGP Router-ID和用于建立BGP会话的Loopback地址必须不同。另外EVPN实例的RD和VPN Target一定要规划清楚确保路由能够正确导入导出。刚开始玩的时候经常因为VPN Target配反而导致学不到路由多花点时间在路由表的检查上能省去后面大量的排错时间。这套配置虽然看起来步骤多但逻辑非常清晰一旦跑通网络的扩展性和可靠性会带来极大的运维便利。