1. 课程导入与实验环境搭建
在传统网络运维中,配置变更往往依赖工程师手工登录设备逐条输入,再凭经验判断结果是否正确。当网络规模扩大到数十台甚至上百台设备、业务涉及EVPN-VXLAN叠加、多租户隔离和复杂策略时,这种方式的风险会迅速放大:一条错误的策略可能只影响某个VRF,却要等到业务投诉才被发现。Juniper网络自动化测试与配置验证要解决的,正是"改之前能否预知结果、改之后能否自动确认"这两个核心问题。
为什么需要自动化测试与配置验证
Juniper设备本身提供了较强的可编程能力:Junos支持通过NETCONF/REST API下发配置,支持commit confirmed回滚机制,也支持在提交前进行配置语法与语义检查。但"能下发"不等于"下发正确"。自动化测试与配置验证的价值体现在三个层面:
- 变更前验证:在真正提交到生产设备之前,先在实验床或仿真环境中验证配置能否被设备接受、是否产生预期路由与转发行为。
- 变更后确认:配置提交后,通过自动化脚本采集show命令输出、路由表、接口状态、BGP/EVPN邻居状态,与预期基线比对,判断变更是否达成目标。
- 回归与持续验证:把验证用例固化为可重复执行的测试集,每次变更后自动运行,防止新配置破坏既有功能。
典型场景包括:EVPN-VXLAN新增租户时验证VNI与VRF映射是否正确、BGP策略调整后验证路由收发是否符合预期、接口MTU或QoS变更后验证转发是否正常、以及升级Junos版本后验证关键业务路径是否仍然可达。
工具链概览
本课程涉及的工具链可以分为四类。第一类是设备交互层:Junos PyEZ(基于NETCONF的Python库)、Junos REST API、以及原生的NETCONF over SSH。第二类是测试框架层:pytest用于组织测试用例,Robot Framework适合关键字驱动的验收测试。第三类是环境仿真层:vLabs提供Juniper官方托管的实验环境,容器化vSRX/vQFX(如vrnetlab)可在本地Docker中运行真实Junos镜像。第四类是验证与断言层:通过PyEZ的RPC获取结构化数据,用Python断言或pytest断言判断结果。
实验环境搭建:从拓扑到初始配置
本节以一个典型的EVPN-VXLAN实验床为例说明搭建过程。拓扑包含两台Leaf(vQFX或vSRX)和两台Spine,Leaf之间通过Spine建立iBGP EVPN对等,Leaf下挂主机通过VLAN接入并映射到VXLAN VNI。示例参数如下(属于教学示例,非实测结果):
Leaf1: 10.0.0.1/32, lo0.0
Leaf2: 10.0.0.2/32, lo0.0
Spine1: 10.0.0.11/32
Spine2: 10.0.0.12/32
Underlay: OSPF area 0.0.0.0
Overlay: iBGP AS 65000, EVPN family
VNI 10010 -> VLAN 10 -> VRF Tenant-A
VNI 10020 -> VLAN 20 -> VRF Tenant-B
搭建步骤可以概括为:先在vLabs或本地容器中启动设备并配置管理IP,确保SSH可达;然后配置Underlay OSPF,验证Loopback互通;接着配置iBGP EVPN邻居,确认EVPN路由交换正常;最后配置VXLAN隧道与VRF映射,验证主机间二层/三层可达。每一步都应通过自动化脚本采集状态,而不是仅靠手工show命令。
初始配置完成后,建议立即建立基线:用PyEZ采集接口状态、OSPF邻居、BGP EVPN邻居、VXLAN隧道状态,保存为JSON基线文件。后续每次变更后重新采集并与基线比对,差异部分即为需要重点检查的对象。
初始配置与验证要点
在Leaf1上,关键配置包括:Loopback接口地址、OSPF宣告、iBGP EVPN邻居指向Spine、VLAN与VNI映射、以及VRF实例绑定。以下为Leaf1的示例配置片段(教学示例):
set interfaces lo0 unit 0 family inet address 10.0.0.1/32
set protocols ospf area 0.0.0.0 interface lo0.0 passive
set protocols ospf area 0.0.0.0 interface xe-0/0/0.0
set protocols bgp group EVPN type internal
set protocols bgp group EVPN local-address 10.0.0.1
set protocols bgp group EVPN family evpn signaling
set protocols bgp group EVPN neighbor 10.0.0.11
set protocols bgp group EVPN neighbor 10.0.0.12
set vlans VLAN10 vlan-id 10
set vlans VLAN10 vxlan vni 10010
set routing-instances Tenant-A instance-type vrf
set routing-instances Tenant-A interface irb.10
set routing-instances Tenant-A route-distinguisher 10.0.0.1:10010
set routing-instances Tenant-A vrf-target target:65000:10010
配置提交后,验证顺序建议为:先确认OSPF邻居达到Full,再确认BGP EVPN邻居达到Established,然后检查EVPN路由表中是否出现Type-2(MAC/IP)和Type-3(IMET)路由,最后从Host-A ping Host-B验证数据面连通性。每一步都可以用PyEZ脚本自动采集并断言,例如:
from jnpr.junos import Device
from jnpr.junos.op.ospf import OspfNeighborTable
dev = Device(host='10.0.0.1', user='lab', password='lab123')
dev.open()
ospf = OspfNeighborTable(dev).get()
for n in ospf:
assert n.state == 'Full', f"OSPF neighbor {n.name} not Full"
dev.close()