mikrotik переключение на резервный канал без скриптов
Mikrotik: автоматическое переключение канала на резервный и обратно
Написать данный пост меня сподвигла ситуация с отключением одного из каналов Интернета.
В самом же Интернете ответов по данному вопросу много, но не каждый является рабочим.
Что я хотел сделать, если отключается основной канал Интернета:
1. Переключиться на резервный канал (после «появления», разумеется, вернуться на основной);
2. Отправить уведомление по email о факте изменения состояния.
Кому интересно, прошу под кат.
Нам дано:
— Mikrotik RB450G с прошивкой 5.19 версии;
— 2 порта с Интернетом, один из которых для подключения использует PPPoE соединение.
Сперва добавим 2 скрипта, один из которых будет переключать на резервный канал, а второй вернет подключение к первому.
Составим первый скрипт, который будет активировать резервный канал и назовем его «change-to-reserv» и содержать в себе код:
Следующей строкой в этом же скрипте укажем:
Переключение линии на резервный канал
Дата: jul/30/2014
Время: 10:52:13
В итоге, наш скрипт будет иметь вид (RouterOS 5.19):
И для RouterOS 6.17:
Как уже писал выше, сохраним его под именем «change-to-reserv» и приступим к написанию второго скрипта:
В отличие от первого скрипта, в теле отправляемого 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-адрес о фактах изменения состояния.
ВНИМАНИЕ. Для работы скриптов под управлением RouterOS 6.17 необходимо внести изменения в скрипт отправки email-адреса, а именно убрать параметр «tls=«.
То есть, наш код (например, для переключения на резервный канал) будет иметь вид:
Mikrotik OS и автоматическое переключение на резервный канал
1. Канал Ehernet от NLink втыкается в первый порт роутера, получает IP по DHCP и поднимает pptp соединение, названное nlink. Это будет основное соединение.
2. Канал ADSL от провайдера Домолинк проходит через DLink-2500 в режиме моста и втыкается во второй порт роутера, поверх поднимается pppoe соединение, названное domolink. Это будет резервное соединение.
3. Порты 3-5 роутера используются для подключения устройств локальное сети.
Настройка подключений и маскарадинга для компьютеров локальное сети является тривиальной и детально описана в официальной вики.
При настройке ppp подключений нужно отключить добавление маршрутов по умолчанию, а затем создать статические маршруты разными метриками и подходящими комментариями:
/ip route
add comment=MainGW disabled=no distance=1 dst-address=0.0.0.0/0 gateway=nlink scope=30 target-scope=10
add comment=RsrvGW disabled=no distance=2 dst-address=0.0.0.0/0 gateway=domolink scope=30 target-scope=10
Теперь чтобы переключать каналы достаточно изменять параметр distance. Трафик пойдёт через канал с меньшим значением этого параметра.
Скрипты
Установка глобальных параметров при запуске роутера
Определение IP-адресов интерфейсов
Определение IP-адреса основного интерфейса
Определение IP-адреса резервного интерфейса
Переключение каналов
Скрипт называется connection_check
:global MainIf
:global RsrvIf
:global MainIfAddress
:global RsrvIfAddress
#www.ru
:local PingTarget1 194.87.0.50
#ya.ru
:local PingTarget2 87.250.250.203
#google dns
:local PingTarget3 8.8.8.8
#Check main internet connection
:local MainIfInetOk false;
if ($MainIfAddress=»») do=
#Check reserved internet connection
:local RsrvIfInetOk false;
if ($RsrvIfAddress=»») do=
:put «MainIfInetOk=$MainIfInetOk»
:put «RsrvIfInetOk=$RsrvIfInetOk»
if (!$MainIfInetOk) do= <
/log error «Main internet connection error»
>
if (!$RsrvIfInetOk) do= <
/log error «Reserve internet connection error»
>
:local MainGWDistance [/ip route get [find comment=»MainGW»] distance]
:local RsrvGWDistance [/ip route get [find comment=»RsrvGW»] distance]
:put «MainGWDistance=$MainGWDistance»
:put «RsrvGWDistance=$RsrvGWDistance»
Обратите внимание на пинг через конкретный интерфейс, а так же на критерий признания канала неисправным. Я пингую три разных узла и считаю, что интернет на данном интерфейсе не работает, если приходит меньше 2/3 ответов.
Планировщик
1. Скрипт set_global_parameters запускается один раз при запуске роутера.
2. Скрипты определения IP-адресов запускаются каждые 27 секунд. Такое значение выбрано чтобы минимизировать количество одновременных запусков с основным скриптом.
3. Скрипт connection_check запускается каждую минуту.
2 простых, эффективных Failover на Mikrotik без скриптов
Failover — по русски это резервирование интернет-каналов, переключение в случае падения основного интернет-канала на резервный.
Итак у нас есть Микротик, к нему подключены 2 провайдера (ISP1 и ISP2), и ваша сеть, необходимо при падении основного интернет-канала автоматически переключиться на резервный.
1. Способ, failover делается маршрутами, все что вам надо сделать это прописать два маршрута один к ISP1 и второй к ISP2, выбрав в пункте «Check Gateway» ping или arp. По-моему для большинства случаев больше подойдет пинг. Таким же образом прописываете маршрут ко второму провайдеру. Мне удобнее всего настраивать микротик используя Winbox, маршруты прописываются в меню IP-Routes.
Если в Distance одному провайдеру прописать например 1 а второму 2, то микротик будет автоматически балансировать нагрузку, при полной загрузке первого провайдера новые запросы пойдут ко второму.
Этот способ имеет некоторые ограничения:
— Если один из провайдеров дает вам динамический IP и настройки приходят по DHCP, то вы не сможете прописать маршрут указав имя интерфейса, вам придется вписать в поле «Gateway» ip шлюза.
— Иногда бывают ситуации когда шлюз провайдера работает, а узлы за ним недоступны, Микротик будет считать маршрут рабочим, переключения не произойдет, и интернет работать не будет.
2-й Вариант Failover на Микротике лишенный недостатков первого способа.
В Микротик встроен Netwatch, (находится в меню Tools). Вкратце эта утилита позволяет пинговать какой-либо ip и выполнять команды если меняется доступность ip адреса, в Up — вписываем команды которые выполняются когда ip стал нова доступен, в Down соответственно вписываем команды которые надо выполнить когда ip стал недоступен.
Суть понятна из картинки, жмем синий плюс, вписываем ip по которому будем проверять работоспособность канала, интервал проверки, я ставлю около минуты, можно меньше или больше.
Да, предварительно нужно задать комментарии для маршрутов. Мне удобнее всего настраивать Микротик через Winbox, для задания комментария маршруту заходим в IP-Routes, откроется окно со списком маршрутом, кружком обведена кнопка задания комментария, выделяем нужный маршрут, жмем на кнопку, вписываем комментарий для маршрута, жмем ок.
/ip route set [find comment=»ISP1″] disabled=no
/ip route set [find comment=»ISP2″] disabled=yes
В раздел Down пишем:
/ip route set [find comment=»ISP1″] disabled=yes
/ip route set [find comment=»ISP2″] disabled=no
Для того чтоб схема корректно работало, нужно разрешить пинговать этот ip только с ISP1, для этого желательно добавить правило в IP-Firewall запрещающее доступ к 8.8.4.4 с ISP2, и прописать статический маршрут к 8.8.4.4 через шлюз ISP1 (в штатном режиме так сделать не получится если ISP1 выдает динамический ip и придется писать скрипт, который будет определять ip шлюза и прописывать маршрут ).
Самоучитель по MikroTik – теория и практика в видеоформате.
По видеокурсу «Настройка оборудования MikroTik» вы научитесь настраивать маршрутизатор с нуля для целей небольшого офиса. В основе курса лежит официальная программа MikroTik Certified Network Associate, но она значительно расширена, особенно в части закрепления знаний на практике. В курс входит 162 видеоурока и 45 лабораторных работ, объединенных в техническое задание. Если что-то непонятно, то можно задавать вопросы автору курса. Первые 25 уроков можно посмотреть бесплатно, форма заказа есть на странице курса по MikroTik.
49 комментариев к “2 простых, эффективных Failover на Mikrotik без скриптов”
Админ спасибо все удобно и практично!
У меня вопрос, если у меня 2 статики, от двух провайдеров, мне нужно на резервирование 2й способ юзать?
у меня RB850, os 6.40.3
Если обе статики — без разницы какой использовать. Но я рекомендую второй, он чуть сложнее в настройке но гораздо надежнее, первый способ не сработает если шлюз провайдера будет отвечать на пинги но дальше него пакеты идти не будут. Второй способ проверяет именно работоспособность инета, и если инета нет то переключит на другого провайдера.
День добрый,
Скажите, а можно как то перезагружать микроток после переключения каналов вашим способом? Дело в том, что при данной схеме, после переключения канала, не поднимается регистрация sip телефонов за микротиком. Перезагрузка решает эту проблему.
Можно, посмотрите команду перезагрузки — должно быть что-то вроде reboot и допишите в скрипт.
Но это костыль — я так понимаю нужно инициировать перерегистрацию, лучше поищите как это сделать (наверное надо закрыть имеющиеся соединения Sip или сделать че-то вроде того.)
А если произошла перезагрузка, то скрипт уже не сработает на обратное переключение.
Почему это? Он постоянно переключается на первый канал если тот поднялся. При перезагрузке скрипт обнаружит что первый канал мертв и переключится на второй спокойно, дождется когда поднимется первый и переключится на него. Скрипт обкатан несколько лет в боевых условиях, все ок.
Пару лет назад прочитал эту статью, которая была отправной точкой, привожу свой вариант конфига:
«down»:
/log warning «server 4.2.2.1 fail…»
:local time [/sys clock get time]
:local checkip [/ping 77.88.8.2 count=5]
:if (checkip = 0) do= <
/log error «ISP1 IS DOWN»
/ip route set [find comment=»main»] disabled=yes
/ip route set [find comment=»reserve»] disabled=no
:delay 1
/tool fetch url=»https://sms.ru/sms/send?api_id=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&to=79*********&text=ISP1_IS_DOWN_$time»
:delay 10
/file remove «send?api_id=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&to=79*********&text=ISP1_IS_DOWN_$time»
>
«up»:
/log warning «ISP1 IS UP»
/ip route set [find comment=»main»] disabled=no
/ip route set [find comment=»reserve»] disabled=yes
Резервирование Интернет-канала на Mikrotik
В данной инструкции мы рассмотрим пример настройки двух Интернет-каналов одновременно на роутере Mikrotik с целью отказоустойчивости — при разрыве соединения основной канал будет меняться на резервный. В нашем случае будет задействован один WAN Ethernet, второй — LTE. Итого, два провайдера и две сети.
Есть два способа настройки отказоустойчивости:
Мы рассмотрим оба варианта. Настройки выполним в программе winbox. Настройка в веб-интерфейсе аналогична.
Перед началом, убедитесь, что по отдельности микротик раздает Интернет от обоих провайдеров.
Маршруты с разным приоритетом
Раскрываем в меню IP:
. и переходим в Routes:
Добавляем 2 маршрута. Первый через одного Интернет провайдера со следующими настройками:
* мы указываем шлюз от нашего провайдера (в данном примере 1.1.1.1), задаем настройку проверки шлюза (Check Gateway) с помощью утилиты ping, задаем приоритет (Distance 10).
Для второго провайдера мы задаем, практически, аналогичные настройки:
* обратите внимание, что в отличие от первого маршрута, в данном указана большая дистанция и другой шлюз (для второго провайдера).
После удаляем старые маршруты. Должны остаться только те, что мы добавили.
Использование сценария, запускаемого в Netwatch
Данный метод поможет настроить резервирование канала, если один из провайдеров выдает динамические адреса в разных подсетях, например, подключение через 4G-модем.
1. Задаем описания
Сначала необходимо задать описание для маршрутов. Это понадобиться для сценария, который будет работать с последними через данные описания.
Раскрываем в меню IP:
. и переходим в Routes:
Открываем на редактирование оба маршрута через наших провайдеров и добавляем комментарий в разделе Comment:
2. Настраиваем узел для проверки канала
Мы настроим узел, который будет пинговать провайдер 1. Если пинг пропадает, то необходимо переключать активный Интернет-канал на провайдера 2. Также мы должны заблокировать возможность пинговать проверочный узел с провайдера 2.
И так, переходим к настройке маршрутов:
Добавляем новый маршрут к проверочному узлу, например 77.88.8.2 (DNS Яндекса):
* в данной настройке мы задали маршрут к проверочному узлу через шлюз 1.1.1.1 (в нашем примере это шлюз от провайдера 1).
Создаем новое правило для запрета пинга проверочного узла через провайдера номер 2:
. в качестве действия выбираем drop:
3. Настройка задания в Netwatch
Создаем новое правило. На вкладке Host прописываем следующее:
* в данном примере мы будем проверять узел 77.88.8.2 раз в минуту.
На вкладке Up пропишем:
/ip route set [find comment=»ISP_1″] disabled=no
/ip route set [find comment=»ISP_2″] disabled=yes
. а на вкладке Down следующее:
/ip route set [find comment=»ISP_1″] disabled=yes
/ip route set [find comment=»ISP_2″] disabled=no
Нажимае OK.
Проверка
Для проверки отказоустойчивости лучше всего отключить кабель основного провайдера (вытащить провод из WAN-разъема) — через небольшой промежуток времени Mikrotik должен начать раздавать Интернет второго провайдера. Проверить, что внешний канал изменился можно с помощью различных сайтов, например, 2ip.ru.
Читайте также
Данная информация также может быть полезной:
MikroTik → MikroTik 2 провайдера с автоматическим переключением на резервный канал( MikroTik Failover 2 ISP )
Всех приветствую, решил написать статью, описывающую способ реализации отказоустойчивости на оборудовании Mikrotik.
В одной маленькой конторе, где я подрабатываю, из-за регулярных проблем у провайдера, задумались о подключении второго интернет канала, основного провайдера (не стабильного в последнее время) отключать не хотят, за много лет его использования тариф для фирмы не изменимся, да и скорость отличная, за те деньги + есть внешний IP и сотрудники офиса могут подключаться по VPN к офису, руководство о смене провайдера ничего слышать не хочет, это почти самый центр Москвы и с провайдерами там не очень весело.
Идея была в том что офис будет протянут новый канал и необходимо было реализовать следующую схему,
первый провайдер назовем его ISP1 (Глючный) и ISP2 (не имеет внешнего адреса только серый 10.57.ХХ.ХХ), опишу схему подробнее
ISP1 предоставляет сеть с белым IP который прилетает по DHCP, скорость 100 Мбит/с
ISP2 предоставляет сеть с серым IP адресом находящимся за NAT скорость 30 Мбит/с
Провайдер ISP2 нужен чтобы пересидеть, время недоступности основного канала, а офис мог функционировать с небольшими ограничениями.
Я пробежался по готовым статьям и не нашел того решения что меня устраивало на 100%, вот я и решил поделиться
своей наработкой с общественностью.
Я опишу свой способ, который без проблем работает как у 2х провайдеров которые выдают IP адреса по DHCP, так и у 2х провайдеров которые раздают статические адреса, как вы просчитали выше, у меня 2 сети- одна сеть конфигурируируется по DHCP, а вторая — статические адреса.
Данная схема, отработала уже более 2х лет, статистика сипользования
переключений в неделю — в среднем 3
среднее время использование резервного канала 12 мин
В качестве примера, для обозначения шлюзов я буду использовать эти, выдуманные мной адреса, вам их необходимо заменить на свои.
ISP1 шлюз 777.777.777.777
ISP2 шлюз 888.888.888.888
В качестве подготовки
Я не буду останавливаться на настройке маршрутизатора, пример настройки можно посмотреть в статье: Настройка MikroTik RouterBoard RB951G-2HnD, а перейдем сразу к делу.
Для начала переходим в меню настройки сетевых интерфейсов, интерфейс ether1 подключенный к провайдеру ISP1, мы переименуем в ether1-ISP1, чтобы было понятно за что он отвечает
Сетевой интерфейс ether2 подключен у нас к провайдеру ISP2, назовем его ether2-ISP2
Поступим с ним аналогичным образом.
Кратко опишу процесс работы по проверке работы канала и алгоритма переключения на резервный канал и обратно.
Выбираем IP адрес в интернете, с высокой степенью доступности, в качестве примера, буду использовать IP 8.8.8.8
Создаем правило фаерволла, которое разрешает прохождение пакетов только через основной канал с интерфейсом подключенным в ISP 1, в случае переключения на резервный канал, пакеты будут пытаться отправляться через новый маршрут по умолчанию, вот тут вступает правило фаерволла, которое прямо запрещает прохождение пакетов от маршрутизатора через интерфейс подключенный к ISP 2.
1 Настраиваем Firewall
Переходим в IP->Firewall и создаем правило, запрещающее отправку пакетов через ISP2
Где
Chain: output — указываем правило, которое применяется для исходящих пакетов от маршрутизатора.
Dest address: 8.8.8.8 — IP адрес, пакеты адресованные которому, будут подпадать под это правило.
ether2-ISP2 — Интерфейс, для которого применяется это правило.
Теперь нам надо перейти в во кладку Action, тут мы указываем что делать с пакетом, в нашей ситуации мы его выбрасываем
Action: Drop
Жмем OK и сохраняем изменения.
2 Настраиваем маршрутизацию
Переходим в IP-> Routers и видим примерно такую таблицу маршрутизации, IP основного канала ISP1 я закрасил, серыйе адреса второго провайдера я оставил.
Из скриншота мы видим что маршрутом по умолчанию 0.0.0.0/0 у нас является интерфейс подключенный к провайдеру ISP1, вот этим параметром мы и будем управлять, перенося его с одного интерфейса на другой.
Нам необходимо создать маршрут к IP 8.8.8.8 пакеты к которому, от маршрутизатора, будут идти только через ISP1
Жмем + и добавляем новый маршрут как на скришшоте
Для чего это все нужно?
Система будет проверять доступность этого IP адреса, через провайдера ISP1, если этот адрес не доступен, выполняется переключение на резервный канал, при этом система будут продолжать, с определенной периодичностью, пытаться достучаться до адреса 8.8.8.8, через провайдера ISP1. Тут возникает закономерный вопрос, а почему не проверять доступность шлюза провайдера?!
Бывают ситуации, что сеть провайдера работает нормально, а вот дальше, пакеты уже не летят, тогда не произойдет переключения на резервный канал и все будут сидеть без интернета, по этой причине необходимо проверять доступность адресов именно в глобальной сети!
3 Настраиваем Netwatch
Теперь настраиваем проверку и переключение на резервный канал, для этого, в RouterOS есть штатная утилита, которая называется Netwatch, она и будет проверять, с заданной периодичностью, состояние канала.
Переходим во вкладку DOWN
Эта команда будет выполнена в случае недоступности IP адреса
Жмем OK, в списке у нас появится правило:
Где будет указывать интервал проверки, который мы задали, 3 мин, таймаут проверки 1000 мс или 1 сек и состояние UP, также дата и время последнего изменения состояния.
4 Тестирование
Это важный этап проверки работоспособности данной схемы!
Нам необходимо проверить работу системы переключения на резервный канал и возвращение на основной.
Нужно зайти в настройки сетевых интерфейсов Interfaces и выключить сетевой интерфейс ether1-ISP1 подключенный к ISP1
Открыв окно, netwatch, где можно наблюдать, как система запустит проверку и обнаружит что канал провайдера ISP1 не доступен, статус изменится на down и шлюзом по умолчанию, станет шлюз провайдера ISP2 888.888.888.888
На перестройку таблицы маршрутизации уходит примерно 30 сек, после этого интернет опять начинает работать. Можно зайти например на сайт 2ip.ru и увидеть что у вас IP адрес резервного провайдера.
Чтобы все вернуть обратно, просто включаем интерфейс ether1-ISP1, через 3 мин система обнаружит что доступ к IP 8.8.8.8 восстановлен и можно переключать на основной канал, сделав шлюзом, по умолчанию, шлюз провайдера ISP1 777.777.777.777
Снова заходим на 2ip.ru и видим что теперь у нас IP выданный провайдером ISP1
В общем решение получилось очень простым и за время использования, показало свою пригодность для использования.
Думаю, статью на этом можно завершить, на благодарю тех кто смог дочитать ее до конца…