- PVSM.RU - https://www.pvsm.ru -

Mikrotik: автоматическое переключение канала на резервный и обратно

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

Что я хотел сделать, если отключается основной канал Интернета:
1. Переключиться на резервный канал (после «появления», разумеется, вернуться на основной);
2. Отправить уведомление по email о факте изменения состояния.

Кому интересно, прошу под кат.

Нам дано:
— Mikrotik RB450G с прошивкой 5.19 версии;
— 2 порта с Интернетом, один из которых для подключения использует PPPoE соединение.

Сперва добавим 2 скрипта, один из которых будет переключать на резервный канал, а второй вернет подключение к первому.

image

Составим первый скрипт, который будет активировать резервный канал и назовем его "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, которая работает как тригер. То есть, если состояние подключение изменится, то сменится и статус с выполнением нужных нам скриптов.

image

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

image

Дальше следует завершающий шаг — проброс маршрута. Если этого не сделать, то скрипт сработает на переключение к резервному каналу и останется в данном положении. Обратный переход будет возможен если резервный канал «упадет».

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

image

Всё!

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

Profit!

Автор: Helldar

Источник [1]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/setevy-e-tehnologii/66274

Ссылки в тексте:

[1] Источник: http://habrahabr.ru/post/231565/