2 простых, эффективных Failover на Mikrotik без скриптов

Автор: | 19.05.2014

Failover — по русски это резервирование интернет-каналов, переключение в случае падения основного интернет-канала на резервный.

Итак у нас есть Микротик,  к нему подключены 2 провайдера (ISP1 и ISP2), и ваша сеть, необходимо при падении основного интернет-канала автоматически переключиться на резервный.

1. Способ, failover делается маршрутами, все что вам надо сделать это прописать два маршрута один к ISP1 и второй к ISP2, выбрав в пункте «Check Gateway» ping или arp. По-моему для большинства случаев больше подойдет пинг. Таким же образом прописываете маршрут ко второму провайдеру. Мне удобнее всего настраивать микротик используя Winbox, маршруты прописываются в меню IP-Routes.

failover на микротик

Если в Distance одному провайдеру прописать например 1 а второму 2, то микротик будет автоматически балансировать нагрузку, при полной загрузке первого провайдера новые запросы пойдут ко второму.

Этот способ имеет некоторые ограничения:

— Если один из провайдеров дает вам динамический IP и настройки приходят по DHCP, то вы не сможете прописать маршрут указав имя интерфейса, вам придется вписать в поле «Gateway» ip шлюза.
— Иногда бывают ситуации когда шлюз провайдера работает, а узлы за ним недоступны, Микротик будет считать маршрут рабочим, переключения не произойдет, и интернет работать не будет.

2-й Вариант Failover на Микротике лишенный недостатков первого способа.

В Микротик встроен Netwatch, (находится в меню Tools). Вкратце эта утилита позволяет пинговать какой-либо ip и выполнять команды если меняется доступность ip адреса, в Up — вписываем команды которые выполняются когда ip стал нова доступен, в Down соответственно вписываем команды которые надо выполнить когда ip стал недоступен.

Суть понятна из картинки, жмем синий плюс, вписываем ip по которому будем проверять работоспособность канала, интервал проверки, я ставлю около минуты, можно меньше или больше.

Да, предварительно нужно задать комментарии для маршрутов. Мне удобнее всего настраивать Микротик через Winbox, для задания комментария маршруту заходим в IP-Routes, откроется окно со списком маршрутом, кружком обведена кнопка задания комментария, выделяем нужный маршрут, жмем на кнопку, вписываем комментарий для маршрута, жмем ок.

Простой и эффективный файловер на Микротик

На картинке видно работу скрипта, маршрут к провайдеру ISP2 (У меня это Utel) не активен, он серого цвета, а маршрут к ISP1 (у меня Stels) активен. Ниже можно увидеть маршрут с комментарием Stels88, это нужно чтоб пинги к 8.8.4.4 который мы используем в скриптах шли только с ISP1, это нужно для контроля работоспособности ISP1, пинги идут  -все  впорядке, если ответов на пинги нет, то надо переключаться на ISP2. Как это делается видно на картинке ниже:

Файловер на микротик

 

В раздел UP пишем:

/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 шлюза и прописывать маршрут ).

2 простых, эффективных Failover на Mikrotik без скриптов: 49 комментариев

  1. Anton

    Админ спасибо все удобно и практично!
    У меня вопрос, если у меня 2 статики, от двух провайдеров, мне нужно на резервирование 2й способ юзать?
    у меня RB850, os 6.40.3

    1. admin Автор записи

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

  2. Алексей

    День добрый,
    Скажите, а можно как то перезагружать микроток после переключения каналов вашим способом? Дело в том, что при данной схеме, после переключения канала, не поднимается регистрация sip телефонов за микротиком. Перезагрузка решает эту проблему.

    1. admin Автор записи

      Можно, посмотрите команду перезагрузки — должно быть что-то вроде reboot и допишите в скрипт.

      Но это костыль — я так понимаю нужно инициировать перерегистрацию, лучше поищите как это сделать (наверное надо закрыть имеющиеся соединения Sip или сделать че-то вроде того.)

  3. Антон

    А если произошла перезагрузка, то скрипт уже не сработает на обратное переключение.

    1. admin Автор записи

      Почему это? Он постоянно переключается на первый канал если тот поднялся. При перезагрузке скрипт обнаружит что первый канал мертв и переключится на второй спокойно, дождется когда поднимется первый и переключится на него. Скрипт обкатан несколько лет в боевых условиях, все ок.

  4. HawK

    Пару лет назад прочитал эту статью, которая была отправной точкой, привожу свой вариант конфига:
    «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

    Для повышения точности проверки доступности интернета, для исключения ложных переключений, например, при возможных проблемах на опрашиваемой стороне или кратковременных сбоях в сети, потерянных пакетах и т.п. — используется 2 независимых адреса — 4.2.2.1 и 77.88.8.2. Адрес 4.2.2.1 — указывается в настройках хоста Netwatch, если пинга нет — начинает работать «down», который делает 5 попыток пинга к 77.88.8.2 и если все 5 попыток также неудачны — скрипт продолжает работу т меняет маршруты, первая удачная попытка прерывает дальнейшее выполнение скрипта, при этом никаких изменений маршрутов не происходит. К этим проверочным ип-адресам прописаны статические маршруты через шлюз проверяемого провайдера, а в фаерволе добавлены правила, запрещающие исходящий пинг на эти адреса через другие интерфейсы.
    В скрипт добавлен вывод сообщений в лог, а также отправка СМС с информацией об упавшем провайдере и времени падения. Отправка СМС реализована с помощью сайта sms.ru.
    api_id=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX — уникальный id — выдаваемый при регистрации на sms.ru
    to=79********* — номер телефона, на который осуществляется отправка СМС. Если в качестве номера указывается тот же, что и при регистрации на сайте — 5 СМС в сутки бесплатно. Последней командой удаляется файл, создаваемый при обращении к sms.ru, чтобы не захламлять файловую память.

    1. HawK

      P.S. Кавычки-елочки » » автоматически появились после публикации сообщения, в скриптах следует указывать обычные кавычки.

      1. admin Автор записи

        Я позже поправлю, движок самовольничает, в редакторе видятся правильные кавычки. Спасибо.

  5. Сергей

    Немного доработав второй способ для своей сети (у меня два постоянно активных канала), получил требуемую отказоустойчивость.

    Благодарю за информацию!

  6. Алек

    Привет как неправелно я норм настроиль хотспот и радиус ну заходить на радиус сервер через ip напремир 192.168.1.1:3333/userman вот так заходить и создаль профел и лимить поставиль ключи не работаеть radius is not rispoing скажить почему помогите пожалуйста шаг шагом или через фото либо через скрипт

    1. admin Автор записи

      Не совсем понятна ваша конфигурация, мне трудно вам чем-то помочь, Radius я видел всего пару раз и не спец по его настройке.

  7. Алек

    привет у меня есть роутер 951 я настроил user-manger и откажить радиус сервер не отвечает кжаить почему

    1. admin Автор записи

      А раньше отвечали? И что вы настроили? Что такое user-manger?

      Вероятно, если до этого все работало то вы неверно настроили фаервол.

  8. Виталий

    Данная процедура работает на роутерах модели RB2011UiAS-2HnD?

    1. admin Автор записи

      да, это не зависит от железа, сработает везде где стоит RouterOS.

  9. hgfdahjg

    Большое спасибо мил человек. Очень простой и быстрый вариант сделать фэйловер. Что приятно вдвойне что решается задача «доступного но пустого шлюза по умолчанию».

    1. admin Автор записи

      Я несколько раз сталкивался с ситуацией когда шлюз провайдера пашет, а все что дальше за ним — нет, поэтому гуляющие в нете варианты которые не учитывают этот момент сразу отбрасывал.

  10. zenchuk

    Спасибо, с двумя провайдерами все получилось, у меня за ISP1 и ISP2 находятся другие маршрутизаторы, получающие Интернет через PPoE и L2TP. Прошу подробно описать схему failover, с использованием netwatch, на 3 провайдера, третий из которых — 3G модем, подключенный напрямую в Микротик, или, допустим, даже еще один, третий, статический маршрут на 0.0.0.0, без модема напряму, ведь 3G модем можно подключить и к третьему роутеру. Главное, понять, какие будут настройки для netwatch, для трех интерфейсов. Спасибо.

    1. admin Автор записи

      Для трех провайдеров надо подумать, имхо netwach для трех не подходит если так сразу ответить и без скриптов не обойтись наверное. Я подумаю что можно сделать, статью с файловером для трех провайдеров на микротик я напишу наверное отдельно, не знаю нужно ли это кому-то кроме Вас, но быстро не обещаю)))

      Для трех провайдеров подходит первый вариант в статье, в нем можно сделать сколько угодно провайдеров и маршрутов.

      1. zenchuk

        Получилось настроить через netwatch для трех провайдеров, думаю так можно для скольки хочешь сделать. Создаём дефолтовые маршруты для каждого провайдера, с разными дистанциями. Дистанция будет определять приоритет дефолтового маршрута. Не забываем комментировать маршруты (ISP1, ISP2…) для поиска комментариев утилитой netwatch:

        /ip route add dst-address=0.0.0.0/0 gateway=GW1 distance=1
        /ip route add dst-address=0.0.0.0/0 gateway=GW2 distance=2
        /ip route add dst-address=0.0.0.0/0 gateway=GW3 distance=3

        Далее создаём соответствующие маршруты по умолчанию для любых проверочных узлов для всех наших провайдеров, за исключением последнего по приоритету:

        /ip route add dst-address=8.8.8.8 gateway=GW1 scope=10
        /ip route add dst-address=8.8.4.4 gateway=GW2 scope=10

        Соответственно, далее нам нужно создать в netwatch два правила, проверяющие узлы через первого и второго провайдера (GW):

        Первое правило проверяет пинг до 8.8.8.8:
        В разделе UP:
        /ip route set [find comment=»ISP1″] disabled=no
        В раздел Down:
        /ip route set [find comment=»ISP1″] disabled=yes

        Второе правило проверяет пинг до 8.8.4.4:
        В разделе UP:
        /ip route set [find comment=»ISP2″] disabled=no
        В раздел Down:
        /ip route set [find comment=»ISP2″] disabled=yes

        Получается следующее, что если все проверочный узлы доступны, то и все дефолтовые маршруты включены, но активен только маршрут с меньшим значением distance. Если какой-то проверочный узел становится не доступен, то отключается соответствующий дефолтовый маршрут, например, при отключении маршрута на ISP1, будет активен маршрут на ISP2, при отключении ISP2, останется активен последний ISP3.

        1. admin Автор записи

          Решение рабочее, главное не запутаться 🙂

  11. Павел

    А как решить проблему когда 2 провайдера выдают белые ip статические + dns у каждого свой?

    Пробовал в IP -> DNS указывать все четыре адреса DNS (по 2 от каждого (основной и резервный), при работе основного провайдера возникают глюки, Mikrotik пытается слать запросы на разные DNS и когда попадает не на своего получает отлуп, и сайт не открывается….

    Как прописать DNS, что б он был привязан только к определенному интерфейсу (порту WAN)?

    1. admin Автор записи

      Лучший вариант в Вашем случае прописать любые публичные DNS которые доступны с любого провайдер, хотите гугловские 8.8.8.8 и 8.8.4.4 хотите любые другие (есть у яндекса и можете погуглить по слову opendns)

      Если такой вариант неприемлем и Вы хотите использовать провайдерские DNS то надо дописать в команды netwach где переключаются маршруты еще несколько строк которые будут менять вместе с маршрутом и dns на нужные.

      Я от провайдерских DNS отказываюсь в пользу гугловских, крайне редко но бывает ситуация что провайдерские dns ложатся и тогда инет хоть и есть, но не работает.

      1. Павел

        Пробовал уже данный вариант, но хотелось бы все по правильному. Просто настраивал pfSeence там такой проблемы вообще нет, на каждый интерфейс прописывается свой независимый DNS и все работает отлично, а тут подстава какая то прям.

    2. HawK

      Добавить в скрипт изменение ип- адресов dns-серверов через запятую:
      /ip dns set server=x.x.x.x,y.y.y.y
      Адреса указанные в ./ip dns до начала работы команды — удаляются.

  12. Leonid Krasnov

    Короче 2 недели пытался, ничего не вышло, затем понял, оба провайдера выдают динамические маршруты, значит эта схема не сработает, потому что в динамических маршрутах невозможно задать коментарий

    1. admin Автор записи

      Маршруты которые выдают провайдеры вам не нужны, надо либо убрать галочки с пунтка о получении дефолтного маршрута автоматом либо задать этим автоматическим маршрутам дистанс побольше, маршруты вы должны прописать руками.

    2. HawK

      А что Вам мешает прописать эти маршруты статическими и затем убрать галочки с «Add Default Route» в свойствах подключения?
      Бывают ситуации, когда провайдеры выдают разные шлюзы при каждом подключении, но в большинстве случаев достаточно в статическом маршруте просто указать интерфейс в качестве шлюза.

      1. admin Автор записи

        о в большинстве случаев достаточно в статическом маршруте просто указать интерфейс в качестве шлюза.

        Если на интерфейсе настройки получаются по DHCP (на который переходит все больше провайдеров) то так сделать было нельзя.

  13. leksstav

    Большая просьба закончите статью, я именно опишите пожалуйста подробно со скринами.

    (Для того чтоб схема корректно работало, нужно разрешить пинговать этот ip только с ISP1, для этого желательно добавить правило в IP-Firewall запрещающее доступ к 8.8.4.4 с ISP2, и прописать статический маршрут к 8.8.4.4 через шлюз ISP1 (в штатном режиме так сделать не получится если ISP1 выдает динамический ip и придется писать скрипт, который будет определять ip шлюза и прописывать маршрут ).)

    1. admin Автор записи

      ))) это домашнее задание, там же все просто. Скрины добавлю, но не скоро, минима неделя

  14. Saner

    Если у меня оба провайдера выдают динамический ip, мне подойдет первый вариант? Но лучше конечно как во втором с пингом гугла — а для этого варианта есть мануал?

    1. Админ

      нет, первый чисто для статики, вам надо настраивать по второму варианту.

    2. admin Автор записи

      Выделил жирным второй случай, как раз для Вас, настраивайте, если что спрашивайте.

      1. Saner

        Вот подключил я оба провайдера и смотрю их маршруты, а коментарий к маршруту создать не могу, кнопка для комента не активна… .Прошивка версии 6,5, единственное, что я перед тем как все тестировать на деле, сделал в ip-dhcp-client два клиента , один с distance=1(для первого провайдера), второй с distance=2(для второго).

  15. demon

    Ну вообщето нужно прописать статический маршрут до 8.8.4.4 через первого ISP, только так он будет знать, поднялся ли первый ISP или нет, тогда нетвотч будет работать корректно, а тот механизм что вы описали не верный.

    1. admin Автор записи

      вы невнимательно читали, в статье написано и про необходимость статического маршрута, и на скрине он виден, так что все корректно, и работает.

    2. admin Автор записи

      Подредактировал статью, что б было более понятно. Я пробовал вариант когда доступ к 8.8.4.4 через второго провайдера закрыт правилами фаервола, без прописанного маршрута, и netwach при этом нормально отрабатывал, суть в том что доступ к 8.8.4.4 должен быть только с одного провайдера, а как вы это реализуете не так важно.

      Ну и если у вас ISP1 это эзернет с динамическим ip, то вы не сможете прописать статический маршрут в микротике, для этого надо будет писать отдельный скрипт.

  16. Роман

    Всё хорошо, только как netwatch узнает, что канал ISP1 поднялся и переключится на него с ISP2?

    1. admin Автор записи

      Netwatch — не прекращает пинговать 8.8.4.4, и всегда знает в каком состоянии канал к ISP1, в зависимости от того есть ответы на пинг или нет, выполняются команды из разделов Up или Down

      Работает схема таким образом: Netwatch пингует 8.8.4.4 с ISP1, и если ответы приходят, то ничего не делает. Если вдруг ответы перестают приходить — то Netwatch выполняет те команды которые написаны в разделе Down, и переключает инет на ISP2, и продолжает дальше пинговать 8.8.4.4 с интерфейса к которому подключен ISP1, когда первый провайдер возвращается в работу, и начинают приходить ответы на пинги, то Netwatch выполняет команды из раздела Up, и переключает каналы, включая маршрут ISP1.

      Все просто, схема проверена и работает. В данном случае еще реализован приоритет ISP1, Netwatch всегда будет отдавать ему предпочтение, у меня ISP1 это быстрая оптика, а ISP2 медленный ADSL, в реальности разница между ними вполне заметна, пинги на оптике примерно в 1,5-2 раза ниже чем на ADSL.

      Если будут вопросы по настройке — пишите, помогу.

    2. admin Автор записи

      Добавил картину в пост с скрином маршрутов, так должно быть понятнее как оно работает.

  17. Анатолий

    «нужно задать комментарии для маршрутов»

    Здесь, видимо, имеется в виду, что в Interfaces у ISP1 стоит комментарий ISP1, а у ISP2 соответственно комментарий ISP2.

    1. admin Автор записи

      Нет комментарии для маршрутов задаются в разделе Ip-Routes, в Winbox есть спец кнопка с иконкой типа конвертика, выбираете маршрут, кликаете на кнопку и пишете комментарий к маршруту, потом в скриптах можно найти нужный интерфейс по этому комментарию, и что нибудь с ним сделать — изменить, включить, выключить и т.п. Задавать комментарий маршруту удобно.

    2. admin Автор записи

      Добавил картину в пост с скрином маршрутов, так должно быть понятнее как оно работает.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.