Итак сегодня речь пойдет об инструменте в задачу которого входит выполнение централизованного резервного копирования конфигурационных файлов (те которые выполняются с расширением rsc) оборудования Mikrotik. Плюс инструмент умеет отображать разницу в изменениях, а делает он это через складирование изменений посредством системы контроля версий GIT. Я если честно давно искал такой инструмент и вот я воплотил свою задумку разобрав от и до все шаги по разворачиванию сервиса oxidized в систему Ubuntu 18.04 Server amd64. Узнал я о нем это просматривая опубликованные презентации посвященные Mikrotik, к примеру если через поисковую систему Google ввести «Автоматизируем бэкап – MUM — MikroTik»

На заметку: От 22.03.2023 теперь есть еще "Обновленная установка Oxidized на Ubuntu 22.04"

Предварительные действия: На всех Mikrotik(ах) для которых Вы хотите осуществлять резервное копирование нужно сделать учетную записи с минимальными правами, к примеру только на чтение:

ekzorchik@srv-bionic:~$ ssh -l admin 172.33.33.22

[admin@MikroTik] > user add name=test password=Aa1234567 group=read

[admin@MikroTik] > quit

Connection to 172.33.33.22 closed.

ekzorchik@srv-bionic:~$

Шаг №1: Настраиваю систему

ekzorchik@srv-bionic:~$ hg clone --insecure https://ekzorchik@172.35.35.8/hg/dproject

ekzorchik@srv-bionic:~$ sudo ./dproject/default

Полученная текущая система с учетом моего скрипта настройки который я применяю в своей локальной сети:

ekzorchik@srv-bionic:~$ uname -a && lsb_release -a

Linux srv-bionic 4.15.0-43-generic #46-Ubuntu SMP Thu Dec 6 14:45:28 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

No LSB modules are available.

Distributor ID: Ubuntu

Description: Ubuntu 18.04.2 LTS

Release: 18.04

Codename: bionic

ekzorchik@srv-bionic:~

Шаг №2: Устанавливаю пакет Oxidized в систему Ubuntu 18.04 Server amd64:

ekzorchik@srv-bionic:~$ sudo apt-get install ruby ruby-dev libsqlite3-dev libssl-dev pkg-config cmake libssh2-1-dev libicu-dev -y

ekzorchik@srv-bionic:~$ gem install oxidized oxidized-script oxidized-web

Fetching: asetus-0.3.0.gem (100%)

ERROR: While executing gem ... (Gem::FilePermissionError)

You don't have write permissions for the /var/lib/gems/2.5.0 directory.

ekzorchik@srv-bionic:~$ sudo gem install oxidized oxidized-script oxidized-web

Done installing documentation for charlock_holmes, rack, tilt, rack-protection, sinatra, emk-sinatra-url-for, temple, haml, htmlentities, puma, rb-fsevent, ffi, rb-inotify, sass-listen, sass, backports, rack-test, multi_json, sinatra-contrib, oxidized-web after 675 seconds

22 gems installed

ekzorchik@srv-bionic:~$

Шаг №3: Cоздаю пользователя oxidized, с правами которого будет запускаться система бэкапа:

ekzorchik@srv-bionic:~$ sudo useradd -m -p 712mbddr@ -s /bin/bash oxidized

На время даю права повышения привилегий, в конце заметки заберу.

ekzorchik@srv-bionic:~$ sudo usermod -aG sudo oxidized

Шаг №4: Создаю структуру запуска приложения oxidized

ekzorchik@srv-bionic:~$ sudo su - oxidized

oxidized@srv-bionic:~$ oxidized -v

0.26.1

oxidized@srv-bionic:~$

oxidized@srv-bionic:~$ whereis oxidized

oxidized: /usr/local/bin/oxidized

oxidized@srv-bionic:~$ oxidized

edit ~/.config/oxidized/config

oxidized@srv-bionic:~$ mkdir ~/.config/oxidized/crashes

oxidized@srv-bionic:~$ mkdir ~/.config/oxidized/mikrotik/

oxidized@srv-bionic:~$ sudo find / -name oxidized

/home/oxidized

/home/oxidized/.config/oxidized

/run/sudo/ts/oxidized

/usr/local/bin/oxidized

/var/lib/gems/2.5.0/gems/oxidized-web-0.13.1/lib/oxidized

/var/lib/gems/2.5.0/gems/oxidized-0.26.1/lib/oxidized

/var/lib/gems/2.5.0/gems/oxidized-0.26.1/bin/oxidized

/var/lib/gems/2.5.0/gems/oxidized-script-0.6.0/lib/oxidized

/var/lib/gems/2.5.0/doc/oxidized-web-0.13.1/ri/lib/oxidized

oxidized@srv-bionic:~$

Шаг №5: Преднастраиваем GIT для устройств Mikrotik бекапы которых будут хранится в репозитарии:

oxidized@srv-bionic:~$ sudo apt-get install git -y

oxidized@srv-bionic:~$ git config --global user.email "oxidized@ekzorchik.ru"

oxidized@srv-bionic:~$ git config --global user.name "oxidized"

oxidized@srv-bionic:~/.config/oxidized$ git init oxidized.git

Initialized empty Git repository in /home/oxidized/.config/oxidized/oxidized.git/.git/

oxidized@srv-bionic:~/.config/oxidized$ git init devices.git

Initialized empty Git repository in /home/oxidized/.config/oxidized/devices.git/.git/

Шаг №6: Настраиваем конфигурационный файл

oxidized@srv-bionic:~$ nano ~/.config/oxidized/config
---

model: routeros

resolve_dns: true

#Как часто делать бекапы

interval: 3600

use_syslog: false

debug: false

threads: 30

timeout: 20

retries: 3

prompt: !ruby/regexp /^([\w.@-]+[#>]\s?)$/

rest: 0.0.0.0:8888

next_adds_job: false

vars: {}

groups: {}

models: {}

pid: "/home/oxidized/.config/oxidized/pid"

log: "/home/oxidized/.config/oxidized/log"

crash:

directory: "/home/oxidized/.config/oxidized/crashes"

hostnames: false

stats:

history_size: 10

input:

#Тип подключения к устройству

default: ssh

#Расширенное логирование отключено

debug: false

ssh:

secure: false

map:

verify_host_key: never

utf8_encoded: true

#где хранится конфигурации GIT

output:

default: git

git:

user: oxidized

email: oxidized@ekzorchik.ru

repo: "/home/oxidized/.config/oxidized/oxidized.git"

git:

user: oxidized

email: oxidized@ekzorchik.ru

repo: "/home/oxidized/.config/oxidized/devices/devices.git"

#Откуда берется информация об устройства которые бекапятся

source:

default: csv

csv:

file: "/home/oxidized/.config/oxidized/mikrotik/router.db"

delimiter: !ruby/regexp /:/

#Структура строки в router.db: name:model:ip:port:username:password

map:

name: 0

model: 1

ip: 2

port: 3

username: 4

password: 5

model_map:

cisco: ios

juniper: junos

mikrotik: routeros

На заметку: Если не настроена авторизация на Mikrotik через публичный ключ, т. е. Вход на Mikrotik с одним лишь указанием логина, то в конфигурационный файл oxidized следует добавить параметр: verify_host_key: never

Шаг №7: Копируем публичный sshключ на Mikrotik:

oxidized@srv-bionic:~$ ssh-keygen

Your identification has been saved in /home/oxidized/.ssh/id_rsa.

Your public key has been saved in /home/oxidized/.ssh/id_rsa.pub.

oxidized@srv-bionic:~$ cp ~/.ssh/id_rsa.pub idrsa

oxidized@srv-bionic:~$ ftp 172.33.33.22

Connected to 172.33.33.22.

220 MikroTik FTP server (MikroTik 6.42.5) ready

Name (172.33.33.22:ekzorchik): admin

ftp> put idrsa

ftp> quit

oxidized@srv-bionic:~$

oxidized@srv-bionic:~$ ssh admin@172.33.33.22

[admin@MikroTik] > user ssh-keys import public-key-file=idrsa user=test

[admin@MikroTik] > quit

Connection to 172.33.33.22 closed.

oxidized@srv-bionic:~$

oxidized@srv-bionic:~$ ssh test@172.33.33.22 — подключение проходит без каких либо запросов на ввод пароля.

Шаг №8: Теперь создаю файл подключения к оборудованию Mikrotik:

oxidized@srv-bionic:~$ nano ~/.config/oxidized/mikrotik/router.db

mikrotik:routeros:172.33.33.22:22:test:Aa1234567

Шаг №9: Проверяю запуск и соответственно на предмет каких-либо ошибок препятствующих запуску:

oxidized@srv-bionic:~$ oxidized ~/.config/oxidized/config

Puma starting in single mode...

* Version 3.11.4 (ruby 2.5.1-p57), codename: Love Song

* Min threads: 0, max threads: 16

* Environment: development

* Listening on tcp://0.0.0.0:8888

Use Ctrl-C to stop

Проверка запуска oxidizing на Ubuntu 18.04У каждой строчке есть колонка «Actions»

Доступные команды для подключенного Mikrotik в систему

  • Первая иконка: Посмотреть текущий конфигурационный файл
  • Вторая иконка: Посмотреть историю изменений конфигурационного файла
  • Третья иконка: Это запуск процедуры снятия изменения в репозитарий

Шаг №10: См.логи если что-то пошло не так

ekzorchik@srv-bionic:~$ tail -f /home/oxidized/.config/oxidized/log

W, [2019-03-04T11:34:49.491810 #28328] WARN -- : /mikrotik status no_connection, retries exhausted, giving up

I, [2019-03-04T11:36:11.666786 #28380] INFO -- : Oxidized starting, running as pid 28380

I, [2019-03-04T11:36:11.669229 #28380] INFO -- : lib/oxidized/nodes.rb: Loading nodes

I, [2019-03-04T11:36:11.812262 #28380] INFO -- : lib/oxidized/nodes.rb: Loaded 1 nodes

I, [2019-03-04T11:36:14.351899 #28380] INFO -- : Configuration updated for /mikrotik

Шаг №11: Для того, чтобы oxidized стартовал как служба, сделайте следующее:

oxidized@srv-bionic:~$ sudo find / -name oxidized.service

/var/lib/gems/2.5.0/gems/oxidized-0.26.1/extra/oxidized.service

oxidized@srv-bionic:~$ sudo cp /var/lib/gems/2.5.0/gems/oxidized-0.26.1/extra/oxidized.service /lib/systemd/system/

oxidized@srv-bionic:~$ sudo nano /lib/systemd/system/oxidized.service

[Unit]

Description=Oxidized - Network Device Configuration Backup Tool

After=network-online.target multi-user.target

Wants=network-online.target

[Service]

ExecStart=/usr/local/bin/oxidized

User=oxidized

KillSignal=SIGKILL

Environment="OXIDIZED_HOME=/home/oxidized/.config/oxidized/"

[Install]

WantedBy=multi-user.target

oxidized@srv-bionic:~$ sudo systemctl enable oxidized.service

Created symlink /etc/systemd/system/multi-user.target.wants/oxidized.service → /lib/systemd/system/oxidized.service.

oxidized@srv-bionic:~$ sudo systemctl start oxidized

oxidized@srv-bionic:~$ sudo systemctl status oxidized | head -n5

● oxidized.service - Oxidized - Network Device Configuration Backup Tool

Loaded: loaded (/lib/systemd/system/oxidized.service; enabled; vendor preset: enabled)

Active: active (running) since Mon 2019-03-04 12:16:53 MSK; 9s ago

Main PID: 29039 (oxidized)

Tasks: 7 (limit: 2322)

Проверяю, что ожидаются соединения на порт 8888

oxidized@srv-bionic:~$ sudo netstat -tulpn | grep :8888

tcp 0 0 127.0.0.1:8888 0.0.0.0:* LISTEN 29039/puma 3.11.4 (

oxidized@srv-bionic:~$

Шаг №12: По умолчанию у сервиса нет возможности указать авторизацию, а потому в конфиге config изменяю доступ на 172.0.0.1

oxidized@srv-bionic:~$ nano ~/.config/oxidized/config

#rest: 0.0.0.0:8888

rest: 127.0.0.1:8888

oxidized@srv-bionic:~$ sudo apt-get install nginx -y

oxidized@srv-bionic:~$ sudo rm /var/www/html/index.nginx-debian.html

oxidized@srv-bionic:~$ sudo unlink /etc/nginx/sites-available/default

oxidized@srv-bionic:~$ sudo unlink /etc/nginx/sites-enabled/default

Создаю файл связки логина и пароля для аутентификации через Webинтерфейс:

oxidized@srv-bionic:~$ sudo sh -c "echo -n 'ekzorchik:' >> /var/www/html/.htpasswd"

oxidized@srv-bionic:~$ openssl passwd -apr1

Password: 712mbddr@

Verifying - Password: 712mbddr@

$apr1$rwseclUD$ANBsXcpdvR.07mthC2PLO.

oxidized@srv-bionic:~$ sudo sh -c "openssl passwd -apr1 >> /var/www/html/.htpasswd"

Password: 712mbddr@

Verifying - Password: 712mbddr@

oxidized@srv-bionic:~$ cat /var/www/html/.htpasswd

ekzorchik:$apr1$V6ZTHWcF$bdDbxqPJAQAzfdXw7Z9n/0

oxidized@srv-bionic:~$ sudo chown -R www-data:www-data /var/www/html/.htpasswd

oxidized@srv-bionic:~$ sudo nano /etc/nginx/sites-available/oxidized

server {

listen 172.33.33.4:80;

server_name _;

root /usr/share/nginx/html;

include /etc/nginx/default.d/*.conf;

location / {

auth_basic "UserName and Password Please";

auth_basic_user_file /var/www/html/.htpasswd;

proxy_pass http://127.0.0.1:8888/;

}

}

oxidized@srv-bionic:~$ sudo ln -s /etc/nginx/sites-available/oxidized /etc/nginx/sites-enabled/oxidized

oxidized@srv-bionic:~$ sudo nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

oxidized@srv-bionic:~$ sudo systemctl restart nginx && sudo systemctl status nginx | head -n5

● nginx.service - A high performance web server and a reverse proxy server

Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)

Active: active (running) since Mon 2019-03-04 12:19:27 MSK; 34ms ago

Docs: man:nginx(8)

Process: 29084 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS)

oxidized@srv-bionic:~$

Auth Basic авторизация в Oxidizing через NGINXВход успешно выполнен в систему Oxidizing на Ubuntu 18.04 Server

Работает! Итого я для себя разобрал, как использовать инструмент oxidized на Ubuntu 18.04 Server amd64 для создания резервных копий с оборудования Mikrotik и просмотра внесенных изменений через Web-интерфейс с применением системы контроля версий на базе GIT. Жалко что нельзя использовать Mercurial — мне данная система контроля версий ближе, у меня все на ней построено: скрипты, конфигурационные файлы и т. д. А пока на этом у меня всё, с уважением автор блога Олло Александр aka ekzorchik.

От ekzorchik

Всем хорошего дня, меня зовут Александр. Я под ником - ekzorchik, являюсь автором всех написанных, разобранных заметок. Большинство вещей с которыми мне приходиться разбираться, как на работе, так и дома выложены на моем блоге в виде пошаговых инструкции. По сути блог - это шпаргалка онлайн. Каждая новая работа где мне случалось работать вносила новые знания и нюансы работы и соответственно я расписываю как сделать/решить ту или иную задачу. Это очень помогает. Когда сам разбираешь задачу, стараешься ее приподнести в виде структурированной заметки чтобы было все наглядно и просто, то процесс усвоения идет в гору. Также прошу на https://win.ekzorchik.ru https://lin.ekzorchik.ru https://net.ekzorchik.ru https://voip.ekzorchik.ru https;//home.ekzorchik.ru