Скрипт для Микротика - мониторинг интернета и внешних узловДобрый день, дорогие читатели!

Кто то из вас мог уже прочитать мою предыдущую статью, где я представил скрипт для роутеров MikroTik на базе RouterOS для мониторинга подключенного ПК и перезагрузки LAN порта в случае необходимости. Сегодня речь пойдет о мониторинге домашнего интернета и любого внешнего узла, например вашего сервера, причем с оповещением по СМС или в Телеграм.

Для начала рассмотрим скрипт по частям:

Здесь мы объявили глобальные переменные - IP публичного Google DNS, IP вашего сервера, время и шаблоны текстов для СМС. Для мониторинга интернета вы можете использовать любой DNS - просто замените IP. Также вам нужно заменить IP 0.0.0.0 на IP вашего сервера.

Здесь пингуется DNS и если он недоступен, переменная отсутствия интернета принимает значение true и пишется запись в лог.

Далее, если пинг DNS успешено, но до этого не был успешен, переменная изменяет значение и делается запись в лог INTERNET is UP.

В коде выше начинается самое интересное - если DNS доступны, т.е. интернет есть, но ваш сервер не пингуется, то в лог пишется сообщение, а вам отправляется СМС. Здесь вам нужно заменить 0.0.0.0 на IP вашего сервера, YOUR_API_KEY на ваш API ключ на сайте SMS.RU и 79012345678 на ваш номер телефона. После регистрации на сайте SMS.RU вы получите свой API ключ и сможете бесплатно отправлять 5 СМС в день на свой номер телефона (тот, который использовали для регистрации). Очень полезный сервис.

Кстати строка текста сообщения не поддерживает пробелы, так что в переменных downsms и upsms используйте знак "+" вместо пробела, как показано в коде моего скрипта. При этом на телефон вам будет приходить СМС с пробелами, вместо знака "+".

В последней части кода, если ваш сервер был недоступен (глобальная переменная помнит об этом), но снова стал пинговаться, отправляется СМС на ваш номер с оповещением об этом событии. Что тут нужно заменить вы уже знаете.

Для использования оповещения в Телеграм вместо СМС, вам просто необходимо создать бота, получить chat_id с вашим аккаунтом и вместо запроса к API сервиса SMS.RU прописать запрос к API Телеграм бота:

Более детально процесс создания бота в Телеграм для использования в роутерах Микротик описан в этой статье.

Полный текст скрипта:

Если у вас несколько серверов, вы можете разделить скрипт и сделать один скрипт для мониторинга домашнего интернета с логированием на роутере и другой скрипт для мониторинга IP адресов ваших серверов. Для удобства используйте циклы и массивы.

Полный текст скрипта после редактирования добавляете в System->Scripts и даете ему название. Для запуска скрипта каждую минуту или другой удобный вам промежуток времени добавляете его в System->Scheduler.

В On Event пишете:

где inet-vds - название вашего скрипта, указанное в System->Scripts.

P.S. Как вы понимаете, Микротик не может отправить вам СМС, о том что пропал интернет, ведь интернета нет и к API SMS.RU обратиться не получится. Вы можете дописать в скрипт  сохранение времени, когда интернет пропал в глобальную переменную и отправку СМС после появления интернета, с указанием промежутка времени, когда интернет отсутствовал. Но я предпочитаю мониторить домашний интернет с оповещением по СМС со своего VDS, ведь это удобно: Микротик мониторит VDS, а VDS мониторит Микротик. В этом случае вы 100% будете мгновенно оповещены о проблемах. Об этом я напишу в следующей статье.

11 комментариев MikroTik — скрипт мониторинга интернета и внешних узлов с оповещением

  1. Сергей Серков - 18.12.2017 - 12:00 Ответить

    Строки такого вида, использованные в Ваших скриптах, теперь в Микротик (в новых версиях ROS по крайней мере) не работают.

    /tool fetch url=»http://sms.ru/sms/send?api_id=YOUR_API_KEY&to=79012345678&text=test sms»

    Для отправки SMS нужно к обращаться методом POST типа:
    /tool fetch url=»http://sms.ru/sms/send?api_id=YOUR_API_KEY» http-method=post http-data=»&to=79012345678&text=test SMS»

    Проверено ! Переработайте скрипты.

    • Alexell - 22.12.2017 - 20:48 Ответить

      В 6.41 что ли? Потому что у меня версия 6.40.4 (stable), весь код копировал из рабочих скриптов своего Микротика, т.е. все слово в слово как здесь, так и у меня в Микротике. По сей день все работает.

  2. Сергей Серков - 18.12.2017 - 12:02 Ответить

    Да и знак вопроса в строке URL нужно экранировать !

  3. Дмитрий - 13.02.2018 - 09:01 Ответить

    Здравствуйте!
    Напишите пожалуйста для примера проверку/опрос хотя бы двух устройств в локальной сети, что бы по образцу можно было добавлять столько сколько необходимо. Совсем не силен в программировании, тем более циклов и массивов :))

    • Alexell - 15.02.2018 - 12:45 Ответить

      Здравствуйте. Похоже вы не к той статье коммент оставили. Эта о мониторинге внешних узлов.

      • Дмитрий - 16.02.2018 - 10:44 Ответить

        К этой самой 🙂
        Там где вы пишите для удобства можете разделить и т.д.
        Скрипту работает у меня, но только по одному адресу, а как проверять сразу несколько адресов ?

        • Alexell - 18.02.2018 - 21:44 Ответить

          С циклами в скриптах для Микротика я и сам толком не работал, так что «неизвестное» число внешних узлов пинговать скриптом не смогу.
          Набросал «методом копипаста» на скорую руку скрипт, проверяющий 3 ip адреса: https://alexell.ru/files/mikrotik-script.txt
          P.S. Работу скрипта не проверял, но по идее должен работать.

  4. Дмитрий - 22.02.2018 - 10:27 Ответить

    Большое спасибо, все работает

  5. Сергей - 12.04.2018 - 05:40 Ответить

    Спасибо!

  6. Александр - 13.08.2018 - 01:14 Ответить

    Доброго дня!
    Не знаю, я к той теме или не к той…
    Настроили в школе hotspot с авторизацией по звонку, со многими вопросами разобрались, но остались некоторые нюансы. В настройках не предусмотрена система оповещения в случае отсутствия интернета, а пропадет он у нас довольно часто — провайдер самый дешевый, а потому не самый лучший. СМС и прочие дистанционные решения не рассматриваем, хотим прикрутит сообщение на экран «ИНТЕРНЕТА НЕТ — ЗВОНИТЬ ПРОВАЙДЕРУ», в случае физического отсутствия интернета. Но не знаем как это сделать. Пробовали в файле login.html прикрутить скрипт с запуском картинки на этот случай… Но, то ли скрипт не правильно сделали, то ли микрот не распознает его, в общем ничего сделать так и не смогли.
    Может подскажите решение?

    • Alexell - 13.08.2018 - 21:59 Ответить

      Такое мне реализовывать не приходилось. Но насколько я понимаю, это можно реализовать с помощью Webproxy и редиректа на страницу ошибки, которую разместить можно прямо на Микротике.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *