MikroTik. Скрипт контроля мобильного Интернет’а

Автор: Андрей Торженов

Скрипт контроля работы мобильного Интернет’а (3G/4G) на MikroTik (обновлённая версия моего старого скрипта). Если Интернет недоступен то перезагружается модем и отправляется отчёт на email.

MikroTik. Скрипт контроля мобильного Интернет’а

Обновление от 24/09/2018, Версия 1.1.1:

  • Увеличен таймер ожидания загрузки модема после процедуры USB Power Reset (с 30 сек до 50) для последующего тестирования доступности Интернет’а. Некоторые модемы с прошивкой HiLink загружаются дольше чем 30 сек (Обсуждение этой проблемы: https://2keep.net/mikrotik-mobile-internet-check/#comment-466).

Обновление от 17/02/2018, Версия 1.1.0:

  • Добавлена поддержка модемов с HiLink прошивкой (подробнее читайте в комментариях в скрипте).
  • Добавлена проверка правильности указания интерфейса ‘ifName’ и типа модема ‘modemType’.

Скрипт рассчитан на работу как с модемом со Stick прошивкой (PPP соединением) так и на работу в ограниченном режиме с HiLink модемом. Модем может быть с USB интерфейсом или Mini-PCI. Стандарт мобильной связи модема неважен (2G, 3G или 4G, а в будущем хоть 5G).

Функции скрипта

  • Проверяет загрузку процессора в течении указанного времени. Если загрузка 100% — отправляется отчёт на email и перезагружается Mikrotik.
  • Проверка наличия WLAN интерфейса. Если интерфейса нет — отправляется отчёт на email и перезагружается Mikrotik (Как-то давно, были у меня проблемы на старом Mikrotik — исчезали Wi-Fi интерфейсы. Помогала только перезагрузка. Проблемы такой давно нет, но данную функцию оставил).
  • Проверка наличия маршрута по умолчанию. Если его нет, то перезагружается по питанию USB модем (если функция поддерживается), перезапускается PPP соединение (Stick модем) и отправляется отчёт на email. Бывало у меня, что PPP соединение поднято, но маршрут по умолчанию исчезает. Не знаю, кто был виноват, модем или Mikrotik.
  • Проверка наличия трафика на интерфейсе USB модема. Если трафик есть, то дальнейшие проверки PINGами доступности Интернета не проводятся. Это сделано для того, что бы когда канал забивался на 100% (например из-за Torrent) и ICMP пакеты терялись, скрипт не считал, что интернет недоступен и не перезапускал соединение. Иначе он будет перезапускать соединение по кругу, пока на 100% занят канал в Интернет.
  • Если трафика на интерфейсе модема нет, то производится тестирование соединения используя ICMP протокол (ping). Если недоступны сразу ДВА хоста, то перезагружается по питанию USB модем (если функция поддерживается), перезапускается PPP соединение (Stick модем) и отправляется отчёт на email. Реализована проверка на ошибки написания адреса хоста или ошибки резлова IP по доменному имени. В моём старом скрипте, такой проверки не было и могла произойти ошибка резолва IP по домену когда недоступен DNS сервер и скрипт останавливал свою работу.
  • Отправка отчета на email о состоянии USB модема и сети сотового оператора (для Stick модема). В отчёт входит: средний уровень сигнала мобильной сети (RSSI измеряется в течении 10 секунд и вычисляется среднее значение), название оператора, технология подключения к сети, модель модема, LAC, CID и др. Также на email отправляется прикрепленный файл с лог файлом Mikrotik.

Данный скрипт, это обновлённая версия моего скрипта для проверки работы мобильного Интернета, написанного в 2014 году. В данной статье я не буду подробно рассказывать как установить скрипт, настроить отправку почты, создать правило в планировщике. Если у вас возникают с этим проблемы, почитайте мою предыдущую статью на эту тему, там всё разжёвано:  Скрипт контроля качества 3G Интернет’а на MikroTik

 

В сущности, это не один, а два скрипта:

  1. healthCheck — скрипт проверки работы мобильного Интернета. Данный скрипт, с помощью планировщика запускается каждые 5 минут и выполняет тестирование мобильного Интернета.
  2. modemStatus — скрипт вызывается из скрипта «healthCheck» и выполняет опрос модема со Stick прошивкой, получая с него следующие данные: состояние модем, технология подключения к сети (3G, 4G), оператор, средний уровень сигнала RSSI и др. Для модема типа HiLink данный скрипт не нужен, т.к. с HiLink модема невозможно получить информацию.

Если используется модем со Stick прошивкой, то в MikroTik необходимо установить два скрипта.

В комментариях в скриптах, я постарался по максимуму описать алгоритм их работы. В случае необходимости, это вам поможет подправить скрипты под свои задачи.

Скрипт healthCheck

С помощью планировщика скрипт «healthCheck» запускается каждые 5 минут и выполняет тестирование Интернета.

Обратите внимание на параметр «usbReset». Включайте его только если ваш Mikrotik поддерживает функцию USB Power Reset (читайте комментарии в скрипте).

Скрипт modemStatus

Используется только для модемов со Stick прошивкой.

Скрипт «modemStatus» вызывается из скрипта «healthCheck» и выполняет опрос модема для получение информации о его состоянии и параметрах сети сотового оператора.

Вкратце по другим настройкам

Настройка email

Добавление в планировщик запуск скрипта

Скрипты «healthCheck» и «modemStatus» добавляйте в MikroTik через WinBox, там проще.

Если возникнут вопросы по данным процедурам, почитайте мою предыдущую статью на эту тему, там всё разжёвано:  Скрипт контроля качества 3G Интернет’а на MikroTik

Примеры отчётов приходящих на email

Нет маршрута по умолчанию

Недоступны хосты

P.S.

Скрипт опубликованный в данной статье, это упрощённая версия скрипта, используемого мной для своих задач. В скрипте, что использую я, более сложная логика реакции на возникающие проблемы с Интернет’ом, но в связи с этим, он сложнее и больше.

Т.к.  я не использую данный скрипт в своей работе, в нём могут всплывать ошибки, которые я не отловил в процесс отладки. Пишите о них в комментарии, я исправлю.

 

The following two tabs change content below.
В профессиональной сфере занимаюсь всем, что связанно с IT. Основная специализация - VoIP и сети передачи данных. Стараюсь не заниматься Windows серверами (но иногда приходится) и 1С.

MikroTik. Скрипт контроля мобильного Интернет’а: 37 комментариев

    1. Андрей Торженов Автор записи

      hilink модемом Mikrotik управлять не может. Не может он с него получить и уровни сигнала, и разорвать соединение и т.д. Единственное что можно, это перезагрузить питание usb, если Mikrotik это поддерживает.

      Данный скрипт не поддерживает hilink модем, но его можно для него переделать, значительно упростив скрипт.

  1. Windows LiveUser

    Добрый день! Использую модем HILINK. Установил скрипт, а он в логе вон что пишет. Отсутствует Stick и останавливает выполнение скрипта. Подскажите, что надо поправить.
    2 вопрос: настроил почту ya.ru, добавил свои данные. А на какой адрес будет приходить оповещения? На этот же? Получается будет отправлять сам себе?

    Прикрепленный файл:

  2. Windows LiveUser

    Со скриптом разобрался. Не поправил кое что. Но правда, на мой адрес логи не отправляет, хотя тестовое письмо я пробовал, отправляется. Проверял так: на самом хайлинк отключил сеть- ждал 10 минут, ничего после подключения к интернету не пришло.

    1. Андрей Торженов Автор записи
      1. Скрипт запускается планировщиком?
      2. Что в логах?

      Упрощенная логика скрипта такая:

      Пингует заданные узлы, если они недоступны, то перезагружает модем, опять тестирует доступность узлов, если они стали доступны, то отправляется email с отчётом.

      В вашем случае, вы отключили интернет сами, скрипт его пытается тестировать, выключает/включает модем, но инет не появляется… он и не отправляет отчёт, интернета то нет… как он его отправит?

      Для себя я использую более сложный скрипт, который в вашем случае, отправил бы отчёт на почту.
      Но в этом скрипте, этого нет, дабы не усложнять его.

        1. Windows LiveUser

          Вот scheduler . Все настроено. Делал через терминал Вашу команду. Если у Вас группа в телеграмме допустим или ник куда я смогу задать пару вопросов? Сюда не очень удобно писать.

          Прикрепленный файл:

          1. Андрей Торженов Автор записи

            Например из консоли

            Или через web/winbox

    1. Андрей Торженов Автор записи

      Программирование процесс творческий… будет вдохновение — сделаю.

      У меня есть готовый скрипт, который я сам использую. Там это реализовано, но он сложнее и нет поддержки hilink. Его тоже дописывать надо.

      А зачем вам этот отчёт? Основная задача скрипта — автоматически восстановливать работу интернета в случае зависания модема, а не отчёты.

      Отчёты на функциональность не влияют.

          1. Windows LiveUser

            Спасибо! Все работает корректно! Поначалу в логах красным писало ошибку. Разобрался: в параметре
            :log warning «Wait 30 sec to modem boot»;
            :delay 30;
            }
            :delay 20;
            Вместо 20 поставил 40. Видимо письмо пытался отправить без соединения с интернетом. Увеличил до 40 — все полетело! спасибо!

            Прикрепленный файл:
             

          2. Андрей Торженов Автор записи

            Значит модем hilink дольше загружается чем со stick прошивкой.

            Внёс изменения в скрипт с учётом данной особенности. Увеличил таймер.

  3. Eugene Badakh

    Здравствуйте! Использую модем Stick в качестве резервного канала. Основной канал по кабелю, подключен к ether1.
    Подскажите, будет ли работать скрипт при таких исходных данных?

    1. Андрей Торженов Автор записи

      Здравствуйте!

      Должен работать, но я бы сделал для тестируемых с помощью скрипта узлов отдельные маршруты через модем .

      Т.е. если пинговать будете 8.8.8.8, то для этого узла, лучше сделать отдельный маршрут через USB модем.

  4. Денис Денисов

    Добрый день, Андрей, Столкнулись с проблемой периодического отвала связи на одной из точек. Уже когда закупили оборудование поняли, что микроты не очень хорошо дружат с usb модемами и отвалы связи это явление нормальное,Интересует следующий вопрос. не понял по поводу работы модема hilink вы пишите в примере отчетов, используется модем фирмы Huawei Model: E3372 мы так же используем данный модем, но на вебке написано Hilink ниже Huawei из этого я так и не понял, будет ли второй скрипт работать? mikrotik 950G я так понимаю, что управление usb в этом роутере присутствует.

    и еще вопрос дилетантский, как его добавить, с микротами мало сталкивался, я так понимаю в нетвоч на вкладку down Эти два скрипта вставлять?

    1. Андрей Торженов Автор записи

      Только на одной какой-то модели Микротика были проблемы с USB модемами. У меня много где используются и проблем нет.
      Сами USB модемы не очень надёжная вещь.

      E3372 может быть как со stick прошивкой, так и hilink. Если у вас веб интерфейс, значит у вас hilink модем. Второй скрипт работать не будет.

      950G? Может RB951G-2HnD ? У него есть управление питанием USB (https://wiki.mikrotik.com/wiki/Manual%3AUSB_Features#RouterBoard_USB_port_table)

      Скрипт запускается через планировщик, а не netwatch (тут подробней как ставить https://2keep.net/3g-internet-connection-test-on-mikrotik )

      1. Денис Денисов

        Может RB951G-2HnD верно, такие используем
        Хорошо, если второй скрипт не работает, то из первого мне следует удалить вот эту часть кода или просто ее закоментировать?
        # Запускаем скрипт «modemStatus» и получаем состояние модема и уровня сигнала сети
        execute «/system script run modemStatus»;
        :delay 15;

        И тогда просто будет отключаться питание usb порта?

        1. Андрей Торженов Автор записи

          В первом нужно сделать начальные настройки. Тип модема и имя интерфейса.

          1. Денис Денисов

            Спасибо большое, Андрей, за помощь.
            Как определить имя модема не совсем понял. Имя интерфейса тут понятно, interfaces вижу что отображается как lte1, а вот имя где смотреть? если у меня модем хуавей с прошивкой hilink? Заранее благодарен.

          2. Андрей Торженов Автор записи

            Вам нужно не имя модема, а имя интерфейса модема

            в вашем случае lte1

  5. Денис Денисов

    Андрей, добрый день, пытаюсь добавить скрипт, я так понял, что закоменченое нужно убирать, так как при копировании винбокс не распознает кирилицу и получаются знаки, но вот убрал когда все коменты и оставил только программу, то при нажатии run script ничего не происходит, перед этим я вырубил на вебморде модема инет принудительно.

    1. Андрей Торженов Автор записи

      Комментарии можно не убирать, работе скрипта не мешают. Но да, кириллицу не понимает (можно сделать что бы понимал, но это долго).

      Скрипт лучше запустить из консоли, командой

      и смотреть в логах и консоли что пишет, какие ошибки…

  6. Александр

    Добрый, вот сижу и тестирую скрипт для дачи. Есть ряд предложений и выявленных проблем. модем 3372h modemType «stick» настройка по :local usbReset «no»; 1) возможно ли разделить проверку трафика и пинг, было пару раз когда ICMP ходили но при этом трафик был ниже 100Кб 2) было такое что модем подвисал или соединение подвисало при этом выполнялся скрипт отключить — подключить интерфейс РРР , но модем не реагировал. не хотел дергать питание на USB , дополнял командой :log warning «Modem AT-reset!»; /interface ppp-client set modem-init=»AT+CFUN=1″ 0; :delay 30; Тоже не помогло, только ребут по питанию USB

    Насилую модем Ютубом 4К =))

    1. Андрей Торженов Автор записи

      Не совсем понял вопросы.

      1. Тестовые ICMP пакеты отправляются, только если трафик ниже заранее указанного (<100 кбит/сек). Если трафик больше, то и нет смыла отправлять ICMP, модем явно не завис, трафик идёт.

      2. Может виснуть PPP соединение, для этого рестарится PPP, но может и виснуть сам модем, тогда нужно по USB питание дёргать. Так что отключать USB Power Reset не стоит. Будет иногда виснуть.

      1. Александр

        я предлагаю ребутить в любом случае если ходят не ходят ICMP пакеты если трафик ниже 100 Кбит Было соединение ниже 100 Кбит но при этом ICMP пакеты ходили. Пришлось ребутить модем. в ручную

          1. Александр

            Как опции <100 кбит/с и НЕ ПРОХОДЯТ icmp или только <100 кбит/сек
            Возможно модем у кого то работает на телематику, где соединение ниже <100 кбит/сек

          2. Андрей Торженов Автор записи

            Вариант с «только <100 кбит/сек» нельзя.

            Скрипт будет запускаться по планировщику, например каждый 5 мин, и если трафик ниже 100 кбит/сек будет перезагружать модем.

            Зачем такое? У вас же не идёт постоянно трафик на >100 кбит/с.

            Трафик он то есть (когда качают), то его нет (когда не качают). И когда не качают (трафик <100 кбит/сек) то модем каждый 5 мин будет перезагружаться.

Добавить комментарий