Расскажу о массовом резервном копировании RouterOS. Будем использоваться oxidized.
В интернете много способов можно найти. Начиная от скриптов, которые отправляют файл резервной копии на почту заканчивая какими-то нереальными программами, которые используются, видимо провайдерами.
Но мне ничего не нравилось и я отправился на поиски своего решения, которое бы меня устроило. И так вот задача:
- Организовать автоматическое резервное копирование RouterOS в количество 70+ штук;
- Желательно чтобы была версионность. Чтобы посмотреть какие изменения были сделаны (что-то типа Git);
Все наши Mikrotik расположены кто где. Разные провайдеры, разные задачи, но суть одна, что конфигурация этих устройств для нас критичны и в случае выхода из строя их очень долго и муторно восстанавливать.
Содержание
Немного мат.части
И вот оно чудо, которое я так искал oxidized! Данное решение позволяет копировать не только Mikrotik, но еще и огромный список всякого разного. Ознакомиться со списком можно вот здесь: https://github.com/ytti/oxidized/blob/master/docs/Supported-OS-Types.md
Рассказываю, как у меня это устроенно.
Небольшая схема для визуализации картины.
Есть VPS в дата-центре с серой сетью. На этой ВМ установлен Docker и два контейнера Nginx Proxy Manager и Oxidized.
NGN — контейнер будет выполнять роль обычного proxy для доступа к веб-странице через интернет с ALC, потому что штатной системы авторизации у Oxidized я не нашел.
Oxidized — контейнер, который будет осуществлять резервное копирование наших Mikrotik в локальный Git.
Кстати, все управление Docker я делаю через Portainer (если не знакомы с этой панель управления — посмотрите этот видос), поэтому запись будет заточена под это. Вы можете самостоятельно все запустить без него, но я слабак и не люблю CLI. :)
И это не готовая инструкция, которая позволит Вам копипастом развернуть Oxidized, но тут есть все необходимое для минимальной настройки и запуска этой системы.
Установка Oxidized
Запуск контейнера в Docker
Я для себя решил Oxidized засунуть в Docker Compose. Прикладываю свой Docker Compose файлик для запуска.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
version: "3" services: oxidized: restart: always #Делаем перезапуск контейнера всегда image: oxidized/oxidized:latest #Ставим последнюю версию Oxidized ports: - 8888:8888/tcp #Указываем порт (тут у нас будет web-интерфейс и доступ к REST API) environment: CONFIG_RELOAD_INTERVAL: 600 #Указываем период авто обновления конфигурации volumes: - config:/home/oxidized/.config/oxidized/ #Указываем том для сохранения данных volumes: config: #Подключаем наш том |
После успешного запуска не спишите пытаться зайти в веб-интерфейс. Он пока что не работает.
И не будет работать до тех пор, пока мы не добавим в него хотя бы одно устройств и не внесем некоторые изменения в конфигурацию.
Редактирование конфигурации Oxidized
Для редактирования конфигурации необходимо перейти в папку, где он лежит. Выполняем команду:
1 |
cd /home/oxidized/.config/oxidized/ |
Открываем файл config для редактирования:
1 |
vim config |
И приводим его примерно к такому виду. Делайте под себя. Я лишь приведу свой пример с комментариями. Если комментария нет — значит я это не использовал и не могу пояснить за строчку. Почитайте документацию. :)
Сохраняем файл и выходим из режима редактирования. Игра «Выйти из Vim» объявляется открытой! :)
Создание базы данных с устройствами
Теперь нам необходимо создать файлик «базу данных» с нашими устройствами. В секции source, в разделе file мы указали его название и путь.
Создаем файл router.db по пути /home/oxidized/.config/oxidized/
1 |
vim router.db |
Создаем первую нашу строчку.
Давайте это будет Mikrotik в офисе, в той же сети, что и сам Oxidized, с ip-адересом 192.168.88.1, отдельный пользователь oxidized с паролем P@$$w0Rd.
Это пока что не боевая запись, а тестовая, чтобы запустить Oxidized. Чуть дальше по этой записи я покажу подготовить и бекапить Mikrotik’и за пределами локальной сети.
И так, маску нашей базы мы задали в секции source, в разделе map, в качестве разделителя у нас выступает символ «:».
Пара замечаний:
- Регистр в логине важен, Oxidized != oxidized
- Исключите из паролей символ «:», он может считаться разделителем и запись будет не работать
Получается, что маска нашей записи в «базе данных» должна быть вот такая:
name:model:ip:port:username:password
1 |
Mirkotik_office:routeros:192.168.88.1:22:oxidized:P@$$w0Rd |
Теперь нам осталось дождаться пока конфигурация обновиться и нода добавиться в Oxidized, либо перезапустить контейнер с Oxidized.
Подготовка Mikrotik для резервного копирования
Я не уверен, что есть смысл описывать процесс подготовки к резервному копированию. Поскольку, если Вы дошли до Oxidized, то Вам хватит и просто текстового описания в виде списка действий.
- Проверить, что в сервисах запущен SSH;
- Открыть порт 22\tcp наружу для доступа из интернета по белому списку;
- Создать отдельного пользователя с правами на чтение;
- Закинуть все в Oxidized;
Траблшут
Один из микротиков не хотел копироваться. В Oxidized внутри статусы ноды:
1 2 3 4 5 6 7 8 9 10 11 12 |
{:name=>"Client", :full_name=>"Client", :ip=>"89.188.xxx.xxx", :group=>nil, :model=>"RouterOS", :last=> {:start=>2024-04-16 05:21:17.732372149 UTC, :end=>2024-04-16 05:21:17.9386341 UTC, :status=>:no_connection, :time=>0.206261951}, :vars=>nil, :mtime=>"unknown"} |
А в логах самого устройства такое:
Ошибка «Corrupt host’s key, regenerating it! Reboot required!»
Согласно источнику из интернета: для решения проблемы с подключением к SSH после обновления прошивки до 6.42.1 можно использовать команду
1 |
/ip ssh regenerate-host-key |
На ввести команду, нажать Y и подождать. Выглядит, словно ничего не происходит.