Информация
Настройка
Новости
Контакты
Новинка
Распродажа
Оплата
Доставка
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • Changelogs
  • 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
    улучшить функцию "check-gateway" — использовать произвольный IP для проверки

    улучшить функцию "check-gateway" — использовать произвольный IP для проверки

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    улучшить функцию "check-gateway" — использовать произвольный IP для проверки, RouterOS
     
    sporkman
    Guest
    #1
    0
    24.01.2014 08:41:00
    Я новичок в Mikrotik и был рад увидеть столько способов балансировки нагрузки и резервирования трафика при наличии нескольких upstream-соединений. Однако, похоже, что для настоящей проверки состояния, выходящей за рамки просто «включен ли upstream-роутер», приходится копаться в скриптах — а это настоящая головная боль, особенно если хочешь использовать больше двух upstream.

    Многие DSL, кабельные, EoC, T1 и подобные подключения имеют отдельный LAN-блок, поэтому просто пинговать IP upstream-роутера, который используется как шлюз по умолчанию, ничего не скажет о наличии реального соединения. Возможность указать, например, IP первого хопа за upstream-роутером или какой-то сервер выше по цепочке была бы гораздо удобнее и отражала бы реальную ситуацию.

    Например, было бы намного проще так:

    ip route add dst-address=0.0.0.0/0 gateway=10.111.0.1 check-gateway=ping check-address=10.110.0.99

    Без скриптов, без netwatch — просто вводишь IP, который хочешь мониторить, чтобы проверить доступность через него.
     
     
     
    cypa
    Guest
    #2
    0
    21.06.2017 07:08:00
    В наше время в России многие домашние и SMB-шлюзы провайдеров отвечают на arp-ping с потерями около 50%, поэтому разумно добавить некоторое сглаживание и пороги потерь пакетов для check-gateway=arp.
     
     
     
    jarda
    Guest
    #3
    0
    21.06.2017 16:49:00
    Как человек, который теряет пинги внутри своей сети, вообще может быть провайдером?
     
     
     
    idlemind
    Guest
    #4
    0
    21.06.2017 21:28:00
    В советской России Интернет серфит тебя. Вот так.
     
     
     
    esanbr
    Guest
    #5
    0
    21.11.2015 23:50:00
    Ошибка возникает, когда проблема находится после вашего шлюза, то есть ваш шлюз отвечает нормально, но связь прерывается через 2, 3 или больше маршрутизаторов дальше. Только с помощью скрипта можно проверить, создана ли опция вроде «check-address=10.110.0.99»!
     
     
     
    Chupaka
    Guest
    #6
    0
    22.11.2015 23:25:00
    Бвхаха, 5 лет xD Ты читал эту статью?
     
     
     
    blazej44800
    Guest
    #7
    0
    06.02.2016 21:29:00
    +10 за предложение функции!
     
     
     
    dcosta
    Guest
    #8
    0
    20.12.2016 15:25:00
    Привет! На мой взгляд, это улучшение функции значительно упростит настройку проверки маршрутов, убрав множество строк конфигурации и сделав настройку проще и понятнее. Очень похоже на то, что уже реализовано с «ARP IP targets» в проверке ARP-бонда. Спасибо, Дэвид.
     
     
     
    telepro
    Guest
    #9
    0
    15.05.2017 12:42:00
    +1 за эту просьбу о функции. Было бы очень полезно.
     
     
     
    nathan1
    Guest
    #10
    0
    15.05.2017 22:13:00
    Несколько лет назад я написал код, который запускаю для проверки каждого маршрута с учетом поправок по расстоянию (веса для разных линий). Можно использовать любую команду RouterOS для проверки маршрута, создав комментарий к маршруту, который начинается с “ROUTE_CHECK:”. Это позволяет использовать конкретные таблицы маршрутизации и составные выражения. У меня на системах пингуются два адреса, и суммируется их статус (получается 0, 1 или 2), причём любое значение, кроме 0, считается успешным. Если возвращается 0, маршрут либо отключается, либо у него корректируется дистанция в зависимости от переменных minDistance/maxDistance. Всё это объединяется, чтобы задавать «приоритеты» для доступных линий, так чтобы всегда оставался последний запасной вариант. Запуск происходит через планировщик каждые 5 секунд.

    add check-gateway=ping comment="ROUTE_CHECK: :global minDistance 5; :global maxDistance 55; return ([/ping PUBLICIP1 count=1 interface=OutsideComcast routing-table=Comcast]+[/ping PUBLICIP2 count=1 interface=OutsideComcast routing-table=Comcast])" distance=5 gateway=GATEWAYMASKED routing-mark=PhoneInternet
    add check-gateway=ping comment="ROUTE_CHECK: :global minDistance 10; :global maxDistance 50; return ([/ping PUBLICIP1 count=1 interface=OutsideVerizon routing-table=Verizon]+[/ping PUBLICIP2 count=1 interface=OutsideVerizon routing-table=Verizon])" distance=10 gateway=GATEWAYMASKED routing-mark=PhoneInternet
    add check-gateway=ping comment="ROUTE_CHECK: :global minDistance 5; :global maxDistance 50; return ([/ping PUBLICIP1 count=1 interface=OutsideVerizon routing-table=Verizon]+[/ping PUBLICIP2 count=1 interface=OutsideVerizon routing-table=Verizon])" distance=5 gateway=GATEWAYMASKED pref-src=SRCMASKED
    add check-gateway=ping comment="ROUTE_CHECK: :global minDistance 10; :global maxDistance 55; return ([/ping PUBLICIP1 count=1 interface=OutsideComcast routing-table=Comcast]+[/ping PUBLICIP2 count=1 interface=OutsideComcast routing-table=Comcast])" distance=10 gateway=GATEWAYMASKED

    Если кто-то хочет попробовать — добавьте этот планировщик/скрипт. Ниже привожу более читабельную версию.

    /system script add name=route_check owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive source=":foreach k in [/ip route find comment~\"ROUTE_CHECK\"] do={
       :local actualroute [:tostr [/ip route get \$k]]
       :local disabled [/ip route get \$k disabled]
       :local comment [/ip route get \$k comment]
       :local distance [/ip route get \$k distance]
       :local cmd [:pick \$comment 13 [:len \$comment]]
       :local parsedcmd [:parse \"\$cmd\"]
       :global minDistance \"\"  
       :global maxDistance \"\"  
       :global stepDistance 5  
       :local status [\$parsedcmd]
       :set minDistance [:tonum \$minDistance]
       :set maxDistance [:tonum \$maxDistance]
       #:put \"STATUS: \$status \$[:type \$status]\"
       :if ([:type \$status] != \"num\") do={
           :error \"\$comment вернул значение не числового типа (нужен return в выражении?)\"  
       }  
       if ([:type \$minDistance] != \"nil\" && [:type \$maxDistance] != \"nil\") do={
           if (\$minDistance >= \$maxDistance) do={  
               :error \"minDistance >= maxDistance\"  
           }  
           :local newDistance \$distance  
           if (\$status = 0) do={  
               :set newDistance (\$distance + \$stepDistance)  
           }  
           if (\$status != 0) do={  
               :set newDistance (\$distance - \$stepDistance)  
           }  
           if (\$newDistance < \$minDistance) do={ :set newDistance \$minDistance; }  
           if (\$newDistance > \$maxDistance) do={ :set newDistance \$maxDistance; }  
           if (\$newDistance != \$distance) do={  
               /log warning \"distance (\$status): \$distance [\$minDistance, \$maxDistance] -> \$newDistance - \$actualroute\"
               /ip route set \$k distance=\$newDistance  
           }  
       } else {  
           :if (\$status = 0 && !\$disabled) do {  
               /ip route disable \$k  
               /log warning \"Команда: \$cmd статус=\$status\"  
               /log warning \"distance (\$status): \$distance ОТКЛЮЧАЮ - \$actualroute\"  
           } else {  
               :if (\$status != 0 && \$disabled) do {  
                   /ip route enable \$k  
                   /log warning \"distance (\$status): \$distance ВКЛЮЧАЮ - \$actualroute\"  
               }  
           }  
       }  
    }"  

    /system scheduler add interval=5s name=route_check on-event=route_check policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive start-date=feb/09/2016 start-time=03:39:20  

    :foreach k in [/ip route find comment~"ROUTE_CHECK"] do={
    :local actualroute [:tostr [/ip route get $k]]
    :local disabled [/ip route get $k disabled]
    :local comment [/ip route get $k comment]
    :local distance [/ip route get $k distance]
    :local cmd [:pick $comment 13 [:len $comment]]
    :local parsedcmd [:parse "$cmd"]
    :global minDistance ""  
    :global maxDistance ""  
    :global stepDistance 5  
    :local status [$parsedcmd]
    :set minDistance [:tonum $minDistance]
    :set maxDistance [:tonum $maxDistance]
    #:put "STATUS: $status $[:type $status]"
    :if ([:type $status] != "num") do={
       :error "$comment вернул значение не числового типа (нужен return выражения?)"  
    }  
    if ([:type $minDistance] != "nil" && [:type $maxDistance] != "nil") do={
       if ($minDistance >= $maxDistance) do={  
           :error "minDistance >= maxDistance"  
       }  
       :local newDistance $distance  
       if ($status = 0) do={  
           :set newDistance ($distance + $stepDistance)  
       }  
       if ($status != 0) do={  
           :set newDistance ($distance - $stepDistance)  
       }  
       if ($newDistance < $minDistance) do={ :set newDistance $minDistance; }  
       if ($newDistance > $maxDistance) do={ :set newDistance $maxDistance; }  
       if ($newDistance != $distance) do={  
           /log warning "distance ($status): $distance [$minDistance, $maxDistance] -> $newDistance - $actualroute"
           /ip route set $k distance=$newDistance  
       }  
    } else {  
       :if ($status = 0 && !$disabled) do {  
           /ip route disable $k  
           /log warning "Команда: $cmd статус=$status"  
           /log warning "distance ($status): $distance ОТКЛЮЧАЮ - $actualroute"  
       } else {  
           :if ($status != 0 && $disabled) do {  
               /ip route enable $k  
               /log warning "distance ($status): $distance ВКЛЮЧАЮ - $actualroute"  
           }  
       }  
    }  
    }
     
     
     
    telepro
    Guest
    #11
    0
    24.05.2017 20:26:00
    Кто-нибудь знает: есть ли какой-то способ контролировать частоту отправки пингов, когда в определении маршрута включена функция Check-gateway? По умолчанию сейчас кажется, что пинг посылается примерно раз в 10 секунд. Хотелось бы замедлить этот процесс. Заранее спасибо.
     
     
     
    mrz
    Guest
    #12
    0
    25.05.2017 08:26:00
    В данный момент нет способа контролировать это.
     
     
     
    jarda
    Guest
    #13
    0
    25.05.2017 10:34:00
    Странно. Я мог бы представить, что мне это нужно только быстрее, так зачем его замедлять?
     
     
     
    telepro
    Guest
    #14
    0
    25.05.2017 11:31:00
    Наша ситуация: Устройство Mikrotik получает статусные данные от подключённых к нему по Ethernet локальных датчиков. Эти данные нужно надёжно отправлять в центр обработки данных. У маршрутизатора Mikrotik есть два доступных канала связи с центром данных: основной — наземное проводное соединение через ISP, без существенных затрат на передачу данных, и резервное — сотовое соединение, которое используется при отказе основного канала. Сотовая связь тарифицируется по объёму переданных данных в месяц. Мы используем рекурсивные маршруты, чтобы проверять доступность обоих каналов, и сообщаем в центр обработки данных о сбое любого из путей. Это ускоряет ремонт в случае отказа.

    Что касается резервного сотового канала, рекурсивная маршрутизация отправляет ping размером 70 байт и получает ответ каждые 10 секунд.  
    70 байт/датаграмма * 2 (ping + ответ) * 6 (пингов в минуту) * 1440 (минут в дне) * 30 (дней в месяце) = 36 мегабайт в месяц.  

    Это всего лишь служебная информация, которая позволяет начать ремонт при возникновении проблемы. Возможность уменьшить размер ping до минимального и снизить частоту отправки значительно уменьшила бы стоимость передачи этих статусных данных. Вот мой вопрос/запрос…
     
     
     
    jarda
    Guest
    #15
    0
    25.05.2017 11:49:00
    Хорошо. Выключи пинг шлюза и используй вместо этого netwatch.
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2025 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры