零接触配置
全自动部署可在您的新瞻博网络设备上自动安装或升级软件,只需极少的手册干预。
全自动部署概述
全自动部署 (ZTP) 允许您在网络中自动配置新的瞻博网络设备,只需极少的手册干预。根据您的设备,您可以使用管理端口或网络端口连接到网络。将设备物理连接到网络并使用默认出厂配置启动时,设备会升级(或降级)软件版本,并从网络自动安装配置文件。配置文件可以是配置或脚本。您可以使用脚本创建特定于设备的配置文件,并对 Web 服务器执行 HTTP 请求操作,以下载特定的配置文件或软件版本。
要在网络上查找必要的软件映像和配置文件,设备会使用您在动态主机配置协议 (DHCP) 服务器上配置的信息。如果未配置 DHCP 服务器提供此信息,设备将使用预安装的软件和默认出厂配置启动。
对于 Junos OS 演化版,全自动部署 (ZTP) 可动态检测 WAN 接口的端口速度,并使用此信息创建具有相同速度的 ZTP 服务器端口。运行 Junos OS 演化版的设备支持通过路由引擎 0 (RE0) 的管理接口或 WAN 接口实现设备配置和软件升级的自动化。
要查看哪些平台支持 ZTP,请在浏览器中转到 功能浏览器。在“功能浏览器”页的“ 探索功能 ”部分中,选择 “所有功能”。在“ 按功能系列分组的功能 ”框中,选择“全自动部署”。您还可以在 搜索要素 编辑框中键入要素的名称。有关 ZTP 支持如何扩展的更多详细信息,请参阅本主题末尾的发行历史记录表。
ZTP 工作流程
当设备使用默认配置启动时,会发生以下事件:
-
DHCP 客户端在支持的接口上运行。
-
DHCP 服务器会调配一个 IP 地址,并在回复中包含与 ZTP 进程相关的多个 DHCP 选项。
-
设备处理 DHCP 选项,查找配置文件,执行脚本,以及升级和/或降级软件。
-
如果映像和配置文件都存在,则安装映像并应用配置。
-
如果仅存在映像文件,则映像将安装在设备上。
-
如果映像与设备上已安装的映像相同,ZTP 将继续并跳过安装步骤。
-
如果设备无法获取映像,ZTP 将尝试再次获取映像。
-
如果映像损坏,安装将失败。
如果由于任何原因安装失败,ZTP 将在其他接口上重试。
-
如果仅存在配置文件,则下载配置。
如果文件的第一行由 #!字符后跟解释器路径,则该文件被视为脚本,并且该脚本由解释器执行。如果脚本返回错误,ZTP 将在其他接口上重试。
如果无法下载配置文件,ZTP 进程将尝试再次下载它。
如果配置文件已损坏、语法错误或包含设备不支持的命令,设备将无法提交,并且 ZTP 将在其他接口上重试。
-
如果没有映像或配置文件,ZTP 将在其他接口上重试。
-
如果没有文件服务器信息,ZTP 将在其他接口上重试。
-
完成配置后,ZTP 进程将被视为成功并终止。
使用脚本配置设备
在 ZTP 过程中,当您连接和启动新的网络设备时,设备会向 DHCP 服务器请求一个 IP 地址。服务器提供设备的软件映像和配置文件的 IP 地址以及文件名和位置(如果已配置)。配置文件可以是配置或脚本。
如果提供了配置文件,则操作系统会根据文件的第一行来确定该文件是否为脚本。如果第一行包含后跟解释器路径的字符 #! ,则操作系统会将文件视为脚本并使用指定的解释器执行它。
如果脚本返回错误(即非零值),ZTP 将在其他接口上重试。
表 1 概述了支持的脚本类型、相应的解释器路径以及在 ZTP 过程中支持该脚本类型的平台。
|
脚本类型 |
解释器路径 |
平台支持 |
|---|---|---|
|
Shell 脚本 |
|
所有设备 |
|
SLAX 脚本 |
|
所有设备 |
|
Python 脚本 |
|
运行具有增强自动化功能的 Junos OS 的设备 运行 Junos OS Evolved 的设备 |
出于安全原因,Junos OS 对在运行 Junos OS 的设备上运行未签名的 Python 脚本有严格的要求。只有运行具有增强自动化功能的 Junos OS 的设备和运行 Junos OS Evolved 的设备才支持在 DHCP option 43 子选项 01 中使用未签名的 Python 脚本。
如果操作系统找不到解释器路径后面的字符 #! ,它会将文件视为文本格式的配置,并将配置加载到设备上。
全自动部署重启进程触发器
发生以下任一事件时,ZTP 将重新启动:
-
请求配置文件、脚本文件或映像文件失败。
-
配置文件不正确,提交失败。
-
没有配置文件和可用的映像文件。
-
映像文件已损坏,安装失败。
-
没有可用的文件服务器信息。
-
DHCP 服务器未配置有效的 ZTP 参数。
-
当所有 DHCP 客户端接口均未进入绑定状态时。
-
在 Junos OS 演化版设备上,如果下载文件失败,ZTP 将重新启动。
当发生上述任何事件时,ZTP 会重置所有 DHCP 客户端配置的接口(管理和网络)上的 DHCP 客户端状态机,然后重新启动状态机。重新启动状态机可使 DHCP 客户端获取最新的 DHCP 服务器配置参数。
在 ZTP 重新启动之前,大约需要 15 到 30 秒才能有足够的时间来构建绑定和未绑定的 DHCP 客户端接口列表。
绑定和未绑定的 DHCP 客户端接口列表可以包含:
-
不具备参赛作品。
-
多个 DHCP 客户端接口。
已从 DHCP 服务器接收所有 ZTP 参数(软件映像文件、配置文件和文件服务器信息)的 DHCP 客户端接口将获得优先级。
ZTP 尝试从文件服务器下载软件映像和配置文件。如果下载失败,ZTP 将清除该接口上的 DHCP 客户端绑定,并在其他接口上重新启动状态机。
ZTP 重新启动过程一直持续到软件升级成功或操作员手动提交用户配置并删除 ZTP 配置为止。
在运行 Junos OS Evolved 的 PTX10008 路由器上实现全自动部署
全自动部署 (ZTP) 允许您在网络中自动配置路由器,只需极少的手册干预。从 Junos OS 演化版 20.1R1 版开始,PTX10008 设备支持通过路由引擎 0 (RE0) 的管理接口自动执行设备配置和软件升级。
ZTP 在出厂默认模式下在 PTX10008 设备上启用。您可以使用动态主机配置协议 (DHCP) 服务器将管理接口 (re0:mgmt-0) 连接到网络,然后将 ZTP 配置添加到 DHCP 服务器。在 PTX10008 设备上使用命令 show interfaces re0:mgmt-0 查找要在 DHCP 服务器配置中使用的接口的 MAC 地址。
当 PTX10008 设备能够联系 DHCP 服务器并检索 ZTP 参数时,将基于这些参数执行以下 ZTP 操作:
-
使用指定的协议获取指定的映像和/或配置文件。
-
如果指定了映像,ZTP 会在两个路由引擎上安装映像并重新启动设备。
-
如果指定了配置文件:
-
如果文件是 Junos 配置,ZTP 会在设备上应用该配置。
-
如果文件是脚本,ZTP 将在设备上执行脚本。
-
使用 DHCP 选项实现全自动部署
全自动部署 (ZTP) 允许您自动配置您添加到网络中的瞻博网络设备。您可以使用要执行的脚本或要加载的配置文件来配置任何受支持的设备。您还需要使用此过程中提供的必要信息配置 DHCP 服务器,以便使用 ZTP。
ZTP 要求设备处于出厂默认状态。出厂设备在预装软件和出厂默认配置的情况下启动。如果当前没有出厂默认配置,则可以发出命令 request system zeroize 。
开始之前:
-
确保设备可以访问以下网络资源:
-
DHCP 服务器,提供网络上软件映像和配置文件的位置
请参阅 DHCP 服务器文档,了解配置说明。
-
存储软件映像和配置文件的文件传输协议(匿名 FTP)、超文本传输协议 (HTTP) 或安全超文本传输协议 (HTTPS) 或简单文件传输协议 (TFTP) 服务器
注意:虽然支持 TFTP,但我们建议改用 FTP 或 HTTP,因为这些传输协议更可靠。
注意:HTTP URL 长度限制为 256 个字符。
-
用于执行反向 DNS 查找的域名系统 (DNS) 服务器(不支持)。
-
(选答)用于在网络上执行时间同步的 NTP 服务器
-
(选答)用于管理系统日志消息和警报的系统日志 (syslog) 服务器。
ZTP 期间,系统日志消息将转发至此系统日志服务器。
-
-
找到并记录设备的 MAC 地址。
在 PTX10008 设备上,管理 MAC 地址位于路由引擎上。
设备执行软件更新过程时,无法提交配置。如果在设备执行配置文件自动安装过程时提交配置,则该过程将停止,并且不会从网络下载配置文件。
要使用 DHCP 选项为设备启用全自动部署:
使用 DHCPv6 选项实现全自动部署
Junos OS Flex 映像不支持使用 DHCPv6 选项的全自动部署 (ZTP)。Flex 映像的文件名中有“flex”一词。以下是 Flex 映像的示例文件名: jinstall-host-qfx-5e-flex-x86-64-20.4R3.8-secure-signed.tgz。
DHCPv6 协议没有用于IA_NA(非临时地址的身份关联)的子网选项,用于学习和安装子网路由。相反,子网路由是通过邻接方发现协议安装的。
在 IPv6 中,设备会使用路由器播发(注册机关)消息定期播发 IPv6 前缀以及其他链路参数。在客户端(运行 ZTP 的瞻博网络设备)上,绑定 DHCPv6 客户端后,邻接方发现协议 (NDP) 将学习这些前缀,并通过客户端接口安装前缀路由,下一跃点作为指向网关设备本地地址的链路。
在客户端设备上,默认情况下会与 DHCPv6 配置一起启用路由器播发配置。
-
确保设备可以访问以下网络资源:
-
DHCP 服务器,提供网络上软件映像和配置文件的位置
请参阅 DHCP 服务器文档,了解配置说明。
-
存储软件映像和配置文件的文件传输协议(匿名 FTP)、简单文件传输协议 (TFTP)、超文本传输协议 (HTTP) 或安全超文本传输协议 (HTTPS) 服务器。
注意:HTTP URL 长度限制为 256 个字符。
-
-
找到并记录设备上打印的 MAC 地址。
全自动部署 (ZTP) 允许您自动配置您添加到网络中的瞻博网络设备。您可以使用要执行的脚本或要加载的配置文件来配置任何受支持的设备。
要使用 ZTP,请配置 DHCP 服务器以提供所需信息。如果未配置 DHCP 服务器提供此信息,设备将使用预安装的软件和默认出厂配置启动。如果您的设备未处于出厂默认状态,则可以发出命令 request system zeroize 。
或者,您可以为家庭电话服务器或重定向服务器配置 HTTP 代理服务器。当 phone-home 客户端通过 DHCP option 17 子选项 8 收到有关 HTTP 代理服务器的信息时,它将与代理服务器创建 HTTPS 透明隧道。建立隧道后,phone-home 客户端将使用该隧道作为 phone-home 服务器或重定向服务器的代理。phone-home 客户端通过隧道将软件映像和配置文件下载到设备上。自举完成后,设备将重新启动,隧道将退出。
从 Junos OS 20.2R1-S1 版本开始,MX 系列、EX3400、EX4300、QFX5100 和 QFX5200 交换机支持 DHCPv6 客户端。DHCPv4 和 DHCPv6 客户端都作为默认配置的一部分包含在内。在自举过程中,设备首先使用 DHCPv4 客户端向 DHCP 服务器请求有关映像和配置文件的信息。设备按顺序检查 DHCPv4 绑定。如果其中一个 DHCPv4 绑定出现故障,设备将继续检查绑定,直到配置成功为止。但是,如果没有 DHCPv4 绑定,设备将检查 DHCPv6 绑定,并遵循与 DHCPv4 相同的流程,直到设备可以成功配置为止。DHCP 服务器使用 DHCPv6 选项 59 和 17 以及适用的子选项在自身自身和 DHCP 客户端之间交换 ZTP 相关信息。
设备执行软件更新过程时,无法提交配置。如果在设备执行配置文件自动安装过程时提交配置,则该过程将停止,并且不会从网络下载配置文件。
要对使用 DHCPv6 选项的设备使用全自动部署,请执行以下操作:
监控全自动部署
您可以使用控制台和操作模式命令来监控全自动部署。
对于 Junos OS Evolved,要监控全自动部署,请使用 show system ztp 操作模式命令。
使用控制台监控 Junos OS Evolved 中的全自动部署
目的
系统日志文件提供以下信息:自动升级过程的状态、绑定和未绑定的 DHCP 客户端接口列表、文件服务器的 IP 地址、映像和配置文件的名称和位置,以及获取配置和映像文件的成功和失败尝试。
行动
使用控制台中的信息监控自动升级过程。
以下是 Junos OS Evolved 的输出示例。
164.319243] ztp.py[15456]: 2019-07-11 17:54:25 INFO: ZTP: Booted with factory settings set auto-image-upgrade ztp.py[15456]: 2019-07-11 17:54:26 INFO: ZTP: loading config [ 184.456977] ztp.py[15456]: 2019-07-11 17:54:45 INFO: ZTP: Releasing prior dhcp state [ 184.520075] ztp.py[15456]: 2019-07-11 17:54:46 INFO: ZTP: initializing [ 184.520736] ztp.py[15456]: 2019-07-11 17:54:46 INFO: ZTP: Interface vmb0 Watching path /var/db/scripts/ztp/ztpopt.vmb0 [ 184.566657] ztp.py[15456]: 2019-07-11 17:54:46 INFO: ZTP: Interface vmb0v6 Watching path /var/db/scripts/ztp/ztpopt6.vmb0 [ 184.603976] ztp.py[15456]: 2019-07-11 17:54:46 INFO: ZTP: remove "chassis auto-image-upgrade" from config to abort ZTP [ 184.605897] ztp.py[15456]: 2019-07-11 17:54:46 INFO: ZTP: send DHCP discover on interface vmb0 [ 184.606083] ztp.py[15456]: 2019-07-11 17:54:46 INFO: ZTP: send DHCP discover on interface vmb0v6 [ 205.043925] ztp.py[15456]: 2019-07-11 17:55:06 INFO: ZTP: loading options config [ 225.528749] ztp.py[15456]: 2019-07-11 17:55:27 INFO: ZTP:(vmb0) Running: ['/sbin/dhclient', '-1', '-v', 'vmb0', '-cf', '/var /db/scripts/ztp/dhclient.conf', '-pf', '/var/db/scripts/ztp/vmb0.pid4'] [ 227.349638] ztp.py[15456]: 2019-07-11 17:55:28 INFO: ZTP: loading options config [ 248.512666] ztp.py[15456]: 2019-07-11 17:55:50 INFO: ZTP:(vmb0) Running: ['/sbin/dhclient', '-6', '-D', 'LL', '-1', '-v', 'v mb0', '-cf', '/var/db/scripts/ztp/dhclient6.conf', '-pf', '/var/db/scripts/ztp/vmb0.pid6'] [ 309.448411] ztp.py[15456]: 2019-07-11 17:56:50 ERROR: ZTP:(vmb0v6) Unable to get DhcpInfo [ 309.452340] ztp.py[15456]: 2019-07-11 17:56:50 INFO: ZTP: intf vmb0 ipaddr is 10.10.213.111 [ 309.453114] ztp.py[15456]: 2019-07-11 17:56:50 INFO: ZTP: intf vmb0 subnetmask is 255.255.255.0 [ 309.453379] ztp.py[15456]: 2019-07-11 17:56:50 INFO: ZTP: intf vmb0 option150addr is 10.10.213.1 [ 309.453619] ztp.py[15456]: 2019-07-11 17:56:50 INFO: ZTP: intf vmb0 option66addr is 10.10.213.1 [ 309.453836] ztp.py[15456]: 2019-07-11 17:56:50 INFO: ZTP: intf vmb0 host-name is sw-s3-u8-07 [ 309.454093] ztp.py[15456]: 2019-07-11 17:56:50 INFO: ZTP: intf vmb0 ntp server is ['10.129.255.62'] [ 309.454267] ztp.py[15456]: 2019-07-11 17:56:50 INFO: ZTP: intf vmb0 ntp server is ['10.129.255.62', '10.129.255.63'] [ 309.454451] ztp.py[15456]: 2019-07-11 17:56:50 INFO: ZTP: intf vmb0 log server is 10.10.213.1 [ 309.454673] ztp.py[15456]: 2019-07-11 17:56:50 INFO: ZTP: intf vmb0 image path is /ZTP_IMAGES/junos-evo-install-ptx-chassis-x 86-64-19.4EVO.iso [ 309.454886] ztp.py[15456]: 2019-07-11 17:56:50 INFO: ZTP: intf vmb0 config path is /ZTP_CONFIG/sw-s3-u8-07.cfg [ 309.455217] ztp.py[15456]: 2019-07-11 17:56:50 INFO: ZTP: intf vmb0 transfertype is tftp [ 309.457209] ztp.py[15456]: 2019-07-11 17:56:50 INFO: ZTP: Chose interface vmb0: [ 309.633177] ztp.py[15456]: 2019-07-11 17:56:51 INFO: ZTP: loading options config [ 333.584288] ztp.py[15456]: 2019-07-11 17:57:15 INFO: ZTP: downloading image file/ZTP_IMAGES/junos-evo-install-ptx-chassis-x86 -64-19.4-20190708.2-EVO.iso [ 333.584840] ztp.py[15456]: 2019-07-11 17:57:15 INFO: ZTP: downloading image file local /var/tmp/junos-evo-install-ptx-chassis -x86-64-19.4-20190708.2-EVO.iso [ 554.625986] ztp.py[15456]: No such vrf (None) [ 554.628523] ztp.py[15456]: 2019-07-11 18:00:56 INFO: ZTP: Downloaded image file [ 554.629289] ztp.py[15456]: 2019-07-11 18:00:56 INFO: ZTP: Downloading config file /ZTP_CONFIG/sw-s3-u8-07.cfg [ 555.198176] ztp.py[15456]: No such vrf (None) [ 555.200076] ztp.py[15456]: 2019-07-11 18:00:56 INFO: ZTP: Downloaded config file [ 555.201882] ztp.py[15456]: 2019-07-11 18:00:56 INFO: ZTP: loading options config 577.427218] ztp.py[15456]: 2019-07-11 18:01:18 INFO: ZTP: Upgrading image [ 577.427770] ztp.py[15456]: 2019-07-11 18:01:18 INFO: ZTP: Upgraded image localpath is /var/tmp/junos-evo-install-ptx-chassis-x86-64-19.4EVO.iso [ 577.483927] ztp.py[15456]: 2019-07-11 18:01:19 INFO: ZTP: Installing via CLI (/var/tmp/junos-evo-install-ptx-chassis-x86-64-19.4-20190708.2-EVO.iso) [ 577.484271] ztp.py[15456]: 2019-07-11 18:01:19 INFO: ZTP: Running: ['/usr/sbin/cli', '-c', 'show chassis hardware | display xml | match <name> | match "CB" | count'] [ 577.775918] ztp.py[15456]: 2019-07-11 18:01:19 INFO: ZTP: Dual-RE setup detected [ 577.776130] ztp.py[15456]: 2019-07-11 18:01:19 INFO: ZTP: Checking for second RE [ 577.776894] ztp.py[15456]: 2019-07-11 18:01:19 INFO: ZTP: Running: ['/usr/sbin/cli', '-c', 'show chassis hardware | display xml | match <name> | match "Routing Engine" | count'] [ 577.987278] ztp.py[15456]: 2019-07-11 18:01:19 INFO: Running: ['/usr/sbin/cli', '-c', 'request system software add /var/tmp/junos-evo-install-ptx-chassis-x86-64-19.4EVO.iso | display xml'] [ 738.153925] ztp.py[15456]: 2019-07-11 18:03:59 INFO: ZTP: wait returns: 0 [ 738.154148] ztp.py[15456]: 2019-07-11 18:03:59 INFO: ZTP: Return Code: 0 [ 738.154281] ztp.py[15456]: 2019-07-11 18:03:59 INFO: ZTP: Upgraded image status is 0 [ 738.154749] ztp.py[15456]: 2019-07-11 18:03:59 INFO: ZTP: Upgrade succeeded Rebooting [ 738.155372] ztp.py[15456]: 2019-07-11 18:03:5 Stopping Ethernet Bridge Filtering Tables...
意义
控制台显示 ZTP 的进度。
使用 show dhcp client binding 命令
目的
发出命令 show dhcp client binding 以显示 DHCP 客户端绑定信息
行动
发出命令以 show dhcp client binding 显示 DHCP 客户端的 IP 地址、DHCP 客户端的硬件地址、DHCP 客户端的 IP 地址租约到期的秒数、绑定表中 DHCP 客户端 IP 地址的状态以及具有活动客户端绑定的接口的名称。
显示 DHCP 客户端绑定
user@device# show dhcp client binding IP address Hardware address Expires State Interface 10.0.0.0 00:22:83:2a:db:dc 0 SELECTING irb.0 10.6.6.13 00:22:83:2a:db:dd 49201 BOUND vme.0 10.0.0.0 00:22:83:2a:db:df 0 SELECTING xe-0/0/0.0 10.0.0.0 00:22:83:2a:db:e0 0 SELECTING xe-0/0/1.0
意义
此命令的输出显示有一个客户端接口已绑定,并且有三个接口正在从 DHCP 服务器接收 DHCP 报价。
使用 show dhcpv6 client binding 命令
目的
发出命令 show dhcpv6 client binding 以显示 DHCP 客户端绑定信息
行动
发出命令 show dhcp6 client binding 以显示 DHCPv6 客户端的 IP 地址、DHCPv6 客户端的硬件地址、DHCPv6 客户端的 IP 地址租约到期的秒数、绑定表中 DHCPv6 客户端 IP 地址的状态以及具有活动客户端绑定的接口的名称。
显示 dhcpv6 客户端绑定
user@device# show dhcpv6 client binding IP/prefix Expires State ClientType Interface Client DUID 2001:db8::10 57 SELECTING STATEFUL em0.0 LL0x3-54:4b:8c:d3:a2:34 2001:db8::10 46 SELECTING STATEFUL em2.0 LL0x3-54:4b:8c:d3:a2:35 2001:db8::10 38 SELECTING STATEFUL et-0/0/0:0.0 LL0x3-54:4b:8c:d3:a2:3b 2001:db8::10 530 BOUND STATEFUL et-0/0/0:1.0 LL0x3-54:4b:8c:d3:a2:3c
意义
此命令的输出显示,有一个客户端接口已绑定,并且有三个接口正在从 DHCP 服务器接收 DHCPv6 产品。
变更历史表
是否支持某项功能取决于您使用的平台和版本。使用 功能资源管理器 确定您的平台是否支持某个功能。