Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • 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
     
    ekarin
    Guest
    #1
    0
    24.09.2018 15:01:00
    Согласно моей презентации на конференции MUM 2018 в Таиланде, я выступал с докладом на тему «Мониторинг интернет-соединений WAN-ссылок только с помощью настройки маршрутизации». https://mum.mikrotik.com/presentations/TH18/presentation_5725_1534743837.pdf После конференции многие люди в Таиланде спрашивали меня, как автоматически обновлять адреса шлюзов ISP в маршрутах, если адреса шлюзов ISP на WAN-интерфейсах изменяются. В моей презентации я показал, как настраивать рекурсивные маршруты (то есть маршруты со статическими шлюзами ISP). Однако по их вопросам я понял, что некоторые провайдеры иногда меняют адреса шлюзов. Я ответил им решением — использовать скрипт, который автоматически обновляет адреса шлюзов в маршрутах. Хочу поделиться этим скриптом здесь, надеюсь, он будет полезен и другим.

    В случае PPPoE клиента на WAN-ссылке скрипт выглядит так:  
    :local newgw [/ip address get [find interface="pppoe-out1"] network];
    :local routegw [/ip route get [find comment="isp1"] gateway ];
    :if ($newgw != $routegw) do={  
         /ip route set [find comment="isp1"] gateway=$newgw;
    }  

    Обратите внимание, что его можно запускать на событие On Up PPPoE клиента, добавив в профиль PPPoE клиента.

    В случае DHCP клиента на WAN-ссылке скрипт такой:  
    :local newgw [ip dhcp-client get [find interface="ether1"] gateway];
    :local routegw [/ip route get [find comment="isp1"] gateway ];
    :if ($newgw != $routegw) do={  
        /ip route set [find comment="isp1"] gateway=$newgw;
    }  

    Его удобно запускать через системный планировщик с подходящим интервалом.

    Если нужно применить для нескольких WAN-ссылок, например, двух WAN-ссылок с PPPoE клиентами, просто скопируйте этот скрипт и вставьте так:  
    :local newgw1 [/ip address get [find interface="pppoe-out1"] network];
    :local routegw1 [/ip route get [find comment="isp1"] gateway ];
    :if ($newgw1 != $routegw1) do={  
        /ip route set [find comment="isp1"] gateway=$newgw1;
    }  
    :local newgw2 [/ip address get [find interface="pppoe-out2"] network];
    :local routegw2 [/ip route get [find comment="isp2"] gateway ];
    :if ($newgw2 != $routegw2) do={  
        /ip route set [find comment="isp2"] gateway=$newgw2;
    }
     
     
     
    adminken
    Guest
    #2
    0
    25.11.2019 03:14:00
    Плюс один, сэр.
     
     
     
    Taymaz1987
    Guest
    #3
    0
    01.09.2020 07:18:00
    Привет, друг! У меня интернет от провайдера. Провайдер настроил так, что подключаться может только модем, при этом мостовой режим не используется. По какой-то причине я вынужден использовать именно этого провайдера. Я подключаю модем к роутеру Mikrotik, включаю DHCP-клиент и всегда получаю IP с маской /24, а шлюз — 100.0.0.1, но до него нет доступа. Например, если IP 100.75.15.121/24, мне приходится вручную искать шлюз, который, к примеру, оказывается 100.75.15.1. Я не очень разбираюсь в скриптах, а провайдер не хочет помогать. Единственная идея — получить сеть DHCP-клиента, прибавить к ней 1 и использовать это как шлюз. Пожалуйста, помоги.
     
     
     
    FiiMitch
    Guest
    #4
    0
    01.09.2020 09:31:00
    Я настраивал множество роутеров Mikrotik с VDSL-модемами, используя их только для модуляции и аппаратного моста. Можешь уточнить:  
    – Марку и модель модема, который ты используешь  
    – Как настроен мост  
    – Как провайдер завершает соединение, то есть PPPoE, IPoE, DHCP  
    – Какое устройство Mikrotik ты используешь и как оно подключено/настроено  

    И также, что именно значит: ip is100.75.15.121/24, мне нужно вручную искать шлюз, который, например, приходится на 100.75.15.1? Это то, что сейчас приходит на уровне модема от провайдера? Или же это то, что передаётся твоему Mikrotik-роутеру с модема?
     
     
     
    volkirik
    Guest
    #5
    0
    12.02.2021 15:59:00
    Я также обновил правило srcnat... Спасибо за скрипт для шлюза.

    :local EthInterfaceName "ether1"  
    :local MyComment "terra"

    :local newgw [/ip dhcp-client get [/ip dhcp-client find interface="$EthInterfaceName"] gateway];
    :local routegw [/ip route get [/ip route find comment="$MyComment"] gateway ];
    :if ($newgw != $routegw) do={  
        /ip route set [/ip route find comment="$MyComment"] gateway=$newgw;
    }

    :local "assigned-addr" [/ip dhcp-client get [/ip dhcp-client find interface="$EthInterfaceName"] address]

    :if ([:len ($"assigned-addr")] <= 0) do={
     :log info "DHCPc update-srcnat: локальный адрес пуст"  
     :error "DHCPc update-srcnat: локальный адрес пуст"  
    } else={  
     :log info "DHCPc update-srcnat: локальный адрес для $EthInterfaceName — ($"assigned-addr") (активен)"  
    }

    :local "local-address" [:pick $"assigned-addr" 0 ([:find $"assigned-addr" "/"])]

    /ip firewall nat  
    :local srcnatPPPId  
    :set srcnatPPPId [find chain=srcnat action=src-nat out-interface="$EthInterfaceName"]
    # проверяем, есть ли srcnat правило  
    :if ([:len $srcnatPPPId] < 1) do={
     /ip firewall nat add action=src-nat chain=srcnat log=yes out-interface="$EthInterfaceName" to-addresses=($"local-address")  
     :log info "DHCPc update-srcnat: добавлено srcnat для $EthInterfaceName на ($"local-address")"  
    } else={  
     :local oldip [/ip firewall nat get [/ip firewall nat find chain=srcnat action=src-nat out-interface="$EthInterfaceName"] to-addresses]
     :if ($"local-address" != $oldip) do={  
       /ip firewall nat set [find chain=srcnat action=src-nat out-interface="$EthInterfaceName"] to-addresses=($"local-address")
       :log info "DHCPc update-srcnat: обновлено srcnat для $EthInterfaceName на ($"local-address")"  
     }  
    }
     
     
     
    cooling
    Guest
    #6
    0
    31.07.2021 02:35:00
    Как вставить два шлюза PPPoE в один комментарий, например: out-pppoe1 = gateway {192.168.1.1}, out-pppoe2 = gateway {10.10.1.1}. Все шлюзы динамические.  
    /ip route (isp1) gateway 192.168.1.1, 10.10.1.1  

    Скрипт:  
    local newgw1 [/ip address get [find interface="pppoe-out1"] network];
    local newgw2 [/ip address get [find interface="pppoe-out2"] network];
    local routegw1 [/ip route get [find comment="Test"] gateway];
    local routegw2 [/ip route get [find comment="Test"] gateway];
    if ($newgw1 != $routegw1), ($newgw2 != $routegw2) do={  
    /ip route set [find comment="Test"] gateway=$newgw1,$newgw2;
    }  

    Но не работает. Спасибо.
     
     
     
    volkirik
    Guest
    #7
    0
    31.07.2021 08:48:00
    https://wiki.mikrotik.com/wiki/Manual:Scripting#Logical_Operators :if (($newgw1 != $routegw1) or ($newgw2 != $routegw2)) do={ исправить: скобки }
     
     
     
    rextended
    Guest
    #8
    0
    01.08.2021 02:34:00
    Игнорируя остальные моменты… А куда же скобки ставить? :if (($newgw1 != $routegw1) or ($newgw2 != $routegw2)) do={
     
     
     
    cooling
    Guest
    #9
    0
    01.08.2021 04:38:00
    Я пытаюсь, но не получается.
     
     
     
    krixer
    Guest
    #10
    0
    19.11.2021 14:27:00
    Спасибо, сэр, хмм, это работает, но как быть, если одинаковый шлюз? На этом примере на картинке комментарий v4 относится к ether4, но доступен и для ether5 из-за одинакового шлюза у разных WAN. Если картинка не отображается, просто кликните по этой ссылке https://postimg.cc/HJKjGCyG
     
     
     
    maxpower
    Guest
    #11
    0
    31.01.2022 17:49:00
    Может, тебе тоже стоит сделать так: /ip firewall connection {:foreach r in=[find] do={remove $r}}; чтобы сбросить NAT-соединения, которые были установлены через старый шлюз?
     
     
     
    xgalsax1
    Guest
    #12
    0
    15.11.2022 21:01:00
    В моём случае у меня настроен резервный канал с конфигурацией по ссылке https://help.mikrotik.com/docs/pages/viewpage.action?pageId=26476608. Поэтому каждый раз нужно менять сразу несколько маршрутов. Вот скрипт, который я использую:

    :local DHCPINFO [/ip dhcp-client find where comment="WAN2"]
    :local DHCPGW [/ip dhcp-client get $DHCPINFO gateway]

    :foreach managedRoute in=[/ip route find where comment~"DHCP"] do={
     :local RouteGateway [/ip route get $managedRoute gateway]
     :if ($RouteGateway != $DHCPGW) do= {  
       :ip route set $managedRoute gateway=$DHCPGW  
       :log info "Динамический DHCP-маршрут изменён — $RouteGateway > $DHCPGW"  
     }  
    }

    Этот скрипт ищет DHCP-клиента с комментарием “WAN2” и обновляет все маршруты, в комментарии которых есть “DHCP”. Я ставлю его в IP > DHCP Client > DHCP of assigned interface > Advanced, но можно запускать и через системные скрипты с расписанием.
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2026 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры