cBackup — резервное копирование конфигураций сетевого оборудования

    Лучше резервного копирования может быть только резервное копирование с контролем версий и проверкой целостности. Существует уйма программного обеспечения различного уровня платности под разные операционные системы для резервного копирования файлов, баз данных и образов, а также для управления конфигурациями серверов и ПО. А вот для работы с конфигурациями сетевого оборудования решений не так и много.



    Мы создали приложение cBackup (от configuration backup) для работы с конфигурациями сетевого оборудования. Кроме непосредственно резервного копирования конфигов, можно отслеживать изменения между их версиями, что помогает локализовать источник проблемы при восстановлении после сбоев. cBackup — open source и распространяется бесплатно, включая отдельно скачиваемые шаблоны поддержки различных сетевых устройств.

    Для кого?


    cBackup разрабатывался админами для админов, которым не требуется тяжеловес типа NOC Project. Мы в своей работе администрируем несколько тысяч свитчей и роутеров, поэтому поддержание сетевой конфигурации в должном порядке — жизненная необходимость. Отсюда и вполне осязаемые параллели в основных принципах работы: discovery, как в системах мониторинга сетевой инфраструктуры; уже где-то виданная терминология в большинстве разделов; управление расписанием, как в crontab и так далее.

    Что уже есть?


    Текущая версия доступна для скачивания в виде tar.gz архива, а также в виде rpm и deb пакетов. Документация в наличии. Система изначально проектировалась под Linux, но и под Windows запустить можно, хотя официальной поддержки пока нет. После установки пакета или распаковки на подготовленный сервер, потребуется пройти установку в самой системе через веб-инсталлятор. Документация максимально подробно освещает этот процесс, поэтому в рамках материала в PR-хабе установка и эксплуатация описываться не будут. Если появятся запросы, то про техническую сторону работы и юзкейсы расскажу в отдельном материале в профильном хабе.

    Если коротко описать архитектуру, то интерфейс cBackup — это веб-приложение, написанное на Yii2 фреймворке с демоном, написанном на Java 8 с использованием Spring Boot. В качестве базы данных используется MySQL, а для контроля версий используется Git. Система, обрабатывающая 1200 свитчей и роутеров, вполне комфортно себя чувствует на виртуалке с двумя ядрами и двумя гигабайтами оперативки, обрабатывая задачи по сбору конфигураций, STP и гео карт в 30 потоков. Место на жёстком диске расходуется тоже экономно — за год использования папка приложения с данными занимает 350 Мб, а база данных — 35 Мб.



    cBackup бесплатен и распространяется по лицензии Affero GPL v3. Также бесплатны наши плагины, обновления и скачиваемый контент с поддержкой вендоров и устройств. На данный момент интерфейс системы поддерживает английский и русский языки. Скрытых платежей, ограничений функционала и микротранзакций нет и не планируется. Впрочем, наша команда открыта для сотрудничества по деплою, запросам на официальную поддержку для бизнеса с SLA и для корпоративной поддержки, включая индивидуальные разработки.

    Реестр подсетей и оборудования, автоматический поиск новых устройств


    cBackup умеет работать как по предопределённому вручную списку узлов, так и ходить по заданным подсетям, обнаруживая установленные устройства (discovery). Отдельно можно исключить адреса из любых процессов и задач. Поддержка оборудования скачивается и устанавливается из официального репозитория. Если же сервер с бэкапером находится в изолированной сети и доступа в интернет не имеет, можно закачать файлы вручную или же добавить поддержку нового оборудования самостоятельно.

    Сам по себе менеджмент реестра подсетей и оборудования может показаться излишне навороченным, но поработав с разными вендорами, мы убедились, что каждый придумывает какие-то свои фишки в протоколах и процессах. И речь даже не об STP, реализация которого может отличаться, как день от ночи, а о банальной работе с командной строкой по SSH. Поэтому менеджмент инфраструктуры сильно детализирован, обеспечивая возможность создавать плагины и фабрики для отдельных моделей и/или вендоров, переопределяя взаимодействие с устройством или моделью на любом этапе.

    Резервное копирование конфигураций


    Непосредственно задачи по взаимодействию с узлами возложены на системный сервис, который работает в многопоточном режиме. Сервис являет собой исполняемый файл на Java и не задействует системный crontab, используя исключительно свой функционал. С ядром системы демон общается через RESTful API и, теоретически, может быть вообще вынесен на отдельный сервер, если на то возникнет необходимость. Взаимодействие с конечными устройствами оформлено в виде последовательностей команд с обработкой получаемых данных, и может осуществляться по протоколам Telnet, SSH и SNMP v1/v2.

    Система контроля версий


    Одной из главных целей для нас было дать возможность не только прочитать и восстановить конфиг из резервной копии в рамках disaster recovery, но и также в случае факапа с конфигурацией найти проблему. Поскольку с оборудованием работает значительное количество операторов, поиск и локализация изменений для нас были крайне важной задачей. Вообще, на Git в нашей системе возложено довольно много функций: контроль версий конфигураций, обновление системы, скачивание и обновление поддержки оборудования и вендоров.

    Плагины и API


    Мы убеждены, что каждая система должна делать своё дело. Поэтому, если в названии софта есть слово 'backup', то оно в первую очередь должно заниматься, собственно, самим бэкапом. Всё остальное — строго опционально. cBackup реализует функционал подключения плагинов, но на данный момент их всего два — позиционирование узла на карте на основании информации в OID system.sysLocation.0 и отрисовка STP деревьев. Если возникнет реальная необходимость и запрос — мы охотно допишем требуемый функционал. Сюда же относится и API, который позволяет интегрировать cBackup с другими сервисами.

    Что будет?


    Изначально проект писался «для внутренних нужд» и по сути являлся переделкой с нуля самописной утилиты для сохранения конфигураций свитчей. Уже в процессе рефакторинга пришла идея, что проект может оказаться полезным и за пределами наших сетей. Система обросла уймой новых фишек с прицелом на универсальность, получила многоязычность и более серьёзную документацию, а теперь вот вышла на публику.

    Планы по развитию есть, и на доске за моей спиной висит roadmap на грядущие версии. Но поскольку на данный момент cBackup покрывает все наши нужды, хотелось бы выслушать пожелания сообщества и пользователей, если кто-то начнёт применять это ПО. Пожелания и вопросы можно оставлять в почте, на нашем форуме, в issue трекере на Github или в нашем чате в Discord.

    Из ключевых фич в очереди на реализацию у нас значатся: поддержка SNMP v3, поддержка IPv6, валидация конфигов по заданным правилам и импорт узлов из внешних баз данных или API. Дополнение списка поддерживаемого оборудования будет осуществляться по запросам пользователей «без отрыва от производства», благо, для этого обновление установленной системы не требуется. Постараемся сделать этот процесс гладким, в надежде, что ухищрений бóльших, чем MikroTik, никто из вендоров не придумает. Также в планах значатся изменения в архитектуре демона, чтобы обеспечить плагинами и его.

    Где ссылки?


    Поделиться публикацией
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 45
    • 0
      даже с отключенным адблоком (Chrome) сайт выдает
      YOU ARE NOT ALLOWED TO REMOVE Template's FOOTER BRANDING LOGO-BACKLINK. If you want to remove it, please purchase a BRANDING REMOVAL FEATURE. Please Visit — www.joomforest.com/pricing
      • 0
        Бэклинки на месте, однако, если адблок вырезает чуть больше (со своими uBlock Origin и ADBP этого алерта ни разу не поймал), чем шаблон считает приемлемым, то alert() && (unescape("%62%6f%64%79")).remove().

        Вырезал «вирусные» вставки. Было желание со зла вырезать и бэклинки, но не буду уподобляться. Спасибо за сообщение.
      • +2
        Мы убеждены, что каждая система должна делать своё дело. Поэтому, если в названии софта есть слово 'backup', то оно в первую очередь должно заниматься, собственно, самим бэкапом. Всё остальное — строго опционально

        … например — восстановление (restore)? ;)
        • +1
          Восстановление сетевой конфигурации на устройстве зачастую сопряжено с дополнительными телодвижениями. В худшем случае — беготня с консольным кабелем. В лучшем случае — conf t и изменение настроек на отдельно взятом интерфейсе, ACL'ке и т.п.
          На секунду представил себе автоматическое восстановление конфигурации на агрегирующем коммутаторе с несколькими сотнями разных VLAN'ов, субинтерфейсов и ACL, и мне стало холодно. В качестве идеи restore есть, но приоритетнее на данный момент поддержка бóльшего количества устройств и вендоров.
        • 0
          А демки в онлайне нет?
          • 0
            К сожалению, пока нет. Есть желание поработать только с интерфейсом? Без подключения к реальным железкам?
            Есть задумка сделать демку полнофункциональной, а значит, нужно разместить где-то десяток единиц «живого железа» со сценариями регулярного отката конфигураций. Или очень сильно извратиться с эмуляторами.
            • 0
              gns3 не?
              • 0
                Да, именно пощупать web. У нас используется Rancid, web-интерфейс у него мягко говоря — ни какой. Хотя в веб-е им редко кто пользуется (разве, что если хочется найти чей косяк по диффам), в основном grep-аем из консоли.
            • 0
              Скажите, пожалуйста, какие способы резервного копирования конфигурации сетевого оборудования поддерживаются? Telnet, SSH, TCL/expect?
              • 0
                На данный момент — Telnet и SSH. Также система любит опрашивать устройства по SNMP в процессе обнаружения (discovery), но это больше для получения и обновления информации о железке. В интерфейсе последовательность выглядит примерно так:



                Теоретически, есть техническая возможность настроить выгрузку на TFTP по snmpset, но это для мсье, которые знают толк в извращениях.
                • 0
                  настроить выгрузку на TFTP по snmpset, но это для мсье, которые знают толк в извращениях

                  Чем плоха эта схема, если она реализована и рекомендуема самим производителем?

                  Я, например, наоборот считаю схему с использованием CLI и команд типа show run/show config/display run, при наличии схемы с snmp upload/download, «костылями». И есть причины:
                  — необходимость отключения скролла (или иммитировать скриптом «бездонную консоль»);
                  — возможность попадания «мусора» (сообщения в консоль, артефакты);
                  — на особо старых/нагруженных железках «выплёвывание» команды чревато поломкой CLI (приходится вводить команды посимвольно с паузой).
                  • 0
                    Рискну предположить, что vlan.dat через CLI вообще не получить никак.
                    • 0
                      Чем плоха эта схема, если она реализована и рекомендуема самим производителем?
                      Субъективное мнение и детские травмы :) У нас почти весь менеджмент и мониторинг на SNMP написан (внутренний софт, к статье не имеет никакого отношения). Если по существу, то:

                      1. Невозможностью проконтролировать процесс выполнения. По SNMP я могу попросить коммутатор выгрузить свой конфиг на TFTP. Проконтролировать прогресс на доброй половине устройств я не могу никак, кроме как удостоверившись в том, что файл появился на TFTP. Те же производители на фазе Verification говорят "check your tftp server logs".
                      2. Многие вендоры с SNMP обращаются крайне вольно. D-Link, например, иногда любит менять OID'ы и поведение не только между hardware ревизиями, но и между версиями софта. Написать, что мы поддерживаем связку «вендор-модель» и потом поцеловать новую прошивку свитча я бы не хотел. CLI даёт немного более стабильный результат.
                      3. Проблемы с производительностью у старых железок. Save config по SNMP, например, устаревший DES-3550 повергает в шок и трепет, подвешивая менеджмент на добрых 30 секунд.

                      Но технически в системе есть возможность отправлять произвольные команды по любому из трёх протоколов. Только сам администратор, основываясь на знании своего парка оборудования, может решить, как для него лучше взаимодействовать со своим железом.
                • 0
                  Да, меня то же интересует вопрос — как работает с коммутаторами? Поддерживаются ли SAN?
                  • 0
                    Протоколы для общения: SNMP, SSH, Telnet. Поддержка железа «из коробки» — встроили всё, что было в наличии и на что удалось наложить лапы. Расширяется посредством шаблонов, которые можно писать самому, или скачивать из нашего репозитория. Со своей стороны в него будем добавлять вендоров по мере расширения.

                    Из SAN'ов я могу получить доступ к Synology RS815+. Логин по SSH, затем отправляю `cat /etc/synoinfo.conf` и сохраняю вывод. Но вряд ли это будет полным конфигом.
                    • 0
                      Я имел ввиду SAN-коммутаторы
                      • 0
                        Из коробки — нет. Но если есть возможность зайти по SSH и отправлять команды, то можно снять running-config/current-config. Потребуется создать шаблон (как на скрине в комментариях выше), таким образом обеспечив поддержку устройства.
                        Мы со своей стороны, будем рассматривать и выполнять заявки на создание таких шаблонов по мере сил и возможностей. Особенно, если они будут подкреплены доступом к железу, чтобы можно было протестировать изменения.
                        Если у вендора свой взгляд на процесс аутентификации, не исключено, что потребуются доработки и с нашей стороны. Один такой вендор сейчас в работе, благодаря ему появятся возможности делать press any key и манипулировать expect'ом.
                  • 0
                    А не пробовали использовать шаблоны от того же Oxidized или RANCID?
                    • 0
                      Разные архитектуры и концепции реализации — один к одному их не взять. Разве что за идеями можно в гости приходить и туда, и в иные open source решения типа rConfig.
                    • 0
                      Juniper какие нить тестировали? Как раз ищу замену самописным скриптам, а кроме тяжеловесов ничего нет.
                      • 0
                        Нет, увы, ни одного в наличии. По SSH должен снимать, но нужно создавать отдельный шаблон для него.
                        • 0
                          Oxidized попробуйте
                          • 0
                            Он умеет на почту дифы слать?
                            • 0
                              Во-первых, он умеет в хуки, так что скрипт можно любой подсунуть. Во-вторых, умеет складывать в гит, так что можно настроить оповещения там.
                        • +1
                          А где можно увидеть полный список поддерживаемого оборудования? Как раз на днях поставил oxidized, но D-link (с cisco-like cli) и RedBack пока не удалось заставить бекапить.
                          • 0
                            Напишу при возможности скрипт, который парсит данные из репозитория (пока можно посмотреть в нём) и выдаёт их в удобоваримом формате.
                            • 0
                              Данный список оборудования только преблезителтий.
                              Это оборудование которое мы смогли проверить. Но реально сBackup может подержевать(необходимы тести) и другие устройста.
                              Поделитесь с нами пожалуйста если вам получилось снять конфиг с устройств которых нету в списке.
                              • 0
                                эээ, а НР нет? :(
                                • 0
                                  Некоторые HP/3Com работают, но более новые ProCurve пока не готовы. Появятся относительно скоро, в 1.1. Нам удалось их получить только недавно, оказалось, что у них просто прелестная выдача в консоль raw данных:
                                  22:45 - Vahmur: PZDC\[24;27H
                                  PZDC\[24;1H
                                  PZDC\[?25h
                                  PZDCE
                                  22:46 - Vahmur: Я прошел первую команду 8))
                                  22:46 - Hesed: PZDC это его эскейп?
                                  22:46 - Vahmur: Да. PZDC\[24;27H это перевод курсора с 24 на 27 позицию.


                                  Бету уже научили с ними работать, т.е. ничего неподъёмного там не оказалось, но регрессионные тесты занимают порядком времени. Вместе с фиксами и фичами с пожеланиями от первых пользователей потихоньку движемся к 1.1.
                            • +1
                              В первую очередь хотел-бы поблагодарить Вас за такой отличный инструмент, да еще и бесплатный! По описанию кажется, что это как раз тот инструмент, которого нам не хватало долгое время :)
                              Есть пожелание, быть может в будущих версиях, реализовать отрисовку L2-карты сети основываясь на информации CDP\LLDP, я понимаю, что это совсем не функционал программы имеющей в своём названии слово «backup», но как ни искал я так и не смог найти ничего, что бы помогло мне решить вышеописанную задачу (всё либо платное, либо работает кое-как)…
                              • +2
                                Я пока собираю отзывы, пожелания и первые шишки. Внесу в список requested features и Ваше пожелание. В приоритете пока IPv6 и compliance validation для конфигураций, и поддержка некоторых популярных железок типа HP свитчей.

                                Функционал плагинов заложен, я не вижу технических препятствий создать запланированную задачу по сбору данных, а отрисовку возложить на плагин. По аналогии с имеющимся плагином STP-маппинга. Карточку в проекте я создал, так что идея не потеряется.
                                • 0
                                  По аналогии с имеющимся плагином STP-маппинга.

                                  Насколько сложно его научить PVSTP понимать? Или он уже?
                                  • 0
                                    В простом варианте уже работает, в Credentials — Read community нужно указывать через @ номер VLAN'а. Но пока есть незакрытый issue, относящийся как раз к PVSTP. Если root меняется, тогда нужно ждать решения этой проблемы. Если root неизменный, то с него снимается обычный STP, а с других начинаются пляски с бубном:


                                    Мы потихоньку собираем запросы для Cookbook, здесь и в запросах на дискорде. Будут видеоинструкции, чтобы было доступнее и нагляднее.
                                • +2
                                  NOC умеет карту L2 рисовать. Но NOC — это боль.
                                • +1
                                  На почту крисивенький ежедневный дифф умеет высылать?
                                  Хотелось бы как в соларвиндсе:
                                  image
                                  • +1
                                    Дифф пока не умеет. Но почтовая подсистема заложена. В ней поддерживаются шаблонные переменные, которые можно добавлять в письмо и отсылать его по расписанию.


                                    Сделаю заметку в карте идей и пожеланий относительно диффа. Чтобы лучше понять, что требуется, если можно, опишите вкратце — это дифф по конкретной ноде? Или вообще все изменения по всем нодам? Дифф высылается между двумя последними версиями конфигов или можно какой-то расширенный функционал и выборку на него сгрузить?
                                    • +1
                                      В моем кейсе соларвиндсом бекапятся конфиги со всех устройств каждую ночь.
                                      По завершению высылается два письма:
                                      1. Общее письмо со статусом успешних снятий бекапа и каких либо ошибок.
                                      2. Дифф в два столбца (before, after) с подсветкой как в скрине выше (если в новом бекапе строчка добавилась, то у неё подсветка зеленая в старой красная, если удалилась, то красная в новом и зеленая в старом, если изменилась то желтая в обоих) между предыдущим и новым конфигом по всем устройства где что-то изменилось, если изменений нет, то и письма не будет вообще.

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

                                      ps: если нужно более подборбно можно в личке пообщаться или скайпе.
                                      psps: если добавите эту фичу возьмусь потестить с джунами продукт
                                      • 0

                                        "вкусная" хотелка. Плюсую ;)

                                        • +1
                                          Добавил в roadmap, как feature request с отсылкой на Ваш хабрапрофиль. Как появится в релизе, сообщу в личке.
                                    • 0
                                      Хотелось бы поблагодарить за проделанный труд. При первом приближении очень понравился. По хотелкам, мне кажется не плохо было бы шифровать пароли доступа к железкам, что бы после ввода их нельзя было посмотреть.
                                      И еще, при добавлении нового задания, допустим sh vlan из интерфейса нельзя увидеть сохраненный вывод. В итоге либо все команды запихивать в одно задание, либо сохранять в файловой системе и смотреть там руками.
                                      • 0
                                        И еще, при добавлении нового задания, допустим sh vlan из интерфейса нельзя увидеть сохраненный вывод.
                                        Предусмотрено извращение изощрение с кастомными таблицами (таблица должна иметь префикс `out_` и состоять из обязательных и произвольных полей) и обработчиками, которые пишут в эту таблицу в нужные поля (интерфейс по возможности подсказывает варианты). Просматривать полученные данные можно в разделе «Таблицы вывода задач»:


                                        Документация пока этот процесс не освещает, была идея сделать этот функционал более простым в использовании.
                                        • +1
                                          Хотелось дополнить что таблица out_ и пола таблицы создаются при создание новой задачи, вы увидите всплывающие окно которое предложит вам создать новую таблицу
                                          • 0
                                            Спасибо за подсказку. С кастомными таблицами разобрался, а вот таблицу вывода задач сам не приметил. Еще раз спасибо.
                                        • 0
                                          Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 14625596 bytes) in /var/www/clients/client22/web74/web/libraries/src/Cache/Storage/FileStorage.php on line 195

                                          хабраэффект?
                                          • +1
                                            Джумлаэффект (вроде пофиксил). Продолжение вчерашних диалогов в коллективе:
                                            — Оп-па, НЛО перенесло нас из «Я пиарюсь» в «Системное администрирование»
                                            — О нет, сайт теперь умрёт…

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

                                          Самое читаемое