Синхронизация настроек mikrotik master-slave

Автор George, Март 12, 2024, 06:55

« назад - далее »

George

Постановка задачи

Есть два роутера mikrotik сконфигурированных в отказоустойчивой конфигурации при помощи VRRP. Необходимо синхронизировать конфигурацию Firewall с мастера на slave.
Решение

На мастере будет запускаться (через sheduler) скрипт, который будет делать экспорт конфигурации в файл и затем будет заливать его на slave по ftp.

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

Для проверки синхронизации в разделе /ip firewall address-list будет создаваться фиктивный лист с названием sync_timestamp (в состоянии disabled). Во время экспорта в комментарий к указанному листу будет добавлена дата и время экспорта. Таким образом по этому листу можно сверять версии конфигурации.

Скрипт export_firewall_to_slave на мастере:

Код: bash
:local ftpuser "user"
:local ftppassword "password"
:local ftphost "192.168..."
:local config "master"

# set timestamp for monitoring
:if ( [:len [/ip firewall address-list find where list=sync_timestamp address="0.0.0.0"  disabled=yes]] = 0 )   do={
    /ip firewall address-list add  list=sync_timestamp address="0.0.0.0"  disabled=yes
}
:local date [/system clock get date]
:local time  [/system clock get time]
:local timestamp "$date_$time"
/ip firewall address-list set [/ip firewall address-list find where list=sync_timestamp  address="0.0.0.0"   disabled=yes] comment="timestamp: $timestamp"

#export config
/ip firewall
export file="$config"
/

# put config to slave
tool fetch address=$ftphost user=$ftpuser password=$ftppassword mode=ftp src-path=($config.".rsc") dst-path=($config.".rsc")  upload=yes;

Скрипт apply_master_config на slave:

Код: bash
:local config "master.rsc"

:if ([:len [/file find name=$config]] > 0) do={
  :put "Found config from master!"
  /ip firewall filter remove  [/ip firewall filter find dynamic=no]
  /ip firewall nat remove  [/ip firewall nat find dynamic=no]
  /ip firewall raw remove  [/ip firewall raw find dynamic=no]
  /ip firewall mangle remove  [/ip firewall mangle find dynamic=no]
  /ip firewall address-list remove  [/ip firewall address-list find dynamic=no]
  /ip firewall layer7-protocol remove [/ip firewall layer7-protocol find]
  /import $config
  /file remove $config
} else { :put "Config form master ($config) not found" }

На slave нужно создать пользователя с разрешением на ftp, и добавить скрипты в sheduler (на мастер можно раз в сутки, на slave раз в час).

Эта инструкция была найдена на просторах интернета
Ну и как обычно, скрипт приема пришлось дорабатывать. Я выложил уже доработанную версию, в оригинале не очищало 2 таблицы, и импорт падал с ошибкой параметр существует. При этом остальные правила оказывались удаленными
  •  

🡱 🡳

Отметьте интересные вам фрагменты текста и они станут доступны по уникальной ссылке в адресной строке браузера.