Механизм резервирования основного канала, при наличии второго (например, 3G или ADSL), на Mikrotik можно организовать по разному. Существует возможность сделать все без скриптов, но с некоторыми ограничениями, так же можно сделать многоуровневую проверку в скрипте и поставить это скрипт в планировщик (или использовать Tools / Netwatch).
Исходные данные.
При недоступности шлюза основного канала, Микротик направит пакеты через резервный.
При возникновении второго варианта, микротик будет “думать” что все хорошо (ping до шлюза проходит) и будет слать все пакеты через него. Поэтому решать проблему необходимо шире, в чем помогут скрипты.
Если вы настраиваете маршрутизатор удаленно помните: “Удаленная настройка Firewall – к выезду”. Поэтому не забывайте нажать кнопку Safe Mode в Winbox. Этот механизм отменит все изменения с момента активации режима Safe Mode, в случае если ваша сессия Winbox отвалится.
В своем решении я не меняю метрики маршрутов а просто включаю/отключаю резервный маршрут, который имеет меньшую метрику чем основной канал.
Первым делом регистрируем маршруты (IP / Routes) для контрольных точек с метрикой (distance) = 1. Это необходимо чтобы к указанным контрольным точками трафик шел только через основного провайдера.
аналогично по второй контрольной точке.
/ip route add distance=1 dst-address=10.0.0.1/32 gateway=<primary_chanel>
/ip route add distance=1 dst-address=77.88.8.1/32 gateway=<primary_chanel>
У меня две контрольные точки: 1. коммутатор провайдера (10.0.0.1), которые я пингую оперативно (каждую секунду), 2. внешний надежный сервер (77.88.8.1), по которому проверяю что инфраструктура провайдера работает, но не работает канал провайдера (раз в 30 секунд, т.к. это значительно реже).
Далее меняем основные метрики каналов на 3 (distance = 3).
Далее добавляем отключенный (disable) маршрут 0.0.0.0/0 с метрикой 2 с шлюзом резервного канала. Именно этот маршрут мы будем включать или отключать.
/ip route add comment=Overrided disabled=yes distance=2 gateway=<reserve_gateway>Комментарий “Overrided” понадобится нам для того чтобы идентифицировать маршрут.
Для проверки доступности используем Netwatch. Создаем их 2 штуки (Tools / Netwatch):
Каждую секунду проверяет доступность коммутатора/шлюза провайдера:Сценарий 1. Все нормально.
Netwatch 1 = OK -> Включаем основной канал -> Включаем Netwatch 2 -> Netwatch 2 = OK -> Резервный канал отключен.
Сценарий 2. Шлюз доступен, но интернет не работает (сбой выше провайдера).
Netwatch 1 = OK -> Включаем Netwatch 2 -> Netwatch 2 = FAIL -> Резеврный канал включен.
Сценарий 3. Шлюз не доступен.
Netwatch 1 = FAIL -> Выключаем Netwatch 2 -> Резеврный канал включен.
На состояния резервного канала мы не смотрим, т.к. если он тоже отвалился то переключение на него ничего плохого не сделает – как не было Интернета так и не будет.
Использование netwatch упрощает скрипты, т.к. они работают не периодически (через Scheduler), а по событиям “On down”/ “On up”