H3C交换机ZTP自动开局实践:DHCP+TFTP实现零接触批量配置下发
1. 为什么我要把开局这件事彻底自动化先说个真实场景。去年我给一个园区做批量交付48台新华三H3C接入交换机全是同一批型号、同一套业务模板。按传统方式我得抱着Console线一台台连敲sysname、配VLAN、划Trunk、调管理地址运气好一台四十分钟运气差碰上手滑敲错命令还得回滚重来。48台意味着两个人在机房里蹲一整天脖子酸、眼睛花最怕的是人一累就出错最后验收时发现有一两台漏了配置又得翻工。后来我把这套DHCP加TFTP加ZTP的自动开局方案跑通之后新设备从插电到业务可用基本在几分钟内完成人只需要在旁边看日志、验结果。这篇文章就是把整条链路从头到尾拆开讲清楚包括我踩过的坑和排查思路给正要批量交付新交换机、或者想给分支网点做免到场的同行做个参考。ZTP的全称是Zero Touch Provisioning也就是零接触配置下发。它的核心思想很简单新设备出厂是空配置状态上电后自己作为DHCP客户端去要一个管理地址同时通过DHCP报文里携带的option信息知道TFTP服务器在哪、要下载哪个配置文件然后乖乖把配置拉下来执行完成开局。整个过程不需要人工登录设备。这里最关键的三个角色分别是DHCP服务器、TFTP服务器以及设备本身的ZTP流程。DHCP负责“指路”TFTP负责“送货”ZTP负责“接收并执行”。这三者之间任何一个环节断了自动开局就失败所以后面我会按这条链路逐一展开。这套方案适合谁来用如果你是集成商、企业网络运维、或者经常要一次性交付十台以上同型号交换机的人非常建议搭一套。哪怕是只有三台设备的小项目只要配置模板统一跑通一次后面就能反复用节省的时间比搭建环境的时间多得多。反过来如果你只是偶尔配一两台设备那老老实实手敲反而更快没必要折腾服务器环境。2. 整体方案设计DHCP、TFTP、ZTP这套组合拳怎么打2.1 先画出拓扑明确每个角色的位置我在规划自动开局时习惯先把网络拓扑和角色分清楚。最简单的拓扑长这样[待开局新交换机] ----管理VLAN10---- [汇聚/核心交换机] ---- [Linux服务器 192.168.10.10] (DHCP TFTP)新交换机从空配置启动后会通过接入它的那个端口进入管理VLAN10然后向全网发DHCP Discover报文。汇聚交换机在VLAN10的三层接口上启用DHCP服务或者把DHCP报文中继给后端的Linux服务器。Linux服务器同时扮演DHCP和TFTP两个角色DHCP分配地址并告知TFTP服务器地址和配置文件名TFTP把配置文件传给新交换机。这里我没有单独拆两台服务器因为几十台设备的开局场景对TFTP的压力很小合在一起完全够用还能少维护一个节点。2.2 DHCP服务器选型Linux dhcpd还是新华三设备这是我在实际项目里被问得最多的问题。我的答案是看规模和环境。如果网络里已经有一台现成的Linux服务器我强烈建议直接用ISC dhcpd。它的优势是option可以自定义得很细能根据MAC地址、设备型号精确控制给哪台设备下发哪个配置文件对批量交付场景特别友好。新华三设备也可以用dhcp server ip-pool的方式在交换机上直接建地址池省掉一台独立服务器小规模试验特别方便但它在按主机下发不同配置文件时没有Linux dhcpd那么灵活。对比项Linux dhcpd新华三交换机本地DHCP部署成本需要一台Linux服务器无需额外设备灵活性支持按MAC、按option细分下发支持基础地址池和option下发维护难度需管理dhcpd服务随设备配置一起管理适用场景批量交付、多批次异构设备临时测试、少量设备开局无论选哪种都要注意一个前提DHCP服务器必须和待开局设备在同一个广播域或者通过DHCP中继dhcp relay打通。很多新手开局失败不是配置错了而是新交换机和DHCP服务器之间隔了三层网络DHCP Discover报文根本过不去。2.3 TFTP服务器选型与文件命名策略TFTP服务器选择上Linux环境我一般用系统自带的tftp-serveryum装完就一个socket服务简单稳定。Windows环境临时用的话3CDaemon或者Tftpd64都行图形界面比较友好适合不想碰命令行的同事。但生产环境我始终推荐Linux因为TFTP本身没有加密和认证放在独立的内部管理网段里风险更可控。这里有个容易被忽略的重点配置文件命名策略。我见过不少项目在DHCP里没有指定文件名结果ZTP死活起不来。新华三设备的ZTP机制允许在DHCP报文中通过option 67直接告诉设备“你要下载哪个文件”这是最可靠的方式。如果不指定设备会按默认规则尝试常见顺序是先用设备序列号.cfg再用MAC地址.cfg最后用设备型号.cfg不同版本细节略有差异。所以我建议不要依赖默认规则而是在DHCP服务器里显式配置bootfile-name指哪打哪排查起来也简单——看到文件名字就知道是哪台设备。3. 环境搭建与关键配置实操3.1 在CentOS 7.6上部署TFTP服务器我平时的实验环境是CentOS 7.6这里就以它为例。首先安装TFTP服务端CentOS 7的tftp-server走的是systemd socket激活方式yum install -y tftp-server tftp systemctl enable tftp.socket systemctl start tftp.socket systemctl status tftp.socket服务启动后默认根目录是/var/lib/tftpboot把要下发的配置文件丢进去就行。这一步有两个坑我必须提醒第一CentOS 7默认防火墙是开着的TFTP走UDP 69端口需要放行否则设备那边会一直报TFTP超时firewall-cmd --add-servicetftp --permanent firewall-cmd --reload第二TFTP目录权限。如果文件权限不对服务虽然起来了但设备下载时一样会失败。保险做法是chmod 644配置文件并确认目录可以被读取。上传文件后我建议立刻用本机自测一遍tftp 127.0.0.1 -c get S5130S.cfg ls -l S5130S.cfg能get下来说明TFTP链路没问题再往下排查就只剩DHCP和设备侧了。3.2 部署DHCP服务器Linux dhcpd方式DHCP这边我还是优先用Linux dhcpd。安装很简单yum install -y dhcp关键在/etc/dhcp/dhcpd.conf。为了让新华三设备能从DHCP报文中拿到TFTP服务器地址和配置文件名称需要先定义好optionoption tftp-server-name code 66 string; option bootfile-name code 67 string; option option-150 code 150 ip-address; subnet 192.168.10.0 netmask 255.255.255.0 { range 192.168.10.100 192.168.10.200; option routers 192.168.10.1; option domain-name-servers 114.114.114.114; next-server 192.168.10.10; option tftp-server-name 192.168.10.10; option bootfile-name S5130S.cfg; option option-150 192.168.10.10; }这里我把option 66、option 67、option 150、next-server都配上了。为什么这么保守因为新华三不同产品线对DHCP选项的依赖程度不一样有的设备认option 150有的认option 66全配上可以保证兼容性。next-server原本是PXE用的但很多网络设备也会读这个字段作为TFTP服务器地址配了没坏处。如果希望不同设备拿到不同配置文件可以加host段host SW01 { hardware ethernet 0c:da:41:12:34:56; fixed-address 192.168.10.101; option bootfile-name SW01.cfg; }按MAC地址锁定每台设备配置文件想怎么差异化都行。这对后续要按楼层、按业务区分配置的场景特别有用。配置完成后启动服务systemctl enable dhcpd systemctl start dhcpd验证方式很简单在另一台Linux机器上把网卡设为DHCP获取看能不能拿到地址。修改/etc/sysconfig/network-scripts/ifcfg-ens33把BOOTPROTOdhcp然后重启网络systemctl restart network ip addr show能拿到192.168.10.x的地址说明DHCP服务器工作正常。这一步非常值得做它把“DHCP本身有没有问题”和“ZTP链路其他环节有没有问题”切分开后面排查会轻松很多。3.3 方案B用新华三交换机本地DHCP服务器没有Linux服务器的时候新华三交换机自己也能当DHCP服务器这里正好把热词dhcp select global讲透。在Comware体系里设备上有两种DHCP选择模式dhcp select global表示这个三层接口使用全局创建的地址池来分配地址dhcp select interface则表示使用接口视图下创建的地址池。我一般推荐全局池因为管理起来集中。system-view dhcp enable dhcp server ip-pool ztp network 192.168.10.0 mask 255.255.255.0 gateway-list 192.168.10.254 address range 192.168.10.100 192.168.10.200 bootfile-name S5130S.cfg tftp-server ip-address 192.168.10.10 quit interface Vlan-interface10 ip address 192.168.10.254 255.255.255.0 dhcp select global quit这段配置的意思是VLAN10的三层接口在收到DHCP请求后从全局池ztp里分配地址并在应答里带上TFTP服务器地址和配置文件名。注意dhcp select global必须配在接口下光有地址池不配这行交换机是不会在这个接口上提供DHCP服务的。这个细节我踩过一次当时地址池建了半天新设备就是拿不到IP查了一圈才发现接口上少了这行。3.4 制作可用的ZTP配置文件配置文件质量直接决定开局成败。我通常从一台已经手工调好的设备上把配置导出来去掉无关的调试命令和提示符整理成标准cfg格式。拿一台接入交换机举例一个最小可用的ZTP配置文件大概是这样的# system-view # sysname ACCESS-SW01 # vlan 10 # interface Vlan-interface10 ip address 192.168.10.101 255.255.255.0 # interface GigabitEthernet1/0/1 port link-type trunk port trunk permit vlan all # return save force有几点必须强调。第一文件里的命令顺序要符合设备的执行逻辑H3C的cfg文件本质是按顺序逐条执行的某些命令之间如果有依赖关系顺序错了后面就会报错。第二save force最好在文件末尾写上确保配置保存为启动配置。第三文件编码和换行符要注意别用Windows记事本编辑后直接传上去建议用VS Code或Notepad保存为UTF-8无BOM、LF换行。因为设备解析配置文件时遇到奇怪的换行符可能直接把某行命令截断导致语法错误。4. 实战过程新设备上电到完全接管4.1 开局前的检查清单ZTP这东西环境越干净越容易成功。我每次批量开局前都会过一遍检查清单十分钟能避免后面一小时的折腾服务器上TFTP服务已启动防火墙已放行UDP 69配置文件和目录权限正确。DHCP服务已启动地址池范围、网关、bootfile-name、tftp-server配置无误。待开局设备确认是空配置状态。如果设备之前被配置过需要先恢复出厂设置否则不会进入ZTP流程。新设备上联的交换机端口已划入管理VLAN且端口是Access或Trunk放通了对应VLAN。如果中间跨了三层网络确认DHCP中继或DHCP服务器可达。其中“空配置状态”这条特别重要。ZTP只在设备以空配置启动时触发如果设备里还有旧配置它就直接按旧配置起来了不会进ZTP。恢复出厂在不同Comware版本上有不同命令有的用reset saved-configuration然后重启有的要进BootROM菜单操作开局前务必确认。4.2 设备上电后观察哪些日志设备上电后最好用Console线连着看启动日志这是判断ZTP走到哪一步最直接的手段。正常情况下设备检测到没有启动配置文件会进入ZTP流程然后作为DHCP客户端开始请求地址。日志里通常能看到类似的字样ZTP: Starting ZTP process... DHCP client begins to request IP address...拿到地址并下载配置文件后设备会加载配置然后保存重启。整个过程中Console口日志会像讲故事一样把每一步打印出来。我建议第一次跑通的时候全程盯着Console把关键日志和DHCP交互过程记录下来这样以后出了问题对照正常日志就能快速定位是卡在“拿地址”还是“下文件”还是“应用配置”。在上电的同时也可以在Linux服务器上实时看DHCP租约文件确认设备是否真的来请求过地址tail -f /var/lib/dhcpd/dhcpd.leases如果看到对应的MAC地址生成了租约说明DHCP这一跳是通的如果什么都没看到说明DHCP报文压根没到服务器问题大概率出在网络链路或DHCP中继上。4.3 开局完成后的验证动作设备从ZTP流程正常起来后不能看一眼绿灯亮就完事必须验证。我一般的验证动作是登录设备执行三个命令display ip interface brief display current-configuration display saved-configuration第一确认管理地址是不是预期地址第二确认运行配置里业务模板是否完整第三确认配置已经保存到启动配置里。如果发现display saved-configuration是空的说明配置没保存成功必须立刻处理否则设备一重启又回到裸机状态。此外建议在服务器侧用TFTP下载一次刚下发的文件跟源文件做对比确认传输没有损坏。5. 常见问题与排查实录5.1 设备一直获取不到IP地址这是ZTP失败里最常见的一类。先确认设备确实进了ZTP流程再看网络。如果设备连着Console能看到DHCP客户端的请求日志如果日志里反复发Discover但收不到Offer基本就是链路或服务器问题。按顺序排查物理链路通不通、端口VLAN对不对、DHCP服务有没有起来、接口上有没有配dhcp select global、中间是否跨层需要中继。还有一个隐蔽原因网络里存在其他DHCP服务器抢先应答了。最典型的就是办公网里有人私自接了一台家用路由器或者运营商提供的光猫路由器一体机。这类设备往往没法关闭DHCP功能它的地址池是192.168.1.x如果和你的管理网在同一个广播域新设备会收到两个Offer可能选了错误的那一个结果拿到一个非管理网段的地址ZTP自然走不下去。这时候用Wireshark在接入侧抓包看DHCP Offer的Source地址就能判断是谁在抢答再针对性隔离。5.2 能拿到地址但下载不到配置文件能拿到IP说明DHCP链路没问题问题集中在TFTP环节。先检查设备拿到的TFTP服务器地址和文件名是否正确可以通过在DHCP服务器抓包或看租约文件确认。然后检查TFTP服务状态和防火墙再用本机tftp客户端get一次测试。我曾经遇到一个很折腾的案例TFTP服务正常、文件也在但设备一直报超时最后发现是服务器上多块网卡TFTP监听绑定的接口和设备所在网段不对导致报文进了错误网卡。这一类问题从服务器侧的访问日志能看出来查不到就抓包别靠猜。5.3 运营商给的光猫路由器不能关闭DHCP怎么破这个坑在现网中特别常见尤其是分支网点或临时项目网络里会混入运营商设备。联通给的光猫路由器一体机默认开启DHCP而且很多版本管理界面里根本不给关闭的选项。如果它和新交换机挂在同一个二层就会出现我前面说的抢答问题。我的处理办法分两种。第一种是网络隔离把ZTP的管理VLAN和光猫的LAN口彻底分开物理上不接到同一个交换机广播域。比如光猫只负责上联出口管理VLAN单独走一台管理交换机DHCP和TFTP服务器也挂在管理VLAN里。这是最彻底的方式。第二种是启用DHCP Snooping过滤非法DHCP服务器。新华三交换机上配置很简单把连接合法DHCP服务器的端口设为信任口其他口都是非信任口dhcp snooping enable dhcp snooping enable vlan 10 interface GigabitEthernet1/0/1 dhcp snooping trust quit这样光猫即使广播DHCP Offer新交换机上的DHCP Snooping也会直接把非信任口收到的Offer丢弃设备只能收到合法DHCP服务器的应答。这个功能在现网隔离不掉运营商设备时是保底线强烈建议掌握。5.4 DHCP Snooping反而把合法DHCP挡了既然提到DHCP Snooping就必须提醒另一个反面案例如果你在网络里提前开了DHCP Snooping但忘了把合法DHCP服务器所在端口配置为信任口那合法Offer也会被丢弃新设备同样永远拿不到地址。排查时先看display dhcp snooping确认信任端口是否正确。这类问题在“网络已经跑着业务、后来才部署ZTP”的环境里尤其容易发生因为有人可能为了安全全局开了Snooping却没同步调整信任口。我的经验是只要涉及ZTP先梳理清楚合法DHCP服务器的位置再决定信任口怎么配。5.5 配置下载成功但设备没应用或者重启丢失配置下载成功说明TFTP链路通了剩下的问题通常是配置本身或保存环节。常见原因有三个一是配置文件中命令有语法错误或依赖前置命令导致执行到某条时就中断了二是设备并非真正的空配置启动ZTP流程没有完整触发旧配置把它带起来了三是文件末尾没有写save force配置只在运行态有效重启丢失。遇到这类问题优先看Console日志里有没有配置加载报错然后逐段排查文件内容。我把这几个高频问题整理成速查表方便现场快速定位现象优先排查方向关键检查命令/工具拿不到IPDHCP服务、地址池、链路VLAN、抢答服务器Wireshark抓包、dhcpd.leases拿到IP下载失败TFTP服务、防火墙、文件名、目录权限tftp get自测、TFTP日志光猫/路由抢答广播域隔离、DHCP Snooping信任口display dhcp snooping配置未生效cfg文件语法、设备非空配置Console日志、display current-configuration重启后配置丢失缺少保存动作、ZTP未完整执行display saved-configuration6. 进阶玩法用Python脚本实现真正的“零配置”6.1 为什么cfg文件还不够要上Python脚本标准ZTP流程里设备下载.cfg文件后执行配置这已经能解决大部分批量开局需求。但cfg文件是静态的每台设备的差异化内容比如IP地址、主机名只能靠DHCP按MAC或序列号下发不同文件维护成本会随着设备数量上涨。新华三Comware V7系列支持另一种ZTP文件Python脚本。设备会把.py文件下载到本地并执行脚本里可以动态获取设备序列号、接口信息再根据条件生成配置命令。换句话说可以用一份脚本覆盖几十台设备每台上电后自己算出自己的主机名和地址这才是真正意义上的“零接触、零模板”。6.2 一个最简Python脚本的编写思路下面这个示例只是为了讲清原理具体API名称和函数在不同设备版本上会有差异一定要以官方《Python脚本配置指导》为准from comware import CLI sn CLI(display device manuinfo) # 示意获取序列号 hostname SW- sn[-6:] CLI(system-view) CLI(fsysname {hostname}) CLI(vlan 10) CLI(interface Vlan-interface10) CLI(ip address 192.168.10.101 255.255.255.0) CLI(return) CLI(save force)脚本的核心逻辑就是读取设备自身的环境信息拼好主机名和地址然后通过CLI封装接口逐条执行命令最后保存。实际生产环境里我更喜欢在脚本开头加一段日志打印把设备序列号、MAC、执行时间都记录下来结束后上传到一个集中日志目录。这样批量开局结束后每台设备什么时候配置的、用了什么参数一目了然验收文档都能自动生成一半。6.3 结合CMDB或Excel做批量差异化的扩展方向脚本ZTP熟悉之后可以再往前走一步把DHCP按MAC锁定地址池、配置文件按设备角色分类这套思路封装成一套“配置模板生成器”。我在项目里的做法是用一个Excel维护所有待开局设备的信息包括MAC、所在楼层、业务VLAN、管理IP然后写个脚本读取Excel自动生成每台设备对应的DHCP host段和配置文件最后往服务器上一丢批量开局就变成了“上电—等待—验收”三部曲。这一步投入的时间不多但对以后每一次新项目交付都是复利。要注意的是自动化程度越高越要在验收环节留足确认动作设备批量起来之后逐台抽查配置是我的习惯不能因为“全自动”就彻底放手。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →