[recovery mode] Mikrotik и переключение трафика на резервный и обратно
Написать данный пост меня сподвигла ситуация с отключением одного из каналов Интернета.В самом же Интернете ответов по данному вопросу много, но не каждый является рабочим.Что я хотел сделать, если отключается основной канал Интернета:1. Переключиться на резервный канал (после «появления», разумеется, вернуться на основной);2. Отправить уведомление по email о факте изменения состояния.
Кому интересно, прошу под кат.
Нам дано: — Mikrotik RB450G с прошивкой 5.19 версии; — 2 порта с Интернетом, один из которых для подключения использует PPPoE соединение.
Сперва добавим 2 скрипта, один из которых будет переключать на резервный канал, а второй вернет подключение к первому.

Составим первый скрипт, который будет активировать резервный канал и назовем его «change-to-reserv» и содержать в себе код:
/tool e-mail send server=192.168.1.1 port=25 user=robot@mysite.ru password=1PaSsW0rD1 tls=no to=admin@mysite.ru from=robot@mysite.ru \ subject=«MikroTik: $[/system clock get date], $[/system clock get time]» \ body=«Переключение на резервный канал\nДата: $[/system clock get date]\nAВремя: $[/system clock get time]»; где:/tool e-mail send — отправляем уведомление на email администратора о факте изменения статусаserver=192.168.1.1 — SMTP-сервер. Так как у нас используется свой, указываю его; port=25 — в версии RouterOS 5.x порт указывается отдельно. В нашем случае он по-умолчанию 25; user=robot@mysite.ru — логин пользователя для авторизации на SMTP-сервере (если требуется); password=1PaSsW0rD1 — указываем пароль (если требуется); tls=no — TLS-шифрование трафика. У нас нет, ставлю «no», а если и будет — «yes»; to=admin@mysite.ru — на какой email-адрес будет приходить уведомление; from=robot@mysite.ru — от кого будет приходить уведомление (в моем случае совпадает с логином авторизации); subject=«MikroTik: $[/system clock get date], $[/system clock get time]» — указываем заголовок письма. В данном случае он будет иметь вид «MikroTik: jul/30/2014, 10:52:13» (дата и время отправки сообщения); body=«Переключение на резервный канал\nДата: $[/system clock get date]\nAВремя: $[/system clock get time]»; — соответственно, само тело сообщения, которое будет иметь вид: Переключение линии на резервный каналДата: jul/30/2014Время: 10:52:13
Следующей строкой в этом же скрипте укажем:
/ip route disable [find dst-address=0.0.0.0/0 and gateway=pppoe-main]; То есть, при обнаружении отсутствия пинга на сервер (об этом чуть позже) мы будем выключать маршрут с шлюзом, указывающим на «pppoe-main».В итоге, наш скрипт будет иметь вид:
/tool e-mail send server=192.168.1.1 port=25 user=robot@mysite.ru password=1PaSsW0rD1 tls=no to=admin@mysite.ru from=robot@mysite.ru \ subject=«MikroTik: $[/system clock get date], $[/system clock get time]» \ body=«Переключение на резервный канал\nДата: $[/system clock get date]\nAВремя: $[/system clock get time]»; /ip route disable [find dst-address=0.0.0.0/0 and gateway=pppoe-main]; Как уже писал выше, сохраним его под именем «change-to-reserv» и приступим к написанию второго скрипта:
/tool e-mail send server=192.168.1.1 port=25 user=robot@mysite.ru password=1PaSsW0rD1 tls=no to=admin@mysite.ru from=robot@mysite.ru \ subject=«MikroTik: $[/system clock get date], $[/system clock get time]» \ body=«Переключение на основной канал\nДата: $[/system clock get date]\nAВремя: $[/system clock get time]»; /ip route enable [find dst-address=0.0.0.0/0 and gateway=pppoe-main]; В отличие от первого скрипта, в теле отправляемого email-сообщения мы укажем «Переключение на основной канал» и включим раннее отключенный маршрут.Сохраним наш скрипт под именем «change-to-main».Так как память у Mikrotik не резиновая, мы оптимизируем наш скрипт для выполнения поставленной задачи.Для этого нам необходимо использование утилиты Netwatch, которая работает как тригер. То есть, если состояние подключение изменится, то сменится и статус с выполнением нужных нам скриптов.

В Netwatch мы добавим новое правило, где укажем хост 8.8.8.8 и имена скриптов во вкладках «Up» — «change-to-main» и «change-to-reserv» во вкладке «Down» соответственно.Также следует указать период проверки состояния. У нас указана 1 минута.

Дальше следует завершающий шаг — проброс маршрута. Если этого не сделать, то скрипт сработает на переключение к резервному каналу и останется в данном положении. Обратный переход будет возможен если резервный канал «упадет».
В общем, добавляем маршрут с указанием следующих данных: Dst. Address = 8.8.8.8 // Указываем, что будем пинговать DNS-сервер Гугла (для меня не критично, указываю его); Gateway = pppoe-main // То самое PPPoE-соединение на основной каналDistance = 1Остальные параметры оставляем как есть.

Всё!
Отныне принцип работы следующий: Netwatch через основной канал будет проверять пинг до DNS-сервера Google. Как только пинг пропадет, выполнится скрипт «change-to-reserv», указанный на вкладке «Down». Данный скрипт отключит основной маршрут (PPPoE) и все пакеты будут идти по резервному каналу. Как только пинг по основному каналу возобновится, скрипт вновь активирует маршрут основного канала (параметр Distance которого, разумеется,»1», а резервного — »2»). Вместе с этим будут приходить уведомления на email-адрес о фактах изменения состояния.
Profit!
