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



Мы создали приложение 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. Дополнение списка поддерживаемого оборудования будет осуществляться по запросам пользователей «без отрыва от производства», благо, для этого обновление установленной системы не требуется. Постараемся сделать этот процесс гладким, в надежде, что ухищрений бoльших, чем MikroTik, никто из вендоров не придумает. Также в планах значатся изменения в архитектуре демона, чтобы обеспечить плагинами и его.

Где ссылки?


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


  1. Igorjan
    22.01.2018 13:17

    даже с отключенным адблоком (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


    1. Hesed Автор
      22.01.2018 13:54

      Бэклинки на месте, однако, если адблок вырезает чуть больше (со своими uBlock Origin и ADBP этого алерта ни разу не поймал), чем шаблон считает приемлемым, то alert() && (unescape("%62%6f%64%79")).remove().

      Вырезал «вирусные» вставки. Было желание со зла вырезать и бэклинки, но не буду уподобляться. Спасибо за сообщение.


  1. romxx
    22.01.2018 13:26

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

    … например — восстановление (restore)? ;)


    1. Hesed Автор
      22.01.2018 14:07

      Восстановление сетевой конфигурации на устройстве зачастую сопряжено с дополнительными телодвижениями. В худшем случае — беготня с консольным кабелем. В лучшем случае — conf t и изменение настроек на отдельно взятом интерфейсе, ACL'ке и т.п.
      На секунду представил себе автоматическое восстановление конфигурации на агрегирующем коммутаторе с несколькими сотнями разных VLAN'ов, субинтерфейсов и ACL, и мне стало холодно. В качестве идеи restore есть, но приоритетнее на данный момент поддержка бoльшего количества устройств и вендоров.


  1. 4lex
    22.01.2018 14:39

    А демки в онлайне нет?


    1. Hesed Автор
      22.01.2018 14:47

      К сожалению, пока нет. Есть желание поработать только с интерфейсом? Без подключения к реальным железкам?
      Есть задумка сделать демку полнофункциональной, а значит, нужно разместить где-то десяток единиц «живого железа» со сценариями регулярного отката конфигураций. Или очень сильно извратиться с эмуляторами.


      1. mickvav
        22.01.2018 19:03

        gns3 не?


      1. 4lex
        22.01.2018 21:34

        Да, именно пощупать web. У нас используется Rancid, web-интерфейс у него мягко говоря — ни какой. Хотя в веб-е им редко кто пользуется (разве, что если хочется найти чей косяк по диффам), в основном grep-аем из консоли.


  1. sohmstyle
    22.01.2018 14:48

    Скажите, пожалуйста, какие способы резервного копирования конфигурации сетевого оборудования поддерживаются? Telnet, SSH, TCL/expect?


    1. Hesed Автор
      22.01.2018 14:59

      На данный момент — Telnet и SSH. Также система любит опрашивать устройства по SNMP в процессе обнаружения (discovery), но это больше для получения и обновления информации о железке. В интерфейсе последовательность выглядит примерно так:



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


      1. Gansterito
        22.01.2018 15:51

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

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

        Я, например, наоборот считаю схему с использованием CLI и команд типа show run/show config/display run, при наличии схемы с snmp upload/download, «костылями». И есть причины:
        — необходимость отключения скролла (или иммитировать скриптом «бездонную консоль»);
        — возможность попадания «мусора» (сообщения в консоль, артефакты);
        — на особо старых/нагруженных железках «выплёвывание» команды чревато поломкой CLI (приходится вводить команды посимвольно с паузой).


        1. throttle
          22.01.2018 15:58

          Рискну предположить, что vlan.dat через CLI вообще не получить никак.


        1. Hesed Автор
          22.01.2018 16:12

          Чем плоха эта схема, если она реализована и рекомендуема самим производителем?
          Субъективное мнение и детские травмы :) У нас почти весь менеджмент и мониторинг на 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 секунд.

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


  1. KorP
    22.01.2018 14:54

    Да, меня то же интересует вопрос — как работает с коммутаторами? Поддерживаются ли SAN?


    1. Hesed Автор
      22.01.2018 15:12

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

      Из SAN'ов я могу получить доступ к Synology RS815+. Логин по SSH, затем отправляю `cat /etc/synoinfo.conf` и сохраняю вывод. Но вряд ли это будет полным конфигом.


      1. KorP
        22.01.2018 15:14

        Я имел ввиду SAN-коммутаторы


        1. Hesed Автор
          22.01.2018 15:30

          Из коробки — нет. Но если есть возможность зайти по SSH и отправлять команды, то можно снять running-config/current-config. Потребуется создать шаблон (как на скрине в комментариях выше), таким образом обеспечив поддержку устройства.
          Мы со своей стороны, будем рассматривать и выполнять заявки на создание таких шаблонов по мере сил и возможностей. Особенно, если они будут подкреплены доступом к железу, чтобы можно было протестировать изменения.
          Если у вендора свой взгляд на процесс аутентификации, не исключено, что потребуются доработки и с нашей стороны. Один такой вендор сейчас в работе, благодаря ему появятся возможности делать press any key и манипулировать expect'ом.


  1. Night_Snake
    22.01.2018 16:51

    А не пробовали использовать шаблоны от того же Oxidized или RANCID?


    1. Hesed Автор
      22.01.2018 17:20

      Разные архитектуры и концепции реализации — один к одному их не взять. Разве что за идеями можно в гости приходить и туда, и в иные open source решения типа rConfig.


  1. brainfair
    22.01.2018 17:40

    Juniper какие нить тестировали? Как раз ищу замену самописным скриптам, а кроме тяжеловесов ничего нет.


    1. Hesed Автор
      22.01.2018 17:58

      Нет, увы, ни одного в наличии. По SSH должен снимать, но нужно создавать отдельный шаблон для него.


    1. Night_Snake
      24.01.2018 18:58

      Oxidized попробуйте


      1. brainfair
        26.01.2018 10:46

        Он умеет на почту дифы слать?


        1. Night_Snake
          26.01.2018 11:24

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


  1. xaker1
    22.01.2018 18:47

    А где можно увидеть полный список поддерживаемого оборудования? Как раз на днях поставил oxidized, но D-link (с cisco-like cli) и RedBack пока не удалось заставить бекапить.


    1. Hesed Автор
      22.01.2018 18:55

      Напишу при возможности скрипт, который парсит данные из репозитория (пока можно посмотреть в нём) и выдаёт их в удобоваримом формате.


      1. launcherx
        23.01.2018 22:07

        Данный список оборудования только преблезителтий.
        Это оборудование которое мы смогли проверить. Но реально сBackup может подержевать(необходимы тести) и другие устройста.
        Поделитесь с нами пожалуйста если вам получилось снять конфиг с устройств которых нету в списке.


  1. 4mz
    22.01.2018 20:18

    В первую очередь хотел-бы поблагодарить Вас за такой отличный инструмент, да еще и бесплатный! По описанию кажется, что это как раз тот инструмент, которого нам не хватало долгое время :)
    Есть пожелание, быть может в будущих версиях, реализовать отрисовку L2-карты сети основываясь на информации CDP\LLDP, я понимаю, что это совсем не функционал программы имеющей в своём названии слово «backup», но как ни искал я так и не смог найти ничего, что бы помогло мне решить вышеописанную задачу (всё либо платное, либо работает кое-как)…


    1. Hesed Автор
      22.01.2018 20:45

      Я пока собираю отзывы, пожелания и первые шишки. Внесу в список requested features и Ваше пожелание. В приоритете пока IPv6 и compliance validation для конфигураций, и поддержка некоторых популярных железок типа HP свитчей.

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


      1. throttle
        23.01.2018 14:32

        По аналогии с имеющимся плагином STP-маппинга.

        Насколько сложно его научить PVSTP понимать? Или он уже?


        1. Hesed Автор
          23.01.2018 15:06

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


          Мы потихоньку собираем запросы для Cookbook, здесь и в запросах на дискорде. Будут видеоинструкции, чтобы было доступнее и нагляднее.


    1. throttle
      23.01.2018 14:27
      +2

      NOC умеет карту L2 рисовать. Но NOC — это боль.


  1. brainfair
    23.01.2018 04:32

    На почту крисивенький ежедневный дифф умеет высылать?
    Хотелось бы как в соларвиндсе:
    image


    1. Hesed Автор
      23.01.2018 10:08

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


      Сделаю заметку в карте идей и пожеланий относительно диффа. Чтобы лучше понять, что требуется, если можно, опишите вкратце — это дифф по конкретной ноде? Или вообще все изменения по всем нодам? Дифф высылается между двумя последними версиями конфигов или можно какой-то расширенный функционал и выборку на него сгрузить?


      1. brainfair
        23.01.2018 13:09
        +1

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

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

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


        1. Fanta
          23.01.2018 13:11

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


        1. Hesed Автор
          23.01.2018 13:22
          +1

          Добавил в roadmap, как feature request с отсылкой на Ваш хабрапрофиль. Как появится в релизе, сообщу в личке.


  1. F1RST
    23.01.2018 14:46

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


    1. Hesed Автор
      23.01.2018 19:00

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


      Документация пока этот процесс не освещает, была идея сделать этот функционал более простым в использовании.


      1. launcherx
        23.01.2018 21:54
        +1

        Хотелось дополнить что таблица out_ и пола таблицы создаются при создание новой задачи, вы увидите всплывающие окно которое предложит вам создать новую таблицу


      1. F1RST
        24.01.2018 05:43

        Спасибо за подсказку. С кастомными таблицами разобрался, а вот таблицу вывода задач сам не приметил. Еще раз спасибо.


  1. EminH
    23.01.2018 15:05

    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. Hesed Автор
      23.01.2018 17:18
      +1

      Джумлаэффект (вроде пофиксил). Продолжение вчерашних диалогов в коллективе:

      — Оп-па, НЛО перенесло нас из «Я пиарюсь» в «Системное администрирование»
      — О нет, сайт теперь умрёт…