2. Nexus设备初始化与基础配置自动化

当一批 Nexus 交换机从仓库上架、加电、接入管理网络时,如果逐台通过 Console 口敲入管理 IP、默认网关、主机名、镜像路径和基础配置,几十台设备往往需要数小时甚至数天,而且极易出现主机名与 IP 错配、镜像版本不一致等问题。POAP(PowerOn Auto Provisioning,加电自动配置)正是为解决这一场景而设计的零接触开局机制:设备在出厂或清空配置状态下加电,通过 DHCP 获取管理地址与引导参数,再从 TFTP/HTTP 服务器下载 NX-OS 镜像和配置脚本,自动完成初始化并重启进入目标版本。

POAP 与 ZTP 的关系与触发条件

需要先厘清两个容易混淆的概念。POAP 是 Nexus 平台原生的零接触开局功能,由 bootflash 中的 poap.py 脚本驱动,依赖 DHCP 选项和 TFTP/HTTP 服务器。ZTP(Zero Touch Provisioning)在 Nexus 上通常指基于 ztp.py 或 Guest Shell 的自动化引导框架,更强调通过脚本引擎(Python、Bash)完成更灵活的定制化开局,例如调用 NX-API、写入多段配置、执行校验逻辑。可以这样理解:POAP 是“下载镜像 + 下载配置”的固定套路,ZTP 是“下载并执行脚本”的可编程套路,两者都依赖 DHCP 提供引导信息,实际项目中常配合使用。

POAP 的触发条件有三个:设备处于出厂默认状态或已执行 write erase 并删除 poap.cfg;管理口或指定接口能通过 DHCP 获取地址;DHCP 服务器返回了包含 POAP 引导信息的 Option 150/66/67 等字段。若设备已有启动配置,POAP 不会自动触发,需要手动进入 loader> 或执行 poap 命令强制启动流程。

Nexus POAP 零接触开局数据流与状态推进 Nexus 交换机 出厂/已清空配置 bootflash: poap.py DHCP 服务器 Option 66/67/150 IP + 引导脚本地址 TFTP / HTTP 服务器 NX-OS 镜像 (.bin) 配置脚本 / poap.cfg ① DHCP Discover ② Offer + 引导参数 ③ 请求镜像/脚本 ④ 下发文件 POAP 状态推进与关键判断点 S1 加电引导 无启动配置 S2 获取地址 DHCP 分配成功 S3 下载镜像 校验 MD5 S4 应用配置 写入 startup-config S5 重启进入目标版本 保存 poap.cfg 防重复 失败:DHCP 超时 回退 loader> 手动 失败:镜像校验错 重试或换服务器

DHCP 与文件服务器的关键配置

POAP 能否成功,八成取决于 DHCP 和文件服务器是否配对。以 ISC DHCP 为例,需要为每台设备建立主机声明,用 MAC 地址绑定固定 IP,并通过 option bootfile-name 或厂商自定义 Option 提供脚本路径。Nexus 常用的引导字段包括:Option 66(TFTP 服务器名)、Option 67(引导文件名)、Option 150(TFTP 服务器地址列表)。一个可参考的示例片段如下:

host nexus-01 {
  hardware ethernet 00:de:fb:12:34:01;
  fixed-address 10.10.10.21;
  option tftp-server-name "10.10.10.5";
  option bootfile-name "poap.py";
  option vendor-class-identifier "cisco-Nexus";
}

subnet 10.10.10.0 netmask 255.255.255.0 {
  option routers 10.10.10.1;
  option domain-name-servers 10.10.10.2;
  next-server 10.10.10.5;
}

文件服务器侧需要准备三类文件:NX-OS 镜像(如 nxos.9.3.10.bin)、POAP 配置脚本(poap.py 或自定义脚本)、以及每台设备对应的配置模板。若使用 HTTP,需确保 MIME 类型正确、目录可匿名读取;若使用 TFTP,注意 UDP 69 端口和文件权限。镜像文件建议同时提供 MD5 校验值,POAP 下载后会比对,校验失败会中止并记录日志。

配置模板与脚本的自动下发

POAP 脚本的核心逻辑是:根据设备序列号或主机名,从服务器拉取对应的配置模板,替换变量后写入 startup-config,再保存 poap.cfg 标记已完成,最后重启。一个简化的 Python 脚本示例(运行在设备 Guest Shell 或由 POAP 调用)如下:

import re, sys
from cli import cli

serial = cli("show inventory | include Chassis").split()[-1]
url = "http://10.10.10.5/configs/%s.cfg" % serial
cli("copy %s bootflash:poap_startup.cfg" % url)
cli("copy bootflash:poap_startup.cfg startup-config")
cli("copy running-config startup-config")
cli("copy running-config bootflash:poap.cfg")
cli("reload")

配置模板中可预留变量,例如 __HOSTNAME__、__MGMT_IP__、__VLAN_ID__,由脚本或服务器端渲染后下发。模板内容通常包括:主机名、管理接口 IP 与掩码、默认网关、NTP 服务器、SNMP 团体字、SSH 与 AAA 基础配置、以及 vPC/端口通道等基础参数。注意模板中不要包含 write erase 或 reload 等危险命令,避免脚本重复执行时造成循环重启。

建议在 POAP 脚本中加入幂等判断:若 bootflash:poap.cfg 已存在且内容与当前版本一致,则跳过下载与重启,直接退出。这样可避免设备因意外重启而反复执行 POAP。

验证与排障要点

POAP 执行过程中,可通过 Console 观察输出,或在设备启动后检查以下内容:show version 确认镜像版本;show running-config 确认配置已写入;dir bootflash: 确认 poap.cfg 存在;show ip interface brief 确认管理地址可达。若设备卡在 DHCP 阶段,优先检查管理口链路、VLAN 划分和 DHCP 中继;若镜像下载失败,检查 TFTP/HTTP 服务日志、文件权限和防火墙策略;若配置未生效,检查模板路径、变量替换和脚本执行权限。

POAP 首次执行会重启设备,务必在维护窗口内进行。批量开局时建议先在一台设备上完整验证 DHCP、镜像、模板和脚本链路,再扩展到整批设备,避免因模板错误导致全部设备进入异常状态。

掌握 POAP 与 ZTP 的差异、DHCP 引导字段、文件服务器准备和脚本幂等设计后,Nexus 交换机的初始化就从“逐台手工配置”转变为“上架加电即自动完成”,为后续的配置管理、版本统一和批量变更打下基础。