Быстрая навигация
802.11ac 802.11ac Wave 2 802.11n Android DVB-T2 Google hAP hAP lite Intel IPSec Keenetic LTE Mikrotik MU-MIMO Netis Qualcomm Realtek RouterBOARD RouterOS Rozetka rozetka.com.ua Strong Trimax Ubiquiti UBNT UniFi wAP 60G Wi-Fi Winbox wireless Zyxel безопасность маршрутизатор обзор обновление промо промо-код прошивка роутер скидкиMikrotik Advanced Failover: автоматическое переключение между основным каналом и 3G. Проверка основного интернет-канала и отправка SMS-уведомлений из Mikrotik
В рамках вводной публикации, опубликованной ранее, были изложены основные моменты подключения 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");
Скрипт с отправкой 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");
Различия между скриптами, основные параметры
Теперь о различиях. Первый код – обычная версия скрипта, которая реализует переключение на резервный канал при отсутствии доступа к Интернет.
Вторая версия скрипта поддерживает отправку 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-уведомление об отказе.
Видеокурс «Настройка оборудования MikroTik» (аналог MTCNA)
Учитесь работать с MikroTik? Рекомендую видеокурс «Настройка оборудования MikroTik». В курсе разобраны все темы из официальной учебной программы MTCNA и много дополнительного материала. Курс сочетает теоретическую часть и практику – настройку маршрутизатора по техническому заданию. Консультации по заданиям курса ведет его автор Дмитрий Скоромнов. Подойдет и для первого знакомства с оборудованием MikroTik, и для систематизации знаний опытным специалистам.