Ещё один вариант бэкапа

Здесь выкладываем скрипты
podarok66
Модератор
Сообщения: 3631
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Ещё один вариант бэкапа

Сообщение podarok66 » 08 янв 2017, 18:47

Изначально писал для ЖЖ, потом решил скинуть сюда, прошу критики и помощи в корректировании. Обещаю не кусаться :hi_hi_hi:
У меня появилась нужда в бэкапировании целой сети Микротиков. Из которых лишь один имел "белый" адрес. Зато вся эта куча устройств была между собой связана в единую сеть. Сначала я собирал бэкапы на одном устройстве. Но мне показалось это слишком расточительным расходом свободной памяти головной железки и я решил перенести хранилище на 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*

Возможно кому-то придется по душе использование Микротиковской фишки и краткость скрипта, а минутная нагрузка на маршрутизатор неактуальна. Удачи всем..
Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Barvinok
Сообщения: 150
Зарегистрирован: 28 фев 2012, 23:21

Re: Ещё один вариант бэкапа

Сообщение Barvinok » 08 сен 2017, 01:05

У меня была похожая задача: бэкап с нескольких десятков устройств, объединённых в общую виртуальную сеть (VPN).
Дело в том, что мне удобно хранить архивы в облаке, а все облака работают по WebDAV. Микротик в свою очередь WebDAV не умеет. Вот я и выкрутился посредством FTP:

Код: Выделить всё

:local user mikrotik
:local pass 123
:local address 192.168.200.170

:foreach i in=[/file find type="backup"] do={/file remove $i}
:foreach i in=[/file find type="script"] do={/file remove $i}

/system backup save
:local backupfile [/file get [find where type="backup"] name]
:local scriptfile [:pick "$backupfile" 0 24]

/tool fetch address=$address src-path=$backupfile \
user=$user password=$pass mode=ftp upload=yes dst-path=$backupfile

/export file=$scriptfile
/tool fetch address=$address src-path=($scriptfile.".rsc") \
user=$user password=$pass mode=ftp upload=yes dst-path=($scriptfile.".rsc")


Надо ли говорить, что папка FTP синхронизируется с YandexDisk?
Barvinok
Сообщения: 150
Зарегистрирован: 28 фев 2012, 23:21

Re: Ещё один вариант бэкапа

Сообщение Barvinok » 08 сен 2017, 14:51

На некоторых маршрутизаторах бэкапы делаются не в корень, а в папку flash/*.backup
А экспорт скрипта - в корень. Почему так - понять нельзя, но код будет такой:

Код: Выделить всё

:local user mikrotik
:local pass 123
:local address 192.168.200.70

:foreach i in=[/file find type="backup"] do={/file remove $i}
:foreach i in=[/file find type="script"] do={/file remove $i}

/system backup save
:local backupfile [/file get [find where type="backup"] name]
:local scriptfile [:pick "$backupfile" 6 26]

/tool fetch address=$address src-path=$backupfile \
user=$user password=$pass mode=ftp upload=yes dst-path=[:pick $backupfile 6 33]

/export file=$scriptfile
/tool fetch address=$address src-path=("$scriptfile".".rsc") \
user=$user password=$pass mode=ftp upload=yes dst-path=("$scriptfile".".rsc")
algerka
Сообщения: 180
Зарегистрирован: 14 дек 2011, 12:31

Re: Ещё один вариант бэкапа

Сообщение algerka » 11 сен 2017, 11:50

Посчитал что бэкап будет сильно "насиловать" диск микротика, в результате делаю обычный export на экран, и его запоминаем в subversion. плюс текстового конфига в возможности его сравнения с предыдущим на предмет изменений, второй плюс в поддержки оборудования других производителей. минус это проблемы с экспортом паролей пользователей, для этого использую радиус.
Александр

Вернуться в «Готовые скрипты Mikrotik»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость