Zero Touch Provisioning сетевых устройств: архитектура, безопасность и рабочие примеры
Практическое руководство по внедрению Zero Touch Provisioning для сетевых устройств с контролем целостности, версионированием и автоматическим откатом.
Zero Touch Provisioning сетевых устройств: архитектура, безопасность и рабочие примеры
Аннотация
Практическое руководство по внедрению ZTP (DHCP+BOOTP+HTTP/HTTPS) для коммутаторов и маршрутизаторов с контролем целостности конфигурации, версионированием и откатом. Покрываем Cisco IOS-XE, Arista EOS, Juniper Junos и Huawei VRP, интеграцию с Git, проверку подписей и сценарии отказов.
1. Архитектура ZTP
Компоненты:
- DHCP/BOOTP: опции 66 (TFTP server) и 67 (boot filename) или их HTTPS-аналоги.
- Сервер конфигураций: HTTPS-репозиторий с версионированием (Git), подписи (minisign/PGP), строгий TLS.
- Агент устройства: валидирует подпись конфига, проверяет целостность, применяет через атомарную транзакцию.
- Мониторинг: события ZTP в syslog/streaming, health-check после применения.
Угрозы и контрмеры:
- Rogue DHCP: 802.1X/DAI, DHCP snooping, ограниченные VLAN.
- Подмена конфига: подписи, pinning сертификатов, EAP-TLS для управления.
- Rollback-бомба: версионирование, автоматический откат по health-check.
- Отказ сервера: кэш последней удачной конфигурации на устройстве.
2. Предварительные условия
- Сеть: выделенный VLAN для ZTP, ACL на доступ к серверу конфигураций.
- Инфраструктура: Git-сервер, CI для lint/validate конфигов, артефакты с подписями.
- PKI: внутренний CA, CRL/OCSP, ротация сертификатов.
- NTP: синхронизация времени на устройствах и сервере.
3. Реализация на разных платформах
3.1 Cisco IOS-XE
! DHCP опция 67 указывает на bootstrap.py
! bootstrap.py загружается по HTTPS с проверкой сертификата
boot-start-marker
system bootstrap http://ztp.example.com/bootstrap.py
boot-end-marker
! Пример Python-скрипта (упрощённо)
import requests, ssl, subprocess
r = requests.get('https://ztp.example.com/configs/switch-01.conf', verify='/etc/ssl/certs/ca-bundle.crt')
open('/bootflash/ztp.conf', 'wb').write(r.content)
subprocess.run(['copy', '/bootflash/ztp.conf', 'running-config'])
Ключевые моменты: pinning сертификата, проверка подписи конфига, журналирование в flash.
3.2 Arista EOS
- ZTP через ztp.ini и bootstrap скрипт.
- Поддержка HTTPS, проверка через minisign.
- Event-handler для post-ZTP health-check.
3.3 Juniper Junos
- op script на Python, загружаемый через DHCP опции.
- validate конфигурации через commit check.
- Автоматический rollback по rescue-конфигурации.
3.4 Huawei VRP
- Трансфер через HTTPS с учётными данными в TPM.
- Схема с двойным конфигом и активацией по таймеру.
4. Безопасность и комплаенс
- Подписи конфигураций: minisign или PGP, проверка перед применением.
- TLS: строгая проверка, запрет downgrade, ротация ключей.
- Сетевой уровень: выделенный VLAN, ACL, 802.1X для портов.
- Аудит: все события ZTP в SIEM, неизменяемый лог.
5. CI/CD для конфигураций
- Git-flow: feature-branches, PR с линтером (ciscoconfparse, yamllint).
- Проверки: syntax, policy (BGP communities, MTU, NAC), secrets scan.
- Артефакты: конфиг с подписью, манифест версий, чек-суммы.
6. Сценарии отказов и runbooks
- DHCP не отвечает: fallback на статический IP из ROMON.
- Сервер недоступен: использование кэша последней удачной конфигурации.
- Ошибка подписи: алерт, блокировка применения, переход на rescue.
- Health-check не пройден: автоматический rollback, уведомление.
7. Чек-лист внедрения
- Выделен VLAN и ACL для ZTP.
- Настроен HTTPS-сервер с версионированием и подписями.
- Развёрнута PKI с CRL/OCSP.
- CI проверяет синтаксис и политики.
- Health-check после ZTP с автоматическим rollback.
- Аудит в SIEM, алерты на аномалии.
- Runbooks для каждого сценария отказа.
Заключение
ZTP снижает time-to-provision с часов до минут, но требует дисциплины безопасности: подписи, TLS, аудит и автоматический откат. При правильной архитектуре это надёжный фундамент для масштабируемой сети.