MikroTik backup на ftp
Mikrotik предлагает нам два варианта резервного копирования :выгрузка резервной копии устройства, которую можно восстановить только на аналогичном устройстве, и экспорт настроек в текстовом формате, которые можно импортировать полностью или частично на любое устройство.
Полный бекап содержит в себе все ключи, сертификаты, админские пароли и т.д, поэтому его крайне нежелательно выгружать в незашифрованном виде. Экспортированный текстовый файл критически важных данных не содержит, но в нем открытым текстом содержатся пароли к Wi-Fi, коммутируемым соединениям и т.д. Поэтому при его хранении тоже следует соблюдать определенные меры безопасности.
Исходя из этих соображений мы будем выгружать и хранить оба варианта. Для этих целей мы написали небольшой и достаточно простой скрипт, несмотря на то что подобных скриптов доступно достаточно большое количество, мы постарались сделать его наиболее понятным и универсальным.
#Резервное копирование конфигурации Mikrotik
#Получаем дату в формате дд-мм-гггг
:local tmpdate [/system clock get date];
:local months ("jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec");
:local month [ :pick $tmpdate 0 3 ];
:local mm ([ :find $months $month -1 ] + 1);
:if ($mm < 10) do={ :set mm ("0" . $mm); }
:local date ([:pick $tmpdate 4 6] ."-" . $mm ."-" . [:pick $tmpdate 7 11])
#Задаем переменные и параметры доступа к FTP
:local myname "M2-hAP-ac-lite"
:local fname ($myname."_".$date);
:local bname ($myname."_".$date.".backup");
:local ename ($myname."_".$date.".rsc");
:local ftpuser "mikrotik";
:local ftppass "mYPa$$word";
:local ftpaddr "203.0.113.21";
#Выгружаем настройки
/system backup save name=$fname password=BackPa$$word;
:delay 10;
/export file=$fname
:delay 10;
#Загружаем конфигурацию на FTP
/tool fetch address=$ftpaddr src-path=$bname user=$ftpuser password=$ftppass port=21 upload=yes mode=ftp dst-path=$bname
:delay 15;
/tool fetch address=$ftpaddr src-path=$ename user=$ftpuser password=$ftppass port=21 upload=yes mode=ftp dst-path=$ename
:delay 15;
#Удаляем файлы с устройства
/file remove $bname;
/file remove $ename;
Первый блок может показаться избыточно сложным, но это связано с тем, что Mikrotik возвращает месяц в виде трехбуквенной аббревиатуры, а для хранения бекапов лучше использовать полностью цифровые значения даты.
Затем задаем переменные. Как можно заметить, мы задали несколько переменных с именами файлов. Этого можно было не делать и формировать нужные имена прямо в скрипте, но в этом случае сильно страдает его читабельность. Мы не советуем этим пренебрегать, потому что впоследствии, когда подробности уже забудутся, разобраться с сложном скрипте будет сложнее, нежели в простом.
Далее должно быть все понятно, во многом благодаря нашим немного избыточным переменным. Выгружаем полный бекап и экспортируем конфигурацию, отправляем на FTP, удаляем с устройства.
Теперь перейдем на целевое устройство: System - Scripts и создадим новый скрипт:
Прежде всего укажем имя скрипта, так как нам потребуется вызывать его в дальнейшем, пробелов в имени быть не должно. Выставляем политики как на скриншоте, хотя это не особо критично, и копируем в поле Source наш скрипт.
Для того, чтобы отличать конфигурации друг от друга задайте уникальную переменную myname. Лично мы используем следующий шаблон:
[идентификатор организации/места нахождения устройства] - [наименование устройства]
Это позволяет быстро определить чей это бекап и для какого устройства предназначен. Хотя вы можете использовать любую свою систему, либо указать любое имя, которое вам нравится.
После того, как вы создали скрипт его следует проверить, нажмите Run Script и убедитесь, что он делает все как вам надо. Обязательно проверьте со стороны FTP что файлы приходят и их можно восстановить.
Все работает? Отлично! Самое время добавить его в планировщик. Откроем System - Scheduler и добавим новое задание:
Имя задания может быть любым, а вот остальные опции нуждаются в пояснениях. Прежде всего определимся, с какой частотой мы хотим делать копии. Лично мы делаем резервное копирование раз в неделю, по воскресениям. Поэтому в Start Date указываем дату прошлого воскресения, в Start Time - время начала выполнения задания, в нашем случае - десять минут после полуночи. В поле Interval указываем периодичность повторения задания - ровно 7 дней.
Выставляем политики как на скриншоте, что снова некритично, и в поле On Event указываем команду запуска созданного нами скрипта:
/system script run backup_to_ftp
где backup_to_ftp - его имя.
Теперь каждое воскресение в указанное время ваше устройство будет делать две резервные копии конфигурации и отправлять их на FTP-сервер. Если устройств несколько, то мы советуем разнести их по времени, чтобы их задания не пересекались.
Другой вариант скрипта.
{
:log info "Starting Backup Script...";
:local sysname [/system identity get name];
:local sysver "model_ustroystva_ili_mesto_ustanovki";
:local ftpuser "ftp_user_name";
:local ftppass "ftp_password";
:local ftpaddr "ftp_ip";
:log info "Deleting last Backups...";
:foreach i in=[/file find] do={:if ([:typeof [:find [/file get $i name] \
"$sysname-"]]!="nil") do={/file remove $i}};
:delay 5;
:local backupfile ("$sysname-$sysver_" . \
[:pick [/system clock get date] 7 11] . [:pick [/system \
clock get date] 0 3] . [:pick [/system clock get date] 4 6] . ".backup");
:log info "Creating new Full Backup file...";
/system backup save name=$backupfile;
:delay 5;
:local exportfile ("$sysname-$sysver_" . \
[:pick [/system clock get date] 7 11] . [:pick [/system \
clock get date] 0 3] . [:pick [/system clock get date] 4 6] . ".rsc");
:log info "Creating new Setup Script file...";
/export file=$exportfile;
:delay 5;
/tool fetch user=$ftpuser password=$ftppass upload=yes address=$ftpaddr src-path=$backupfile mode=ftp dst-path=$backupfile;
:delay 5;
/tool fetch user=$ftpuser password=$ftppass upload=yes address=$ftpaddr src-path=$exportfile mode=ftp dst-path=$exportfile;
:log info "Backuping completed.";
}