Всем привет! Это команда Департамента телекоммуникаций КРОК и мы продолжаем свои эксперименты. 

В ситуации, когда с рынка ушли ключевые вендоры, мы вместе с нашими заказчиками отправились на поиски альтернативных решений. Сегодня мы поделимся с вами способом упростить развертывание и администрирование сетевых устройств с помощью Open Source технологий. Предложенная нами схема – не готовый продукт, а лишь попытка ответить на три вопроса: 

  1. Можно ли на Open Source собрать рабочую Network management system?

  2. Какие могут возникнуть сложности? 

  3. Какие есть пути их решений? 

Итак, что мы хотим от системы:

  • Поддержку Zero Touch Provisioning коммутаторов, маршрутизаторов.

  • Возможность менять конфигурацию устройств, после внесения изменений в системе управления. 

  • Низкий уровень вхождения, для того чтобы любой инженер мог ее администрировать и поддерживать.

  • Построение исключительно на Open Source решениях. 

Что нам для этого понадобится:

В нашей лаборатории для инвентаризации и учета IP адресации мы используем NetBox. Мы выбрали это приложение в качестве базового инструмента и как единый источник правды (Single Source of True). NetBox не только хранит инвентарную информацию (серийный номер, модель, производитель), а также позволяет добавлять информацию о интерфейсах, vlan-ах, VRF, NTP, Syslog серверах. 

Так же NetBox позволяет использовать самописные скрипты на Python и имеет очень функциональный API интерфейс. Это позволит нам автоматизировать и значительно ускорить настройку сетевого оборудования. Особенно в ситуации, когда нужно одновременно настроить или накатить изменения на сотни устройств. 

Следующий компонент нашей системы - AWX/Ansible. Мы решили использовать его для внесений изменений на оборудование, которое уже находится в эксплуатации.

В качестве хранилища конфигураций пока выступает SFTP сервер на CentOS. Для контроля версий было бы правильней использовать Git, но на этапе эксперимента нам показалось это излишним.

Для мониторинга наших устройств мы используем Zabbix,  который является одной из лучших систем мониторинга среди open source решений. Инструментом визуализации мы выбрали Grafana, которая более гибкая с точки зрения визуализации и построения дашбордов. 

Отлично, с компонентами более-менее разобрались. Теперь нужно придумать и реализовать логику.

Мы начали с функционала ZTP (Zero Touch Provisioning) для WAN маршрутизаторов. В качестве подопытных выбрали виртуальные маршрутизаторы Huawei AR1000v для тестирования в виртуальной лаборатории EVE-NG.

Прежде чем сделать ZTP нам нужно подготовить конфигурацию для устройств.

Чтобы подготовить конфигурацию, нам нужно сначала получить вводные данные.

А чтобы их получить из NetBox, их нужно сначала добавить, логично, да?

Итак, сначала нам надо добавить новую площадку в NetBox, добавить данные провайдера, выделить подсеть, добавить новое оборудование, определить его hostname, IP адрес, маршрут по умолчанию, NTP сервера и т.д. и т.п.

Каждый раз заносить эту информацию руками не удобно и поэтому мы написали скрипт, который позволяет все это делать автоматически. Для этого нам потребуется заранее определить некоторые базовые параметры, такие как:

- Подсеть, которая будет нарезаться на маленькие подсети для удаленных офисов. (Для тестов мы определили 192.168.64.0/19 из которой будут выделяться подсети /24 для каждого нового офиса)

- Крупные регионы, где могут открываться наши офисы;

- Провайдеры и типы каналов связи, для подключения к сети. В лабе мы добавили 1 провайдера с L3VPN каналами.

Получилась вот такая форма для открытия нового офиса:

Как результат выполнения скрипта мы получаем:

  • Новая площадка добавлена в NetBox

  • Автоматически создана подсеть новой площадки и ее функциональные подсети

  • Новое устройство добавлено в NetBox со статусом ‘Planned’

  • В конфигурации нового устройства добавлены все необходимые подинтерфейсы и их настройки

  • На базе всей этой информации подготовлен конфигурационный файл и выложен на SFTP сервер

  • В система мониторинга создана новая Host Group с именем новой площадки и новое устройство добавлено в мониторинг в статусе ‘Planned’

Теперь осталось подключить наше устройство к сети.

Для ZTP у Huawei используется технология Auto Config. Почитать про нее можно тут

При подключении устройства в сеть DHCP сервер сообщает ему где находится SFTP сервер, имя файла со списком конфигураций и другую служебную информацию. Маршрутизатор скачивает свою конфигурацию, применяет ее и перезагружается. После этого маршрутизатор появляется в сети. Как только роутер становится доступен в системе мониторинга, его статус автоматически изменяется на ‘active’, как в Zabbix, так и в NetBox

Таким образом мы можем очень быстро развернуть новую площадку и подготовить конфигурацию для WAN маршрутизатора. В дальнейшем можно автоматизировать добавление коммутаторов, ИБП и любых сетевых устройств, что позволит подготовить необходимое оборудование для установки за считанные минуты.

По такому же принципу мы реализовали развертывание новых коммутаторов в ЦОД.

С помощью скрипта и формы в NetBox мы выбираем ЦОД, в котором планируется установить коммутаторы, их количество, производителя и модель.

Скрипт автоматически создает указанное количество устройств, определяет их имена, выделяет IP адреса из подсети управления нашего ЦОД, генерирует конфигурационный файл и добавляет их в систему мониторинга:

Что в результате?

Мы собрали систему, построенную на open source решениях, которая позволяет вести учет оборудования и адресного пространства, мониторить состояние оборудования, упрощает и ускоряет добавление новых площадок и устройств. 

Но остались сложности, решение которым мы пока не нашли. Первая касается разнообразия настроек оборудования у разных вендоров. Как быть, если у заказчика в одной сети используется оборудование от разных производителей? Вторая – изменение изменений. Идея в том, чтобы меняя конфигурацию оборудования в NetBox, изменения автоматически применялись и на конечных устройствах.  Тут есть два пути: можно вносить изменения по частям, меняя настройки для каждого интерфейса или подготовить новый файл конфига и залить его железо. 

В ближайшее время мы планируем  протестировать различные варианты решений данных проблем и снова вернемся к вам системами, построенными на Open Source. 

Заходите в наш уютный Telegram-канал и чат-бот мероприятий.

Комментарии (16)


  1. Stillgray
    15.11.2022 16:09
    +2

    NOCproject не подходит?


    1. MKazakov_croc Автор
      15.11.2022 19:06

      Скорее всего подходит (надо еще поизучать), но нам было интересно посмотреть на возможности системы, заточенной под конкретные задачи. Использование нескольких компонентов также позволило глубже познакомиться с этими решениями и проверить их совместимость.


    1. net_racoon
      16.11.2022 09:22

      А он разве еще жив?


      1. Berserkr
        17.11.2022 12:23

        А чего ему умирать? Это коммерческий проект работающий на огромных сетях в том же ростелеке -https://www.tadviser.ru/index.php/Продукт:СОВА_Программный_комплекс


  1. MechanicusJr
    15.11.2022 20:34

    Netbox кароши!


  1. admOS
    16.11.2022 09:27

    А скрипты посмотреть дадите?


    1. MKazakov_croc Автор
      16.11.2022 10:53

      К сожалению нет, потому что это интеллектуальная собственность компании. Но если у вас есть похожие задачи, можем обсудить пути их решения.


      1. AlexanderS
        16.11.2022 13:42
        +2

        Формально это же нарушение GPL?


        1. MKazakov_croc Автор
          16.11.2022 14:44

          Нет, потому что мы не вносим изменений или доработок в исходный код продуктов, которые используем. Мы используем только API интерфейсы систем для возможности интеграций разных решений.


          1. AlexanderS
            16.11.2022 14:55

            Неважно лезете вы в код или нет. Важно содержит ли ваш конечный продукт коды (правленные или не правленные) под GNU GPL.


            1. extiander
              16.11.2022 18:00

              нет
              гпл не требует распростронять код для инхауз продуктов

              если они его передают клиенту, они должны предоставить возможность (клиенту) получить исходный код, не более


            1. MKazakov_croc Автор
              16.11.2022 18:04

              Лицензия GPL распространяется на исходные программы и измененные, т.е. модифицированные. Мы не модифицировали программы – не было создано новое произведение. Потому программа остаётся исходной и её использование мы никак, естественно, не ограничиваем. Наш скрипт – это независимый объект интеллектуальных прав, потому мы вправе самостоятельно определять его порядок использования третьими лицами.


              1. AlexanderS
                16.11.2022 18:28

                Тут, наверное, комментатор выше более прав — конечным продуктом вы пользуетесь «внутри себя» и не занимаетесь его распространением. В коммерческих целях это происходит или нет — неважно: лицензия не нарушается. Вот микротик, например, берёт ядро, модифицирует, на этой базе делает ROS и продаёт свой продукт другим — тут GPL однозначно нарушается. Правда пока это ни к чему страшному ни для кого не привело)


      1. admOS
        17.11.2022 09:27
        -1

        Тогда статья эта сугубо рекламная, а не техническая. Мне всегда казалось, что на Хабре пишут технические статьи. Вам с ней в рекламный журнал надо.


        1. MKazakov_croc Автор
          17.11.2022 12:02

          А в чем реклама? Сейчас все находятся в непростой ситуации, ищут варианты решений. Мы поделились с сообществом нашим опытом расширения возможностей Open Source продуктов за счет их интеграции. Судя по количеству людей, добавивших материал в закладки, он был кому-то полезен.

          Пост опубликован в блоге компании, скрипт писался в рабочее время, а значит является интеллектуальной собственностью, представляющей коммерческий интерес. Если у вас или ваших заказчиков есть похожие задачи, обращайтесь, с радостью поможем.


  1. bukoka
    16.11.2022 17:59

    Тут есть два пути: можно вносить изменения по частям, меняя настройки для каждого интерфейса или подготовить новый файл конфига и залить его железо. 

    Там гораздо больше вариантов, чем два пути, но каждый из этих вариантов имеет свои боли (NETCONF\YANG)

    Просто оставлю это здесь - https://habr.com/ru/post/667440/ :)