
У меня появилась нужда в бэкапировании целой сети Микротиков. Из которых лишь один имел "белый" адрес. Зато вся эта куча устройств была между собой связана в единую сеть. Сначала я собирал бэкапы на одном устройстве. Но мне показалось это слишком расточительным расходом свободной памяти головной железки и я решил перенести хранилище на VDS, благо тот имеется и в полном моём распоряжении.
Итак начнем:
Первым шагом должна была быть генерация сертификатов доступа по ssh и настройка самого доступа по этим самым сертификатам. Это мероприятие описано не раз и не пять, повторять чужие мануалы дело неблагодарное. Поэтому я опускаю эту достаточно тривиальную процедуру. У меня это давно применяется на большинстве устройств. Позволю лишь напомнить, что пользователь (ну скажем пусть его логин будет Vasya), под которым настроен доступ по сертификату должен быть отдельный, для доступа по паролю нужно создать другого юзера (например Fedya). И еще, юзер Vasya все равно должен иметь пароль и доступ по ftp (на ftp действие сертификата не распространяется). На всех остальных Микротиках будем иметь соответственно пользователей Vasya1, Vasya2, и т. д. с подобными правами.
Далее идем на VDS. У меня на сервере установлена Debian 8, очень дружелюбная и понятная система. Думаю, люди, у которых вместо нее стоит другой дистрибутив, разберутся в нюансах. В принципе, все везде очень похоже. Итак, напомню, головной Микротик имеет реальный адрес, все остальные объединены с головным в локальную сеть различными способами (это и туннели, и мосты, и просто проводное соединение), но главное, они все имеют адрес в локальной сети головного устройства. Для доступа к ним по ssh надо создать в каталоге .ssh файл config следующего содержания (рассмотрим вариант с двумя локальными устройствами):
Код: Выделить всё
Host Tik1
HostName 192.168.1.33
User Vasya1
ProxyCommand ssh -W %h:%p Vasya@104.224.131.157
Host Tik2
HostName 192.168.1.193
User Vasya2
ProxyCommand ssh -W %h:%p Vasya@104.224.131.157
Теперь разберем. 192.168.1.33 и 192.168.1.193 адреса локальных Микротиков, Vasya1 и Vasya2 это юзеры на этих Микротиках с настроенным входом по ssh с помощью сертификата, 104.224.131.157 - "белый" адрес головного Микротика и Vasya - юзер на нем. Всё это дело сохраняем. Ну вот, теперь по команде ssh Tik1 мы попадаем на Микротик с локальным адресом 192.168.1.33, по команде ssh Tik2 - соответственно 192.168.1.193 . Проверяем, входит. Что нам и требовалось. Теперь на VDS создаем директории:
Код: Выделить всё
mkdir /home/user/scripts
mkdir /home/user/backup
В scripts создаем файл
Код: Выделить всё
nano /home/user/scripts/mik.sh
Содержание файла:
Код: Выделить всё
#!/bin/bash
# Задаем переменную даты
DATE=`/bin/date '+%d.%m.%Y'`
# Идем в директорию хранения бэкапов
cd /home/user/backup
# Воспользовавшись настроенным конфигом, лезем на следующий Микротик в локалке,
# где Tikpass - пароль на головном Микротике и 192.168.1.1 - его локальный адрес
ssh Tik1 '/system backup save dont-encrypt=yes name=Tik1.backup; :delay 10; /tool fetch address=192.168.1.1 src-path=Tik1.backup user=Vasya password=Tikpass port=21 mode=ftp dst-path=Tik1.backup upload=yes; /file remove Tik1.backup; :delay 5; quit'
# Утилитой wget скачиваем бэкап,прибавляя к имени дату
wget -O Tik1-$DATE.backup --user=Vasya --password=Tikpass ftp://104.224.131.157/Tik1.backup
# Воспользовавшись настроенным конфигом, лезем на следующий Микротик в локалке
ssh Tik2 '/system backup save dont-encrypt=yes name=Tik2.backup; :delay 10; /tool fetch address=192.168.1.1 src-path=Tik2.backup user=Vasya password=Tikpass port=21 mode=ftp dst-path=Tik2.backup upload=yes; /file remove Tik2.backup; :delay 5; quit'
# Утилитой wget скачиваем бэкап,прибавляя к имени дату
wget -O Tik2-$DATE.backup --user=Vasya --password=Tikpass ftp://104.224.131.157/Tik2.backup
# Даём команду на создание бэкапа с именем Tik_big.backup и выходим
ssh Vasya@104.224.131.157 '/system backup save dont-encrypt=yes name=Tik_big.backup; :delay 10; quit'
# Утилитой wget скачиваем бэкап,прибавляя к имени дату
wget -O Tik_big-$DATE.backup --user=Vasya --password=Tikpass ftp://104.224.131.157/Tik_big.backup
# Идем на удаленное устройство и удаляем файлы бэкапов оттуда
ssh Vasya@104.224.131.157 '/file remove Tik_big.backup; :delay 5; /file remove Tik1.backup; :delay 5; /file remove Tik2.backup; :delay 5; quit'
# Архивируем полученный результат и подчищаем за собой
tar -cvjpf /home/user/backup/RB-$DATE.tar.bz2 /home/user/backup/Tik_big-* /home/user/backup/Tik2-* /home/user/backup/Tik1-*
rm -rf /home/user/backup/Tik_big-* /home/user/backup/Tik2-* /home/user/backup/Tik1-*
Сохраняем файл Ctrl+o,выходим из редактора Ctrl+x и делаем файл исполняемым
Код: Выделить всё
chmod +x /home/user/scripts/mik.sh
Теперь настроим расписание
Код: Выделить всё
crontab -e
и вставляем в конце строку
Код: Выделить всё
@weekly /home/user/scripts/mik.sh start
Теперь скрипт будет стартовать раз в неделю по воскресеньям. А мы будем иметь в директории backup архивы с еженедельными бэкапами.
Само собой, способ не претендует на лавры рецепта. Но попробовать-то можно. Приемлю любую конструктивную критику и подсказки.
Кстати, пробовал загрузку осуществить с помощью встроенной в RouterOs утилиты, переписав скрипт. Вот только устройство грузится просто на 100% и на минуту выпадает из работы. Решил, что такого счастья нам не надоть. Оставил пока как есть.
Впрочем вот тело скрипта, где 101.221.12.4 - адрес сервера, ftp - юзер с правами работы и в ssh и в ftp, ftppass - пароль юзера ftp
Код: Выделить всё
#!/bin/bash
# Задаем переменную даты
DATE=`/bin/date '+%d.%m.%Y'`
# Идем в директорию хранения бэкапов
cd /home/ftp/backup
# Воспользовавшись настроенным конфигом, лезем на следующий Микротик в локалке
ssh Tik1 '/system backup save dont-encrypt=yes name=Tik1.backup; :delay 10; /tool fetch address=101.221.12.4 src-path=Tik1.backup user=ftp password=ftppass port=21 mode=ftp dst-path=backup/Tik1.backup upload=yes; :delay 20; /file remove Tik1.backup; :delay 5; quit'
# Воспользовавшись настроенным конфигом, лезем на следующий Микротик в локалке
ssh Tik2 '/system backup save dont-encrypt=yes name=Tik2.backup; :delay 10; /tool fetch address=101.221.12.4 src-path=Tik2.backup user=ftp password=ftppass port=21 mode=ftp dst-path=backup/Tik2.backup upload=yes; :delay 20; /file remove Tik2.backup; :delay 5; quit'
# Даём команду на создание бэкапа на головном устройстве
ssh podarok66@104.224.131.157 '/system backup save dont-encrypt=yes name=Tik_big.backup; :delay 20;/tool fetch address=101.221.12.4 src-path=Tik_big.backup user=ftp password=ftppass port=21 mode=ftp dst-path=backup/Tik_big.backup upload=yes; :delay 30; /file remove Tik_big.backup; :delay 5; quit'
# Архивируем полученный результат
tar -cvjpf /home/ftp/backup/RB-$DATE.tar.bz2 /home/ftp/backup/Tik_big* /home/ftp/backup/Tik1* /home/ftp/backup/Tik2*
rm -rf /home/ftp/backup/Tik_big* /home/ftp/backup/Tik1* /home/ftp/backup/Tik2*
Возможно кому-то придется по душе использование Микротиковской фишки и краткость скрипта, а минутная нагрузка на маршрутизатор неактуальна. Удачи всем..