Как стать автором
Обновить

Комментарии 3

А почему вы не храните это в файловой системе самого устройства? Команда экспорта может создать файл в файловой системе, а запуск этого файла развернёт всё назад. Минус одно стороннее устройство.
Хорошо, когда свободной энергонезависимой памяти в устройстве много, а списки занимают мало места. Однако чаще всего размер списков в районе 2-3 мегабайт, а свободного места в устройстве предательски мало. Второе — я так и не нашел способа отпарсить списки такого размера средствами скриптового языка RouterOS (тут еще примешивается проблема, что система не может нормально работать со списками большого размера, из-за этого приходится использовать DynListExport), а если список не подготовлен соответствующим образом, то при обнаружении дублирующихся записей импорт прервется. Ну и третье — желательно иметь бэкап всех настроек на стороннем устройстве, чтобы в случае аппаратной проблемы можно было легко поднять шлюз на аналогичном (или похожем) железе.
Использую похожий механизм для перезагрузки маршрутизатора, например, для обновления без потери динамических листов.
Плюсы в простоте реализации и в отсутствии необходимости в дополнительном ПО и оборудовании.

1) Кладем в скрипт в System -> Scripts; name=reboot:
:local file "DynAddListsBackup";
/execute script={
    :local content "/ip firewall address-list\r\n";
    :foreach i in=[/ip firewall address-list print as-value where dynamic] do={
        :set $content ($content."add address=".$i->"address"." timeout=".$i->"timeout"." list=\"".$i->"list"."\"\r\n");
    }
    :put $content;
} file=$file

/system reboot

Скрипт создает файл DynAddListsBackup.txt похожего содержания:
/ip firewall address-list
add address=192.0.2.1 timeout=4w09:37:48 list="list one"
add address=198.51.100.222 timeout=4w12:12:58 list="list two"


2) Добавляем автозапуск импорта сохраненных скриптом динамических листов из первого пункта в System -> Scheduler; start-time=startup:
/import DynAddListsBackup.txt


3) Перезагружаемся System -> Scripts -> «reboot» -> Run Script. Или из консоли:
/system script run "reboot"

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации