Mikrotik Advanced Failover: автоматическое переключение между основным каналом и 3G. Проверка основного интернет-канала и отправка SMS-уведомлений из Mikrotik

17 июль 2016 5 986 2

В рамках вводной публикации, опубликованной ранее, были изложены основные моменты подключения 3G-модема к маршрутизатору Mikrotik, на примере Huawei E173 и RB952Ui-2nD (hAP). Также мы рассмотрели базовые настройки для резервирования Интернет-канала. В рамках этой публикации описаны важные аспекты, касающиеся 3G модема и тарифного плана, а также процесс настройки автоматического переключения интернет-канала при отсутствии доступа к интернет-ресурсам.

 

 

Если вы еще не выбрали маршрутизатор, чтобы не растеряться во всем разнообразии Mikrotik, советуем обратить свое внимание на следующие модели: RB951Ui-2nD (hAP), 952UI-5ac2nD (hAP ac lite), RB951Ui-2HnD, RB951G-2HnD, RB962UiGS-5HacT2HnT (hAP ac). Все эти модели оснащены портом USB и позволяют подключать модемы 3G/4G. Обратите внимание, в hEX отсутствует модуль Wi-Fi. Для более требовательных подойдет RB2011 и RB3011. Эти и многие другие модели вы можете найти в интернет-магазине ASP24.

 

Выбор тарифа, система «My Lifecell»

Выбирая тарифный план для 3G-модема, обращайте внимание на стоимость, объем траффика и дополнительные услуги. Основное предназначение модема – доступ к Интернет, поэтому дополнительные услуги (бесплатные минуты в сети) нам попросту не нужны.

У оператора Lifecell есть специальные тарифные планы для планшетов и 3G-роутера, которые отличаются более высоким объемом включенного траффика.

Лично я выбрал тариф «3G+ Гаджет». Данный тарифный план доступен в трех вариантах, с абонплатой 49, 89 и 149 грн. в месяць. В зависимости от размера абонплаты, объем месячного траффика составляет 2, 6 или 14 Гб.

При использовании с модемом Huawei E173, этот тариф будет намного более выгодным, нежели «3G+ Смартфон». Самым выгодным тарифом является «3G+ Роутер», для которого доступно 20 Гб за 129 грн. При желании, Wi-Fi роутер также можно подключить к Mikrotik. Точнее наоборот, подключить Mikrotik к беспроводной сети роутера (CPE).

Лично мне вариант с модемом показался более интересным за счёт возможности отправки SMS прямо с Mikrotik, о чем мы поговорим чуть ниже. Первым делом нам нужно получить пароль для доступа в систему «My lifecell». Для этого, используя SIM-карту модема, необходимо отправить SMS с текстом «PAROL» на номер 123. Лично я отправлял SMS используя оригинальное приложения модема для Windows, предварительно подключив модем к ПК.

В ответном сообщении вы получите новый пароль для входа в систему. Личный кабинет My Lifecell позволяет следить за балансом и управлять дополнительными услугами.

У тарифа «3G+ Гаджет» есть небольшой минус. Все дело в том, что данный тариф предназначен в первую очередь для доступа к Интернет, поэтому стоимость 1 SMS, по-умолчанию, составляет 1 грн. Поскольку я предполагаю использование SMS-оповещений, то мне требуется дополнительный пакет SMS – не платить же по 1 гривне за каждое сообщение?

В разделе «Тарифные планы и услуги – Услуги» во вкладке «Обмен сообщениями» для тарифного плана «3G+ Гаджет» можно заказать один из трех пакетов.

Я остановился на пакете 50 SMS на неделю за 6 грн, чего должно быть более, чем достаточно для уведомлений об отключенном интернете. Если вы предполагаете отправлять больше сообщений, можно заказать 350 или 1000 сообщений на месяц с соответствующей доплатой.

«Huawei Terminal» прямо на Mikrotik?

С тарифным планом и SMS разобрались. Теперь вернемся к нашему модему Huawei E173. Для 3G-модемов доступно конфигурирование устройства через терминал с помощью AT-команд.

Вы можете скачать «Huawei Terminal» в интернете и использовать его на ПК под управлением Windows. Это бывает полезно в тех случаях, когда на модеме установлен неправильный (неподходящий) режим работы и Mikrotik его не видит. Перечень AT команд необходимо искать под определенную модель!

Если же Mikrotik видит модем, вы можете воспользоваться встроенным средством самой RouterOS. Откройте «New Terminal» и выполните команду

system serial-terminal port=usb1 channel=0

Обратите внимание на название порта, он должен соответствовать тому, на котором смонтировался модем в Mikrotik. Если с первой попытки подключиться не удалось, попробуйте изменить Channel в пределах 0-3. Для того, чтобы проверить, отвечает ли нам модем, можно воспользоваться командой «AT».

Ниже приведу список проверенных для Huawei E173 команд:

  • ATI – получить информацию об устройстве;
  • AT^CARDLOCK? – проверить блокировку и количество попыток разблокировки. Первая цифра обозначает блокировку: 1 – модем заблокирован под оператора, 2 – модем не заблокирован. Вторая цифра обозначает количество оставшихся попыток разблокировки, по-умолчанию 10.
  • AT^SETPORT? – отображение текущей конфигурации. В моем случае модем выдал "A1,A2;1,16,3,2,A1,A2", что соответствует конфигурации по-умолчанию.
  • AT^SETPORT="параметры" – устанавливает режим работы. Более подробно список параметров рекомендую поискать в сети. Для Huawei E173 дефолтные параметры приведены выше.

С помощью разных параметров можно отключать CD-ROM, карту памяти, режим сетевой карты, устанавливать приоритеты в выборе типа сети и так далее. Некоторые ресурсы советуют принудительно устанавливать режим «Только модем», якобы в этом режиме модем работает быстрее и стабильнее. Делается это командой:

AT^SETPORT="A1,A2;1,2,3"

Подробно останавливаться на AT-командах я не буду, в интернете вы сможете найти всю информацию самостоятельно.

Advanced Failover: настройка автоматического переключения между основным провайдером и 3G-модемом

Итак, у вас уже есть достаточно знаний для подключения модема. Пришло время настроить продвинутое автоматическое переключение. За основу взят «Универсальный скрипт переключения 2-х каналов интернета Mikrotik». Скрипт был немного усовершенствован и переработан для работы в типичной для 3G конфигурации:

  • WAN (ether1) – основной интернет-канал, DHCP (большинство провайдеров);
  • USB 3G modem (ppp-out1) – резервный канал, мобильный оператор, 3G;

Опционально:

  • Отправка уведомлений по SMS;
  • Включение-отключение гостевой сети Wi-Fi;

Скрипт без отправки SMS и управления гостевой сетью

# Set local variables
:local firstInterface "ether1";
:local secondInterface "ppp-out1";
:local pingTo1 "8.8.8.8";
:local pingTo2 "77.88.8.8";
:local pingCount 3;
:local stableConnectFrom 60;

# Local variables
:local firstInterfaceName $firstInterface;
:local secondInterfaceName $secondInterface;

# Function to cleaning ARP table
:local clearArp do={
    :local dumplist [/ip arp find]
    :foreach i in=$dumplist do={
        /ip arp remove $i
    }
    :log warning ("ARP cleaned");
}

# Function reconnect 3G
:local reconnect3G do={
    :log warning ("Rebooting 3G before using");
    /interface ppp-client set $nameInterface disable=yes;
    :delay 1s;
    /interface ppp-client set $nameInterface disable=no;
}

:log info ("Start ping to $pingTo1 and $pingTo2");

# Check FIRST interface
/interface ethernet {
    :if ( [get $firstInterface disable] = true) do={
        set $firstInterface disable=no;
        :delay 2s;
    }
}

# Check SECOND interface
/interface ppp-client {
    :if ( [get $secondInterface disable] = true) do={
        set $secondInterface disable=no;
        :delay 8s;
    }
}

/ip route {
    # Set objects to variables
    :set firstInterface [find dst-address="0.0.0.0/0" gateway=$firstInterfaceName];
    :set secondInterface [find dst-address="0.0.0.0/0" gateway=$secondInterfaceName];

    # Check routes
    :if ( [get $firstInterface distance] != 2 ) do={
        set $firstInterface distance=2;
        :log warning ("Distance for " . $firstInterfaceName . " corrected");
    }

    :if ( [get $secondInterface distance] != 1 && [get $secondInterface distance] != 3) do={
        set $secondInterface distance=3;
        :log warning ("Distance for " . $secondInterfaceName . " corrected");
    }

    # Get ping successfully packets. In percent
    :local pingStatus \
        ((( [/ping $pingTo1 interface=$firstInterfaceName count=$pingCount] + \
        [/ping $pingTo2 interface=$firstInterfaceName count=$pingCount] ) / ($pingCount * 2)) * 100);
   
    # Check Internet
    :if ($pingStatus < $stableConnectFrom) do={

        :log error ("ProKK no internet!");

        # Change distance
        :if ( [get $secondInterface distance] != 1 ) do={
            $reconnect3G nameInterface=$secondInterfaceName;
            set $secondInterface distance=1;
            :log warning ("Distance for " . $secondInterfaceName . " changed");
            $clearArp;
        }


    } else={
        :log warning ("ProKK connected");
        # Change distance
        :if ( [get $secondInterface distance] != 3 ) do={
            set $secondInterface distance=3;
            :log warning ("Distance for " . $secondInterfaceName . " changed");
            $clearArp;
        }
    }
}

:log info ("End ping");

failover_basic.txt [2,66 Kb] (cкачиваний: 110)

Скрипт с отправкой SMS и включением-отключением гостевой сети

# Set local variables
:local firstInterface "ether1";
:local secondInterface "ppp-out1";
:local pingTo1 "8.8.8.8";
:local pingTo2 "77.88.8.8";
:local pingCount 3;
:local stableConnectFrom 60;

# Local variables
:local firstInterfaceName $firstInterface;
:local secondInterfaceName $secondInterface;

# Function to cleaning ARP table
:local clearArp do={
    :local dumplist [/ip arp find]
    :foreach i in=$dumplist do={
        /ip arp remove $i
    }
    :log warning ("ARP cleaned");
}

# Function reconnect 3G
:local reconnect3G do={
    :log warning ("Rebooting 3G before using");
    /interface ppp-client set $nameInterface disable=yes;
    :delay 1s;
    /interface ppp-client set $nameInterface disable=no;
}


# Function Enable-Disable Free Wi-Fi
:local enableWLAN2 do={
    /interface enable wlan2;
    :log warning ("Guest Wi-Fi enabled!");
}
:local disableWLAN2 do={
    /interface disable wlan2;
    :log warning ("Guest Wi-Fi disabled!");
}

:log info ("Start ping to $pingTo1 and $pingTo2");

# Check FIRST interface
/interface ethernet {
    :if ( [get $firstInterface disable] = true) do={
        set $firstInterface disable=no;
        :delay 2s;
    }
}

# Check SECOND interface
/interface ppp-client {
    :if ( [get $secondInterface disable] = true) do={
        set $secondInterface disable=no;
        :delay 8s;
    }
}

/ip route {
    # Set objects to variables
    :set firstInterface [find dst-address="0.0.0.0/0" gateway=$firstInterfaceName];
    :set secondInterface [find dst-address="0.0.0.0/0" gateway=$secondInterfaceName];

    # Check routes
    :if ( [get $firstInterface distance] != 2 ) do={
        set $firstInterface distance=2;
        :log warning ("Distance for " . $firstInterfaceName . " corrected");
    }

    :if ( [get $secondInterface distance] != 1 && [get $secondInterface distance] != 3) do={
        set $secondInterface distance=3;
        :log warning ("Distance for " . $secondInterfaceName . " corrected");
    }

    # Get ping successfully packets. In percent
    :local pingStatus \
        ((( [/ping $pingTo1 interface=$firstInterfaceName count=$pingCount] + \
        [/ping $pingTo2 interface=$firstInterfaceName count=$pingCount] ) / ($pingCount * 2)) * 100);
   
    # Check Internet
    :if ($pingStatus < $stableConnectFrom) do={

        :log error ("ProKK no internet!");

        # Change distance
        :if ( [get $secondInterface distance] != 1 ) do={
            $reconnect3G nameInterface=$secondInterfaceName;
            set $secondInterface distance=1;
            :log warning ("Distance for " . $secondInterfaceName . " changed");
            $clearArp;
            $disableWLAN2;
            /tool sms send usb1 channel=2 "+380931234567" message="ProKK failure. 3G-modem enabled! Call: (03131)5-42-22";
        }


    } else={
        :log warning ("ProKK connected");
        # Change distance
        :if ( [get $secondInterface distance] != 3 ) do={
            /tool sms send usb1 channel=2 "+380931234567" message="ProKK connected. 3G-modem disabled.";
            set $secondInterface distance=3;
            :log warning ("Distance for " . $secondInterfaceName . " changed");
            $clearArp;
            $enableWLAN2;
        }
    }
}

:log info ("End ping");

failover_full.txt [3,12 Kb] (cкачиваний: 67)

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

Теперь о различиях. Первый код – обычная версия скрипта, которая реализует переключение на резервный канал при отсутствии доступа к Интернет.

Вторая версия скрипта поддерживает отправку SMS-оповещений при отключении и повторном включении основного канала. Также реализовано отключение гостевой сети (Free Wi-Fi, wlan2), чтобы «гости» не расходовали ваш трафик 3G. При желании, можно wlan2 переименовать в wlan1 (основной беспроводной интерфейс), в этом случае будет отключаться основной интерфейс (например, если беспроводной сетью ваши сотрудники пользуются на смартфонах в личных целях).

Пройдемся по параметрам:

  • firstInterface "ether1" – в скобках содержится название интерфейса (в данном случае ether1), на котором находится основной провайдер.
  • secondInterface "ppp-out1" – в скобках содержит название резервного подключения;
  • pingTo1 "8.8.8.8" и pingTo2 "77.88.8.8" – содержат IP-адреса в Интернете, для которых проверяется PING. Первый адрес – Google DNS, второй – Yandex DNS. Намеренно выбраны 2 сервиса с высокой доступностью. Вы можете изменить адреса по своему усмотрению.
  • pingCount 3 – количество пингов для каждого адреса;
  • stableConnectFrom 60 – процент успешных пакетов, для которого соединение считается стабильным;

Чем больше пингов – тем более точно можно произвести настройку переключения. В данном примере всего 6 пингов, по 3 пинга на каждый адрес. Если 4 пинга из 6 пройдут – интернет считается стабильным. Сильно увеличивая количество пингов, не забудьте увеличить интервал между запусками скрипта, иначе скрипт будет перезапущен еще до завершения всех команд.

Как работает переключение между каналами

Шаг 1: скрипт производит проверку обеих каналов, если интерфейс отключен – система дает команду на его включение. Для обычного интерфейса ethernet используется задержка 2 сек, чего достаточно для получения параметров сети по DHCP. Для интерфейса модема (ppp-client) установлена задержка 8 сек, т.к. получение параметров и установка соединения занимают больше времени.

Шаг 2: скрипт ищет маршруты в интернет (0.0.0.0/0) с заданным названием интерфейса для каждого канала.

Шаг 3: скрипт проверяет Distance для маршрута основного канала. Distance основного канала статичен и всегда равен 2. Если параметр указан неверно, система назначит ему 2 автоматически.

Шаг 4: скрипт проверяет Distance для роута резервного канала. Distance может принимать значение 1 либо 3. Если параметр указан неверно, система переназначит 3 автоматически.

Шаг 5: скрипт последовательно производит пинг обеих адресов, используя основной канала. Производится расчет успешного прохождения пакетов в процентном соотношении.

Шаг 6-A: если процент успешных пакетов меньше заданного параметра, основной канал признается нерабочим, в лог Mikrotik пишется запись о «падении» основного канала. После чего выполняется проверка Distance для резервного канала, если он равен 1 – значит Mikrotik уже использует 3G и дальнейшие действия не требуются. Скрипт завершает свою работу. В противном случае, запускается цепочка:

  • функция «reconnect3G» принудительно перегружает подключение модема. По большому счёту это небольшая перестраховка, т.к. бывают случаи, когда при длительном бездействии модема оператор закрывает соединение.
  • резервному каналу назначается Distance=1, что повышает его приоритет, делая основным каналом. В логи пишется соответствующая запись;
  • производится очистка таблицы APR (функция clearArp);
  • отключается гостевой Wi-Fi (функция disableWLAN2);
  • осуществляется отправка SMS-уведомления об отключении основного канала;
  • скрипт завершает свою работу;

Шаг 6-B: если процент успешных пакетов в пределах заданного лимита, система пишет в лог запись о том, что основной канал работает. После этого производится проверка Distance для резервного канала, если он не равен 3, система запускает цепочку:

  • отправляется SMS о том, что основной канал заработал;
  • для резервного канала устанавливается Distance=3, чем трафик перенаправляется на основной канал. В лог пишется соответствующее уведомление;
  • выполняется очистка таблица ARP;
  • т.к. ограничений по трафику на основном канале нет, включается гостевая сеть wlan2;
  • скрипт завершает работу;

Вот собственно и всё. Скрипт выбирайте тот, который больше вам подходит.

Если у вас нет гостевой сети

Если включать и отключать гостевую сеть нет необходимости, удалите из скрипта 3 следующие фрагмента:

:local enableWLAN2 do={ 	/interface enable wlan2; 	:log warning ("Guest Wi-Fi enabled!"); } :local disableWLAN2 do={ 	/interface disable wlan2; 	:log warning ("Guest Wi-Fi disabled!"); }

$disableWLAN2;

$enableWLAN2;

Настройка отправки SMS

Отправка SMS осуществляется через 3G-модем стандартными средствами Mikrotik

/tool sms send usb1 channel=2 "+380931234567" message="Your message";

Если SMS не отправляется, проверьте наличие денег на счету. Если деньги есть, но SMS не отправляется – попробуйте изменить channel=2 в диапазоне 0-3 (актуально для других модемов). Вместо +380931234567 не забудьте указать ваш номер в международном формате. Текст сообщений правится в message="".

Обратите внимание! Кириллица не поддерживается!

Как добавить скрипт в Mikrotik?

Для того, чтобы добавить скрипт, необходимо вызвать System – Scripts. В появившемся окне нажимаем синий плюс. Появится новое окошко «New Script». В «Name» указываем желаемое название скрипта, например «Failover» (англ. обработка при отказе); в «Source» вставляем код скрипта. Нажимаем ОК.

Далее необходимо запустить планировщик и задать интервал запуска скрипта. Вызываем System – Scheduler, создаем новое задание (New Schedule). Название можно указать любое, в «Start Time» выбираем «startup» (при запуске), после чего указываем интервал, например 30 сек.

Анализируем логи Mikrotik

Для того, чтобы проверить корректность работы скрипта, откройте «Log». В штатном режиме, когда основной канал работает, вы увидите в логах соответствующие периодические записи. Для удобства они имеют статус «warning» (предупреждение), из-за чего выделяются синим цветом.

При отказе основного канала, вы увидите в логах запись, выделенную красным (статус error), а также все последующие действия скрипта.

После каждого цикла скрипта, в логах должна присутствовать запись «End ping», если этой записи нет – скрипт выполнился не до конца.

В заключение

Скрипт не анализирует резервный канал на предмет доступа в Интернет, т.к. особой пользы от этого лично я не вижу. Если вам требуется обработка – вы можете дописать её самостоятельно, например, добавив в неё принудительную перезагрузку модема. Если Интернет на модеме не работает, всё же есть вероятность того, что SMS работает и у вас получится еще отправить SMS-уведомление об отказе.

Интернет-магазин ntools.com.ua

Комментарии:

Добавить
  • bowtiesmilelaughingblushsmileyrelaxedsmirk
    heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
    winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
    worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
    expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
    disappointedconfoundedfearfulcold_sweatperseverecrysob
    joyastonishedscreamtired_faceangryragetriumph
    sleepyyummasksunglassesdizzy_faceimpsmiling_imp
    neutral_faceno_mouthinnocent
  1. Дмитрий
    Дмитрий Гости 28 февраля 2017 11:41
    Скрипт выводит в логи ("Start ping to 8.8.8.8 and 77.88.8.8) и все дальше не идет. У кого получилось запустить удачно? Помогите разобраться.
  2. Роман
    Роман Гости 7 февраля 2017 10:46
    Скрипт затыкается на
    # Function to cleaning ARP table
    :local clearArp do={
    :local dumplist [/ip arp find]
    :foreach i in=$dumplist do={
    /ip arp remove $i
    }
    :log warning ("ARP cleaned");

Подключаем 3G-модем к Mikrotik: самый простой вариант резервирования канала. На

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

hAP ac (RB962UiGS-5HacT2HnT) представлен официально!

Вчера мы уже публиковали предварительный обзор долгожданного маршрутизатора Mikrotik hAP. Сегодня компания Mikrotik уже добавила его на официальный...

Обзор Mikrotik hAP ac (RB962UiGS-5HacT2HnT): Dual-Band, гигабитные порты и SFP

Еще в марте 2015-го на конференции MUM, проходящей в Чехии, компания Mikrotik анонсировала линейку устройств hAP. С 3 устройствами линейки мы уже...

Обзор и тестирование hAP ac lite (RB952Ui-5ac2nD) от Mikrotik: 802.11ac в массы!

В первом квартале 2015-го компания Mikrotik анонсировала выход маршрутизатора hAP lite, а также огласила свои планы по расширению модельного ряда...

Обзор маршрутизатора Mikrotik hAP (RB951Ui-2nD): золотая середина

27 марта, на конференции Mikrotik User Meeting 2015 (MUM 2015) в Праге, компания Mikrotik не только представила hAP lite (RB941-2nD), но и огласила...

Mikrotik анонсировал RB941-2nD-TC: hAP lite с обновленным дизайном

Mikrotik hAP lite (RB941-2nD) получился весьма хорошим роутером, который быстро завоевал достаточно большое количество сторонников, как среди...

авторизация на сайте

Войти при помощи Вконтакте Войти при помощи Facebook Войти при помощи Google+ Войти при помощи Яндекс
Забыли пароль?