Проверка интернета в RouterOS 7 должна отличать доступность отдельного адреса от работоспособности нужного сервиса. Поэтому статья сочетает маршрутизацию, несколько целей и проверки выше уровня ICMP.
Скрипт и Netwatch выполняются с определёнными правами. Перед автоматическим переключением маршрута проверьте таблицу, адрес источника и поведение при частичном отказе.

Подготовка
Я предполагаю, что вы уже настроили несколько провайдеров в соответствии с моими предыдущими статьями:
- Небольшую часть для седьмой версии по этой статье.
- Основную часть для шестой версии и выше согласно этой статье.
Хотя важно не столько то, какие именно статьи вы использовали для настройки, сколько то, чтобы трафик всегда отправлялся с IP-адреса первого провайдера и через интерфейс этого провайдера, даже если провайдер недоступен. Для этого необходимо создать правило маршрутизации с действием lookp-only-in-table.
Проверка
При выборе метода проверки доступности интернета необходимо учитывать несколько факторов. Важно отметить, что использование ICMP для этой цели может быть неэффективным, особенно на примере провайдера MTS, который сохраняет доступность хостов по протоколу ICMP даже при отключении интернета через биллинговую систему.
Кроме того, при проведении проверок следует исключить сайты и IP-адреса социально значимых отечественных ресурсов. По общепринятым стандартам, провайдеры обязаны предоставлять доступ к таким ресурсам даже в случае неоплаты услуг интернета. Однако, комментарии и дополнения по этому поводу приветствуются в разделе комментариев.
Также необходимо учитывать возможное перенаправление веб-трафика на заглушку при блокировке интернета из-за неуплаты. Иногда также может происходить подмена сертификатов для HTTPS-сайтов, что также необходимо учитывать при проверке доступности интернета.
Хотя в RouterOS есть встроенное средство detect-internet, которое можно было бы использовать для этих целей, многие предпочитают не полагаться на него из-за недавних проблем, включая длительное недоступность в облаке в 2020 году и некоторые национальные ограничения.
В конечном счете, стоит помнить, что с 100% уверенностью определить наличие интернета невозможно. Интернет представляет собой децентрализованную сеть, доступ к которой может быть затруднен по разным причинам, включая технические сбои, блокировки узлов и проблемы с маршрутизацией.
Netwatch
Мы будем использовать утилиту netwatch для определения доступности хостов. Важно отметить, что данная утилита не позволяет указывать доменные имена или пути при проверке HTTP/HTTPS, что уменьшает гибкость.
Мы будем проверять доступность NS-серверов крупных регистраторов и хостинг-провайдеров, так как они используют порт 53 для репликации зон через TCP.
/tool netwatch
add src-address=88.88.88.2 port=53 interval=1m type=tcp-conn thr-tcp-conn-time=1s disabled=no comment=ns1.reg.ru host=176.99.13.13
add src-address=88.88.88.2 port=53 interval=1m type=tcp-conn thr-tcp-conn-time=1s disabled=no comment=ns9.nic.ru host=31.177.85.186
add src-address=88.88.88.2 port=53 interval=1m type=tcp-conn thr-tcp-conn-time=1s disabled=no comment=ns3.hostland.ru host=81.95.18.26
add src-address=88.88.88.2 port=53 interval=1m type=tcp-conn thr-tcp-conn-time=1s disabled=no comment=ns2.yandex.ru host=93.158.134.1
88.88.88.2 — это адрес вашего провайдера, который необходимо указать. С помощью PBR вы должны направить трафик с этого IP-адреса через интерфейс первого провайдера. Каждый хост имеет комментарий, поясняющий его назначение. Обратите внимание, что нет скриптов, выполняющихся при изменении статуса.
add src-address=88.88.88.2 port=80 interval=1m type=http-get thr-http-time=1s disabled=no http-codes=503 comment=cbr.ru host=185.178.208.7
add src-address=88.88.88.2 port=80 interval=1m type=http-get thr-http-time=1s disabled=no http-codes=302 comment=moex.com disabled=no host=85.118.181.8
Также мы добавим пару проверок HTTP. Для этого я выбрал сайт Центрального банка России и Московской биржи. По умолчанию Центральный банк возвращает ошибку 503, если не указано доменное имя, а Московская биржа делает редирект на страницу HTTPS при коде ответа 302. Если провайдер сделает подмену на заглушку, ответ скорее всего будет 200.
Скрипт
Приведу сразу скрипт целиком, и в него помещу комментарии, добавите данный скрипт в cron.
# Настройки
:local myip "88.88.88.2";
:local RouteComment "checkinternet";
# Определяем общееколичество правил netwatch включенные и указанные адрес источника
:local NetWatchCountAll [/tool/netwatch/print count-only where src-address=$myip disabled=no];
# Определяем количество правил в статусе UP
:local NetWatchCountUp [/tool/netwatch/print count-only where src-address=$myip disabled=no status=up];
# Определяем количество правил в статусе Down
:local NetWatchCountDown [/tool/netwatch/print count-only where src-address=$myip disabled=no status=down];
# Опредяем количество маршрутов с коментарием $RouteComment
:local RouteCount [/ip/route/print count-only where comment=$RouteComment]
# Опредяем количество маршрутов с коментарием $RouteComment и дистанцией 254
:local RouteBadDistanceCount [/ip/route/print count-only where comment=$RouteComment distance=254]
#Проверка загрушка, на тот случай если все правила ктото выключит или удалит из netwatch
:if ($NetWatchCountAll = 0) do={
# Останавливаем выполнения скрипта
:error "Netwatch Count Null"
}
# Если количество правил netwatch ровно количеству правил в статусе down (т.е. все) и маршруты с коментарием $RouteComment и дистанцией меньше чем 254 меньше чем кол-во маршрутов с коментарием (т.е не все) то:
:if ($NetWatchCountAll = $NetWatchCountDown and $RouteBadDistanceCount < $RouteCount) do={
# для маршрутов с коментарием $RouteComment и дистанцией меньше чем 254 установить значение дистанции 254
/ip/route/set distance=254 [find comment=$RouteComment distance<254];
# Удаляем соединения из connection-tracker которые попали под snat и не имеют марки соединения.
/ip/firewall/connection/remove [find connection-mark="" srcnat ];
# Останавливаем выполнения скрипта
:error "ISP down"
}
# Если количество правил netwatch со статусом up больше нуля
:if ($NetWatchCountUp > 0) do={
# для маршрутов с коментарием $RouteComment и дистанцией больеш чем 10 установить значение дистанции 10
/ip/route/set distance=10 [find comment=$RouteComment distance>10]
# Удаляем соединения из connection-tracker которые попали под snat и не имеют марки соединения.
/ip/firewall/connection/remove [find connection-mark="" srcnat ]
# Останавливаем выполнения скрипта
:error "ISP up"
}
Если все проверки находятся в состоянии “down”, мы устанавливаем значение дистанции маршрута с комментарием “checkinternet” на 254, и наоборот — если хотя бы одна проверка находится в состоянии “up”, для всех таких маршрутов устанавливаем значение дистанции на 10.
Итог
Netwatch – мощный инструмент в операционной системе RouterOS от MikroTik, который предназначен для мониторинга состояния сетевых соединений. С помощью Netwatch администраторы сети могут автоматизировать процессы мониторинга и реакции на изменения в состоянии доступности устройств или сервисов.
При конфигурации Netwatch крайне важным является корректное указание адреса источника (src-address), с которого будет инициирована проверка доступности. Это должен быть локальный IP-адрес, на который настроен интерфейс вашего MikroTik устройства. Правильное определение источника позволит точно контролировать работоспособность и доступность сетевых ресурсов.
Система принятия решений о доступности интернета работает на основании агрегации состояний всех активных правил Netwatch. Если все проверки показывают статус “down”, система определяет, что интернет отсутствует. Однако, если хотя бы одна проверка имеет статус “up”, это указывает на наличие активного интернет-соединения, и скрипт считает, что доступ к интернету есть.
Для повышения надёжности мониторинга рекомендуется создавать несколько правил Netwatch, направленных на различные целевые адреса в Интернете. Это могут быть серверы DNS, популярные веб-сайты или другие внешние ресурсы, стабильное соединение с которыми свидетельствует о работоспособности интернет-канала.
Используя возможности Netwatch в RouterOS MikroTik, можно значительно упростить процесс управления сетью, повысить её надёжность и сократить время реакции на возникающие проблемы с доступностью интернета.
Как проверить результат
- Запустите каждую проверку вручную и сверяйте таблицу маршрутизации.
- Сымитируйте отказ DNS, HTTP и основного канала по отдельности.
- Проверьте журнал, задержки переключения и возврат к штатному маршруту.
Источники и связанные материалы
Команды в статье меняют сетевую конфигурацию. Перед работой сохраните экспорт, подготовьте способ восстановления доступа и применяйте изменения сначала в тестовой среде.