Скрипт контроля качества 3G Интернет’а на MikroTik

Автор: Андрей Торженов
Данный скрипт устарел и больше не обновляется. Новый скрипт находится в статье: MikroTik. Скрипт контроля мобильного Интернет’а

Обновление от 27/01/2018:

  • Исправлены ошибки проявившие себя в новой версии RouterOS (работа протестирована на ROS 6.41).
  • Убрал автоматическое определение интерфейса через который идёт интернет и который нужно контролировать (интерфейс USB модема). Теперь имя интерфейса необходимо указать вручную (переменная ifName). Данная функция не всегда удобна, по этому решил отказаться от неё.
  • Скрипт больше не поддерживается. Новый скрипт: MikroTik. Скрипт контроля мобильного Интернет’а

Обновление от 03/10/2015:

  • Добавлена возможность получения на email отчёта с 3G модема о уровне сигнала (RSSI), операторе мобильной связи, модели модема и т.д.
  • Проверка присутствия маршрута по умолчанию. Если нет, то перезагрузка. Стала возникать проблема, что PPP соединение поднимается, но иногда, в таблице маршрутизации не появляется маршрут по умолчанию (конечно «Add default route» включено).

Обновление от 09/05/2015:

  • Контроль наличия интерфейсов имя которых, начинается на «wlan» (у меня была проблема, когда данные интерфейсы исчезали и помогала только перезагрузка, похоже проблема была в конденсаторе, его перепояли, но на всякий случай, проверку оставил).
  • Контроль загрузки CPU в течении указанного времени. Если 100%, тогда перезагрузка Mikrotik.
  • ICMP пакеты для тестирования интернет, отправляются только в том случае, если в текущий момент, интернет трафик меньше 30 кбит/с (были проблемы, когда канал забивался на 100% и ICMP пакеты терялись, скрипт считал, что интернет лежит и перезапускал соединение).

Обновление от 26/09/2014:

  • Изменена информация по настройке SMTP. Использование SSL/TLS.

В деревне был налажен интернет и даже установлен офисный телефон, но возникла одна проблема, которая как мне кажется, часто встречается при использовании 3G USB модема.

PPP соединение установлено, но интернета нет или в большинстве случаев интернет есть но с 60-80% потерями пакетов. Иногда данная проблема возникает раз в день, иногда раз в неделю, а бывает и несколько раз за час. Проблему нужно было решать. Необходимо написать скрипт контроля соединения.

В MikroTik для написания скриптов используется язык Lua. Т.к. раньше с данным языком я ни когда не работал и изучил его основы за час-полтора то и скрипт получился простой и не претендующий на гениальность, но свои функции он выполняет.

Что делает скрипт

  • Контроль наличия wlan интерфейса (если нет, перезапуск Mikrotik);
  • Контроль загрузки CPU (если 100% загрузки за указанное время, перезапуск Mikrotik);
  • Контроль наличия маршрута по умолчанию (если нет, перезапуск Mikrotik);
  • Контроль наличия трафика на PPP интерфейсе;
  • Если трафика на PPP интерфейсе нет, то производится тестирование соединения используя ICMP протокол (ping). Если недоступны сразу ДВА хоста, PPP соединение перезапускается;
  • Информация об уровне сигнала 3G модема (RSSI), операторе сотовой связи и т.д.;
  • По всем описанным выше событиям, отправляется отчет на email.

Оборудование

Маршрутизатор MikroTik RB751U-2HnD, ver. 6.32.2

3G USB модем Huawei E392

Настройка отправки почты через SMTP сервер

В данном случае у меня настроена отправка почты с отчётами через SMTP сервер Yandex’а. К сожалению в address нельзя указать fqdn (доменное имя), пришлось указать IP адрес сервера smtp.yandex.ru.

Судя по changelog, в версии RouterOS 6.32.2 появилась возможность указывать доменное имя (fqdn), а не IP:
What's new in 6.32.2 (2015-Sep-17 15:20):
...
*) email - resolve server address;

Но у меня это не работает, может какой то баг.

P.S. В Changelog на версию Release candidate 6.33rc16 появилось:

*) email - allow server to be specified as fqdn which is resolved on each send;

С 15ого сентября 2014 года, Yandex стал требовать в обязательном порядке  протокол шифрования SSL, в связи с этим, будем настраивать SMTP клиент в Mikrotik с поддержкой данного протокола.

Проверим отправку почты, отправив тестовое письмо:

Скрипт контроля качества 3G Интернет’а

Используются два скрипта:

  1. Test-3G-Link — сам скрипт контроля качества;
  2. modemStatus- скрипт получения информации с модема.
Из скрипта «Test-3G-Link» происходит вызов скрипта «modemStatus».
 

Добавляем скрипты в системные скрипты MikroTik’а

Скрипт удобней добавлять через WinBox. Заходим в меню System > Scripts и нажимаем +. Имя скрипту даём «Test-3G-Link», в дальнейшем оно будет использоваться в настройках планировщика.

Так же поступаем и со скриптом «modemStatus».

Добавление скрипта в MikroTik

Добавление скрипта в MikroTik

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

Скрипт будет запускаться каждые две минуты.

Результаты

Проблемы с Интернет

В случае возникновения проблем будет перезапущенно PPP соединение и в логах MikroTik’а и на почту будут приходить похожие сообщения:

100% загрузка CPU

В случае 100% загрузки CPU в течении 3 сек, будет отправлено сообщение на email и перезагружен Mikrotik.

 

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

Скрипт контроля качества 3G Интернет’а на MikroTik: 20 комментариев

  1. Уведомление: Продолжаем уходить на 2100 МГц | Жизнь радиолюбителей.

  2. eika-inc

    Андрей, спасибо за труды. Затея очень крутая. Будем пробовать ее в деле.

    1. Как тестировать скрипт? В смысле, имитировать проблемы с инетом? Кастрюля с крышкой нужного эффекта не приносят, -89 дбм хватает даже для 3G. Вынимать симку, кажется, тоже некорретно — роутер перестает видеть APN. Так как потестить? И особенно, чтобы был вызван modemStatus?

    2. В шедулере вы создаете таск в нижнем регистре (link). Потом же называете его Link. Вроде как в никсах это разные имена файлов.

    3. Не совсем понял как команда interface ppp-client info 0 прекрасно находит мой модем, хотя называется он ppp-out1. Видимо, после интерфейса указывается не имя, а что-то типа встроенной функции в ОС, и она уже ищет реальный интерфейс. Так что ли?

    Заранее спасибо за ответы и еще раз благодарю за большую проделанную работу.

  3. eika-inc

    И 4-ый пункт.

    К сожалению, на R951Ui-2nD ребут роутера не позволяет модему «почистить карму» (обнулить состояние). RouterOS ребуется, а модем продолжает не видеть сеть. К счастью, в этой модели роутера можно программно снимать питание с USB-порта:

    /system routerboard usb power-reset duration=15s

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

    Модем Huawei E392.

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

      При зависании модема (аппаратные проблемы модема, нехватка питания по USB если длинный кабель и т.д.) перезагрузка роутера может не помочь, т.к. во время перезагрузки, питание с USB интерфейса не снимается и соответственно модем так и остаётся зависший.

      В моём случае использовался роутер 751ый (в статье написано об этом), у него нет функции управления питанием USB (http://wiki.mikrotik.com/wiki/Manual:USB_Features#RouterBoard_USB_port_table) по этому в скрипте и не реализована функция usb power-reset.

      1. eika-inc

        Андрей, спасибо.

        Именно так и есть, только причин зависания линка может быть много. И ребут роутера не спасает, что проверено как на Кинетике, так и на Микротике. А вот в 951-ый Микротике (дешевый hAP) эта функция к моему великому счастью есть. И она реально рулит! Я модем мурыжил и так и сяк, часами дергал, вынимал карту, давал ему работать в зеленом режиме и так далее. Из всех попыток только один раз модем не вышел в онлайн с первого раза, но вышел со второго.

        По моей версии вашего скрипта будут замечания? Я не кодер, сделал как понял и смог.

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

          По вашей версии скрипта могу сказать следующее:

          1. У меня бывали случае, что пропадал маршрут по умолчанию и нужно было просто переподключить соединение (disable/enable) и он появлялся (но если не появится, можно дополнить логику работы скрипта, что в этом случае уже будет ресет модема по питанию).
          Каждый раз передёргивать модем по питанию, наверно не очень хорошо. Может и выйти из строя от частого выключения/включения питания, особенно если на морозе. Но если это не часто… то думаю проблем не будет.

          2. Есть ещё вторая часть скрипта, где у вас написано «# Comparing actual traffic with reference value (30 kbps). If less, ping hosts.».
          Там пингуется адрес в интернет и если не отвечает, то соединение тоже перезагружается.
          Туда вы не добавили ресет модема по питанию, хотя ситуация, что маршрут есть, а инет недоступен, т.к. повис модем, тоже может быть.

          Все мои замечания не критичны, если у вас всё работает так, как вам нужно!

          1. eika-inc

            Андрей, спасибо!

            1. В вашей версии скрипта disable/enable соединения при отсутствии дефолтного маршрута тоже нет. Вы ребутаете там Микротик как я помню.

            2. Согласен, что если трафик мелкий, то тоже можно ребутать модем по питани.. Хотя у меня была проблема полной потери линка, а не падения скорости. Но все же ребутать модем по питанию — лучший вариант. Ничего модему не будет от того, что его 2 раза в неделю ребутают. Их руками дергают по 8 раз в день и ничего. Но при ребуте мдема по питанию лечатся сразу все проблемы — запуск на другом (самом скоростном) стандарте сотовой связи, глюки биллинга (возобновление работы после финблокировки), глюки при общении с роутером, выемка симки и так далее. Про разрыв PPP куда менее эффективен и гарантированно не лечит половину из этих проблем.

  4. eika-inc

    Вот моя версия скрипта.

    Взял за основу труд Андрея, убрал проверку WLAN (мне он некритичен), заменил ребут роутера на снятие/подачу питания с USB-порта при пропаже маршрута по-умолчанию и сделал перевод кириллицы на английский, чтобы знаки вопроса в Микротике не раздражали.

    Скрипт по ссылке http://www.netfiles.ru/share/linked/MikroTik-USB-Modem-Script-V2.txt

    Теперь модем при отвале от сети (например, выемкой симки), прекрасно находит сеть опять. С оригинальным скриптом модем оставался в оффлайне навсегда (короткие зеленые моргания) и бесцельно ребутался в 5-минутном цикле.

  5. OpenIDUser

    Скрипт перестал работать на актуальной версии RouterOS. Результат вывода дебага понять не могу — в смысле, не пойму как именно дебаг указывает на проблемы. Кто сможет помочь?

      1. OpenIDUser

        В смысле, какая? Весь текст вашего скрипта и печатается от начала и до конца, только с раскраской, в которой я не вижу проблем (или не знаю как смотреть). Вы сами пробовали на 6.41? Или может есть способ расширить вывод информации об ошибках скриптов в логи?

          1. OpenIDUser

            А скрин, который я привел выше, думаете не из консоли, а из Игр разума? Из того, что мне подсказали на другому форуме — в скрипте есть пробелы после do и отсутствующий знак =, что является нарушением современного синтаксиса. Признавайтесь, не вы писали?

          2. OpenIDUser

            Теперь синтаксис do пофиксен, но скрипт по-прежнему не работает. Вот исправленный код с убранными комментариями для компактности: http://www.netfiles.ru/share/linked/MikroTik-USB-Modem-Script-Vtest.txt

            Email в свойствах Микротика настроен верно, оттуда все ходит норм.

            Попробуйте, пожалуйста, у себя, и увидите, что он не работает (CPU Load и скорости на порту нарочно выставлены в невозможные значения).

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