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 命令强制启动流程。
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 等危险命令,避免脚本重复执行时造成循环重启。
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 与 ZTP 的差异、DHCP 引导字段、文件服务器准备和脚本幂等设计后,Nexus 交换机的初始化就从“逐台手工配置”转变为“上架加电即自动完成”,为后续的配置管理、版本统一和批量变更打下基础。