Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Настройка
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    Форум
    RouterOS
    Синхронизировать два списка адресов в определённое время.

    Синхронизировать два списка адресов в определённое время.

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Синхронизировать два списка адресов в определённое время., RouterOS
     
    sirkike
    Guest
    #1
    0
    26.10.2011 18:35:00
    Мне это нужно — периодически синхронизировать два списка адресов, есть какой-то способ? Понятия не имею, как это сделать... Очевидно, что это две разные mikritok на двух разных X86...
     
     
     
    dimedrol
    Guest
    #2
    0
    13.12.2011 07:47:00
    Привет! Есть похожая задача. Все изменения происходят на главном ROS, на списках-ведомых только копируются. Подскажи, как это лучше реализовать?
     
     
     
    janisk
    Guest
    #3
    0
    13.12.2011 13:23:00
    Тебе придётся создать какую-то внешнюю программу для этого. Можно посмотреть в сторону API или скриптов. Я бы выбрал сделать API и базу данных, чтобы синхронизировать и отправлять только изменения.
     
     
     
    jurgenskrause
    Guest
    #4
    0
    02.04.2015 10:00:00
    Знаю, что отвечаю с опозданием, но у меня была такая же проблема. Списки адресов, которые мне нужно синхронизировать, достаточно маленькие, поэтому я смог сделать это с помощью скриптов на обоих роутерах. Скрипт доступен по ссылке: http://binaryheartbeat.blogspot.com/2015/03/mirkotik-synchronize-address-list.html
     
     
     
    boen_robot
    Guest
    #5
    0
    02.04.2015 10:49:00
    Если вы используете API-приложение, вам даже не нужно планировать синхронизацию. Можно держать API-соединение открытым и синхронизировать сразу, как только элемент будет добавлен или удалён из списка адресов. Например, с PHP (запускается из командной строки, а не с веб-страницы!):

    <?php
    use PEAR2\Net\RouterOS;

    require_once 'PEAR2_Net_RouterOS-1.0.0b5.phar';

    $master = new RouterOS\Client('master-router-ip', 'admin', 'password');
    $slaveUtil = new RouterOS\Util($slave = new RouterOS\Client('slave-router-ip', 'admin', 'password'));
    $slaveUtil->setMenu('/ip firewall address-list');

    $addressLists = array('List1', 'List2');

    $master->sendAsync(
       new RouterOS\Request('/ip firewall address-list listen'),
       function ($response) use ($addressLists, $slave, $slaveUtil) {
           if (in_array($response('list'), $addressLists, true)) {
               if (null !== $response('.dead')) {
                   //Удалено
                   $slaveUtil->remove(
                       $slaveUtil->find(
                           RouterOS\Query::where('list', $response('list'))->andWhere('address', $response('address'))
                       )
                   );
               } else {
                   //Добавлено
                   $slaveUtil->add(
                       array(
                           'list' => $response('list'),
                           'address' => $response('address')
                       )
                   );
               }
           }
       }
    );
    $master->loop();

    Или, если вы не хотите использовать третье устройство, можно воспользоваться идеей jurgenskrause… Только её можно реализовать проще и эффективнее…

    На мастере запланируйте:

    # Список через точку с запятой адресных списков, которые нужно синхронизировать
    :local lists {"List1";"List2"}

    # Имя файла экспорта (должно совпадать с именем файла импорта на принимающем роутере)
    :local exportFile "ExportAddressList.rsc"

    :local fileContents "/ip firewall address-list\n"
    :foreach i in=$lists do={
       :set $fileContents ($fileContents . "remove [find list=\"" . $i . "\"]\n")
       :foreach j in=[/ip firewall address-list print as-value where list=$i] do={
           :set $fileContents ($fileContents . "add list=\"" . ($j->"list") . "\" address=\"" . ($j->"address") . "\"\n")
       }
    }

    # Только первый раз
    :if ([/file print count-only where name=$exportFile] = 0) {
       /file print file=$exportFile
       :delay 2s
    }

    /file set $exportFile contents=$fileContents

    На слейве запланируйте:

    # Имя файла экспорта (должно совпадать с именем файла импорта на принимающем роутере)
    :local importFile "ExportAddressList.rsc"

    # IP-адрес роутера с существующими адресными списками
    :local hostIP 1.2.3.4

    # FTP-пользователь и пароль
    :local ftpUser username
    :local ftpPassword userpassword

    /tool fetch address=$hostIP src-path=$importFile dst-path=$importFile mode=ftp user=$ftpUser password=$ftpPassword
    /import $importFile
     
     
     
    jurgenskrause
    Guest
    #6
    0
    02.04.2015 11:56:00
    Очевидно, что boen_robot обладает куда большим опытом в Mikrotik Scripting, это действительно очень аккуратное решение. Как бы ты поступил во втором примере, чтобы убедиться, что записи тоже удаляются?
     
     
     
    boen_robot
    Guest
    #7
    0
    02.04.2015 12:41:00
    Ох, да… Нужно было добавить удаление там… Ладно, я исправил это выше, теперь старый список адресов очищается перед тем, как элементы добавляются (или перезагружаются).
     
     
     
    operhunt
    Guest
    #8
    0
    03.03.2020 15:03:00
    Привет. Я пытаюсь синхронизироваться по примеру 1, и получаю такую ошибку: PHP Fatal error: Uncaught exception 'PEAR2\Net\RouterOS\DataFlowException' с сообщением 'Асинхронные команды должны иметь тег.' в phar:///home/kolan/sync/PEAR2_Net_RouterOS-1.0.0b5.phar/PEAR2_Net_RouterOS-1.0.0b5/src/PEAR2/Net/RouterOS/Client.php:359  
    Стек вызовов:  
    #0 /home/kolan/sync/sync.php(34): PEAR2\Net\RouterOS\Client->sendAsync(Object(PEAR2\Net\RouterOS\Request), Object(Closure))  
    #1 {main}  
    брошено в phar:///home/kolan/sync/PEAR2_Net_RouterOS-1.0.0b5.phar/PEAR2_Net_RouterOS-1.0.0b5/src/PEAR2/Net/RouterOS/Client.php на строке 359.  
    Что я делаю не так?)
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2026 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры