Mikrotik: Powershell-скрипт для массового резервного копирования.

В Mikrotik Router OS существует два вида резервного копирования.

1. Бинарный бекап. В этом случае создается полная резервная копия настроек, включая MAC-адреса. Этот вариант хорошо подходит для восстановления на том же устройстве, а вот с переносом на другой девайс могут возникнуть проблемы. (совпадение MAC-адресов, перепутанные имена интерфейсов и прочие радости)

2. Текстовый бекап. Тут создается текстовый скрипт с настройками. Можно открыть блокнотом и посмотреть как было настроено, а также запустить на другом девайсе, и если какие-то настройки несовместимы, поправить руками.

В принципе и первый и второй бекапы делаются одной командой в терминале. Однако при количестве устройств больше 2-х десятков делать копии вручную весьма уныло. Поэтому был написан скрипт, который автоматизирует данный процесс.

Для скрипта был использован powershell модуль для работы с Mikrotik API, взятый отсюда. Автору модуля -- огромное спасибо!

Идея скрипта довольно простая. Есть текстовый файлик со строками вида: 

IP-аддрес логин пароль id-устройства

Скрипт подключается по API используя IP, логин, пароль, посылает команды для резервного копирования, ждет какое-то время пока команды выполняться и по ftp забирает файлы резервных копий. Файлы складываются в папку с текущей датой. К имени файлов добавляется id-устройства. Повторять пока не закончатся строки в файле.

Текст скрипта:


# Импортируем модуль для работы с api
Import-Module <путь к mikrotik.dll>

# Назначаем переменные
New-Variable -Name ip
New-Variable -Name user
New-Variable -Name pass
New-Variable -Name ID
New-Variable -Name dt
$dt = Get-Date -Format d

# Создаем папку с датой
New-Item -Path "<Путь к папке>\$dt" -ItemType "directory"
New-Variable -Name folder -Value "<Путь к папке>\$dt"

# Цикл
Get-Content <Путь к файлу с параметрами> | Foreach-Object{
    # Читаем значения из файла
   $var = $_.Split(' ')
   $ip = $var[0]
   $user = $var[1]
   $pass = $var[2]
   $id = $var[3]

# Подключаемся к микротику
$C=Connect-Mikrotik -IPaddress $ip -UserName $user -Password $pass

# Посылаем команды для бекапа
Send-Mikrotik -Connection $C -Command "/export" -Attributes "file=backup_config.rsc"
Send-Mikrotik -Connection $C -Command "/system/backup/save" -Attributes "name=Mik_backup"

# Ставим задержку
Start-Sleep 30

# Копируем rsc файл по ftp
$download_url = "ftp://$ip/backup_config.rsc"
$local_path = "$folder\$ID.backup_config.rsc"
$WebClient = New-Object System.Net.WebClient
$WebClient.Credentials = New-Object System.Net.NetworkCredential($user, $pass)
$WebClient.DownloadFile($download_url, $local_path)

# Копируем backup файл по ftp
$download_url = "ftp://$ip/Mik_backup.backup"
$local_path = "$folder\$ID.Mik.backup"
$WebClient = New-Object System.Net.WebClient
$WebClient.Credentials = New-Object System.Net.NetworkCredential($user, $pass)
$WebClient.DownloadFile($download_url, $local_path)

# отключаемся от микротика
Disconnect-Mikrotik -Connection $C

}
# конец цикла


Для подключения к устройствам по API, нужно открыть на input порт 8728 для IP-адресса с которого будем подключаться. Указан порт по умолчанию можно поменять в IP --> Services. Также желательно добавить этот адресс в IP --> Services в поле Available From. Чтобы доступ к API всякие нехорошие ребята.

 

Аналогичное нужно сделать для доступа по FTP, порт по умолчанию -- 21.

Скачать костыль скрипта и модуль для работы с API можно отсюда.

 
1 1 1 1 1 1 1 1 1 1 Рейтинг 0.00 [0 Голоса (ов)]

Добавить комментарий