Блог "Дети ОИТа"
/поиск

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, аудит и автоматический откат. При правильной архитектуре это надёжный фундамент для масштабируемой сети.