
В свете всё больше возникающих вопросов вокруг мобильного приложения «Тревожная кнопка ZEL-Услуги» для устройств на базе Android, мы решили подробно рассмотреть реальные решения и практические примеры использования сервиса.
Напоминаем, что с помощью тревожной кнопки вы можете использовать возможности мгновенной рассылки SMS-ключей, SMS-уведомлений и TCP-пакетов на заданные адреса, а также получить экстренную помощь ИТ-специалистов в форс-мажорных обстоятельствах.
Мы рекомендуем пользоваться приложением для быстрого разрешения непредвиденных ситуаций с ИТ-оборудованием. Например, оно находится на высокой мачте и его необходимо перезагрузить, либо обнаружена подозрительная вирусная активность в удалённом филиале, а может и вообще требуется срочное вмешательство в работу серверов, когда в офисе никого нет. Во всех этих ситуациях мобильный сервис «тревожной кнопки ZEL-Услуги» будет незаменим.

ZEL-Услуги: Тревожная кнопка
Мы разработали приложение для Android, позволяющее быстро выполнить какую-либо функцию на различном оборудовании. Бывают ситуации, когда это нужно сделать быстро, а системный администратор по каким-то причинам недоступен. Или если ваш IT-отдел сталкивается с какой-то «плавающей» проблемой и нужно оперативно её засечь.
Что делает Тревожная кнопка.
При активации кнопки (зажать на 3 секунды) приложение может одновременно:
- Отправить три SMS с заранее введённым ключом на определённый телефонный номер
- Отправить три ICMP-пакета заданного размера www- или ip- адрес
- Отправить SMS с заранее введённым текстом трём друзьям или коллегам
Отправка сразу трёх одинаковых SMS и восьми ICMP-пакетов сделано для повышения надёжности получения тревожного сигнала конечным оборудованием – бывает SMSки плохо доходят или интернет на телефоне работает плохо.
Вы можете использовать оба этих метода одновременно или каждый по отдельности.
Отправка сообщения друзьям или коллегам нужна для того, чтобы, к примеру, предупредить ваш IT-отдел о срабатывании Тревоги, что даёт возможность оперативно подключить их к решению технической проблемы.
В качестве примеров использования Тревожной кнопки можно представить несколько различных сценариев:
- При обнаружении вирусной активности в удалённом филиале для предотвращения распространения вируса необходимо срочно отключить его от общей сети.
- Имеется несколько серверов, которые подключены к ИБП. По какой-то причине ИБП не может отключить серверы самостоятельно, а обрыв питания приведёт к потере данных. В офисе никого нет, добираться до него час, а батарей хватит только на 20 минут. Или нужно просто перезапустить подвисший системный процесс на сервере.
- Необходимо перезагрузить оборудование, доступ к которому по каким-то причинам ограничен (например, оборудование находится на высокой мачте).
- Вручную переключить роутер на резервный канал Интернет.
Предположим, мы используем оборудование Mikrotik (в примерах используется CCR1009-8G-1S-1S+ с RouterOS 6.43.16, но работа проверена и на других моделях, оснащённых портами USB, например 951G-2HnD), USB-модем М150-2 от компании Мегафон и сервер на базе Windows.
В рамках данной статьи мы не будем подробно расписывать все пять ситуаций. Подразумевается, что человек, читающий эту статью, обладает базовыми навыками работы с Mikrotik и серверными ОС Windows, поэтому без особого труда сможет разобраться, как адаптировать предложенное решение для своих нужд.

Как распознавать срабатывание Тревожной кнопки на примере Сценария 1
Удалённое отключение VPN-туннеля на Mikrotik с помощью SMS и приложения ZEL-Услуги: Тревожная кнопка
Предположим, что у нас есть два телефонных номера (+79261111111 и +79672222222), которые будут отключать интерфейс «L2TP-Tunnel1», закреплённый за первым VPN-туннелем. У каждого телефонного номера – свой уникальный ключ («KeyNumber1» и «KeyNumber2» соответственно), который вы внесли в соответствующие поля. Теперь нужно ввести внешний IP-адрес вашего роутера (или соответствующее DNS-имя). На этом минимально необходимая часть настройки приложения закончена, переходим к настройке роутера. Настраивать его будем с помощью консоли Winbox.
- Запустите Winbox.
- Откройте меню “Tools” → “SMS”.

- Отметьте галочкой «Receive Enabled» (разрешён приём SMS сообщений):
Type: Serial
Port: serial0
Channel: 0
Keep Max SMS: 9 - Теперь зададим пароль (Secret) на доступ к Mikrotik через SMS.
К нашим скриптам он не имеет отношения, однако нужен в целях безопасности роутера. Использовать можно только английские буквы, цифры и простые символы:
Secret: Very-Very-Big-Secret
- Поле «Allowed Number» в нашем случае можно оставить пустым, т.к. контролировать телефоны, с которых будем принимать нужные команды, будем с помощью скрипта, который я приведу ниже.
Теперь нужно создать скрипт, который будет обрабатывать SMS сообщения.
- Откройте меню “System” → “Scripts”.
- Создайте скрипт с названием «SMS» (на это имя далее будет ссылаться задание в планировщике)и отметьте все галочки Policy.

- Скрипт для приёма SMS, рассчитанный на два телефонных номера, каждый из которых имеет право отправлять SMS:
/tool sms set receive-enabled=yes (разрешаем приём SMS. Если этого не сделать, то после перезагрузки Mikrotik SMS приниматься не будут)
:local messageSMS1 "KeyNumber1"; (ключ для первого телефонного номера)
:local messageSMS2 "KeyNumber2"; (ключ для второго телефонного номера)
:local phoneSMS1 "+79261111111"; (первый телефонный номер)
:local phoneSMS2 "+79672222222"; (второй телефонный номер)
:local defNameInterface1 "L2TP-Tunnel1"; (имя интерфейса, отключаемого SMS, полученным от первого телефонного номера)
:local defNameInterface2 "L2TP-Tunnel1"; (имя интерфейса, отключаемого SMS, полученным от второго телефонного номера. В нашем примере это один и тот же интерфейс, но вы можете вписать другой, например «SSTP-Tunnel2», тогда второй телефонный номер будет своим ключом отключать интерфейс «SSTP-Tunnel2»)
:local countMSG1 [/tool sms inbox print count-only where message=$messageSMS1 phone=$phoneSMS1]; (проверяем количество SMS с первого телефонного номера с текстом, содержащим его ключ)
:local countMSG2 [/tool sms inbox print count-only where message=$messageSMS2 phone=$phoneSMS2]; (проверяем количество SMS со второго телефонного номера с текстом, содержащим его ключ)
:if ($countMSG1 > 0) do={ (если количество SMS с первого телефонного номера с текстом, содержащим его ключ, больше нуля, то выполняем:)
/interface disable $defNameInterface1; (отключение интерфейса L2TP-Tunnel1)
}
:if ($countMSG2 > 0) do={ (если количество SMS со второго телефонного номера с текстом, содержащим его ключ, больше нуля, то выполняем:)
/interface disable $defNameInterface2; (отключение интерфейса L2TP-Tunnel1, который мы в нашем примере могли заменить на «SSTP-Tunnel2»)
}
/tool sms inbox remove [find]; (удаляем все полученные сообщения) - Теперь откройте меню “System” → “Sheduler”
- Создайте новое задание, которое будет запускать наш скрипт каждые 10 секунд.

Name: SMS (здесь имя не принципиально)
Start date: Jan/01/1970 (важный момент – если поставить иную дату, а время у роутера собьётся, то задание может не работать)
Start Time: startup (выполнить задание сразу после включения роутера)
Interval: 00:00:10 (каждые 10 секунд) - Отметьте все галочки Policy
Содержимое задания:
/system script run SMS - Практика показывает, что USB-модемы плохо переносят круглосуточную работу и имеют свойство зависать, поэтому имеет смысл создать ещё одно задание, которое будет каждые 28 минут выключать их на 2 минуты.

Name: USB_PowerReset (здесь тоже имя не принципиально)
Start date: Jan/01/1970
Start Time: startup
Interval: 00:28:00 (каждые 28 минут) - Отметьте все галочки Policy
Содержимое задания:
/system routerboard usb power-reset duration=120s - Мы решили вопрос с SMS, теперь можно научить наш роутер делать то же самое после получения ICMP-пакетов заданного размера. Например, в системе Windows для этого используется команда «ping».
Нам нужно разрешить роутеру принимать ICMP-пакеты. - Теперь создадим три правила Firewall, которые будут обрабатывать ICMP-пакеты. Хотя программа поддерживает использование до 9 октетов, в примере мы будем использовать 3 октета (числа от 100 до 999) – 329, 485 и 298.
Откройте “New Terminal” и дайте команды:
/ip firewall filter add action=add-src-to-address-list address-list=Panic-List1 address-list-timeout=3m chain=input packet-size=329 protocol=icmp comment=Panic-Button
/ip firewall filter add action=add-src-to-address-list address-list=Panic-List2 address-list-timeout=3m chain=input packet-size=485 protocol=icmp src-address-list=Panic-List1
/ip firewall filter add action=add-src-to-address-list address-list=Panic-List3 address-list-timeout=3m chain=input packet-size=298 protocol=icmp src-address-list=Panic-List2 - Вы только что создали 3 новых правила Firewall. Давайте на них посмотрим. Откройте меню “IP”→”Firewall”. Они будут находиться в первой вкладке «Filter Rules», в самом низу. Схватите их мышкой и поднимите на самый верх.

- Первое правило будет обрабатывать любой ICMP-пакет размером 329 байт, полученный роутером, заносить IP-адрес отправителя в список IP-адресов «Panic-List1» на 3 минуты.
Второе правило будет обрабатывать любой ICMP-пакет размером 485 байт с IP-адреса из листа «PanicList1», заносить IP-адрес отправителя в другой список IP-адресов- «Panic-List2» на 3 минуты.
Третье правило будет обрабатывать любой ICMP-пакет размером 298 байт с IP-адреса из листа «PanicList2», заносить IP-адрес отправителя в список IP-адресов- «Panic-List3» на 3 минуты.
Посмотреть содержимое этих списков можно в том же меню “Firewall” на вкладке “Address Lists”.
Таким образом, IP-адрес отправителя перемещается из первого списка в последний. Теперь для выполнения каких-либо действий нам остаётся всего лишь проверить факт наличия какого-нибудь IP в наши адрес-лист «Panic-List3» и, если наличие подтвердится, отключить интерфейс L2TP-Tunnel1.
- Создайте скрипт с названием «Panic» (на это имя далее будет ссылаться задание в планировщике)и отметьте все галочки Policy.
Содержимое скрипта для ICMP-пакетов::local listPanic1 "Panic-List3";
:local defNameInterface1 "L2TP-Tunnel1";
:local countPanic1 [/ip firewall address-list print count-only where list="Panic-List1"];
:if ($countPanic1 > 0) do={ (проверяем - если к-во IP-адресов в первом IP-листе больше нуля, то)
/interface disable $defNameInterface1; (выключаем интерфейс L2TP-Tunnel1)
/ip firewal address-list remove [find where list~"Panic-List1"] (очищаем все записи в листе Panic-List1)
} - Нам осталось настроить этот скрипт на выполнение каждые 10 секунд.
- Откройте меню “System” → “Sheduler”
- Создайте новое задание, которое будет запускать наш скрипт каждые 10 секунд.
Name: List (здесь имя не принципиально)
Start date: Jan/01/1970 (важный момент – если поставить иную дату, а время у роутера собьётся, то задание может не работать)
Start Time: startup (выполнить задание сразу после включения роутера)
Interval: 00:00:10 (каждые 10 секунд) - Отметьте все галочки Policy
- Содержимое задания:
/system script run Panic
Разобравшись с этим вы без труда сможете модифицировать эти скрипты для того, чтобы заставить Mikrotik оперативно выполнять какие-то иные заранее определённые действия - инициировать запись каких-то заранее настроенных журналов (например, для диагностики какой-то периодически возникающей проблемы), проигрывать мелодию и «мерцать» светодиодами для поиска устройства среди аналогичных, проводить замеры скорости, изменять сетевые маршруты, включать резервные мощности и многое другое.

Пример отключения сервера Windows при срабатывании Тревожной кнопки
Идея в том, чтобы при получении сигнала Тревоги по SMS или через Интернет с помощью ICMP-пакетов роутер отключил какой-либо IP –адрес. Скрипт, работающий на сервере, проверял доступность этого IP-адреса и, в случае его недоступности, запускал определённую команду, например, выключался.
Мы уже научились создать скрипты для отключения туннелей, поэтому не будем останавливаться на этом подробно, приведём лишь вариант слегка изменённых скриптов – вместо отключения интерфейсов мы будем включать правило Firewall, ограничивающее доступ сервера к нужному нам IP-адресу Mikrotik.
Предположим, что IP-адрес 10.1.40.255 принадлежит вашему серверу, а для Mikrotik вы добавляете дополнительный IP-адрес 10.1.40.99
- Откройте «IP»→”Addresses”
- Добавьте IP-адрес 10.1.40.99 и не забудьте про маску.
- Откройте “New Terminal” и дайте команду:
/ip firewall filter add action=drop chain=input protocol=icmp src-address=10.1.40.255 dst-address=10.1.40.99 disabled=yes
- Откройте меню “IP”→”Firewall”
- Новое правило будет находиться в первой вкладке «Filter Rules», в самом низу.
Оно выключено, поэтому будет подсвечено серым цветом. Обратите внимание – самый левый столбец указывает на порядковый номер правила. Схватите правило мышкой и поднимите выше. В нашем примере оно должно получить порядковый номер 0. Этот номер очень важен, т.к. к нему будет привязано выполнение скрипта. На скриншоте порядковый номер правила подчеркнут красным:

Теперь нам нужно добавить скрипты и установить их в планировщик задач роутера. Аналогичные работы мы уже проделывали выше, поэтому ограничусь приведением самих скриптов. Обратите внимание – они не сильно отличаются от тех, что приведены выше.
Скрипт для приёма SMS, рассчитанный на два телефонных номера:
- /tool sms set receive-enabled=yes (разрешаем приём SMS. Если этого не сделать, то после перезагрузки Mikrotik SMS приниматься не будут)
- :local messageSMS1 "KeyNumber1"; (ключ для первого телефонного номера)
- :local messageSMS2 "KeyNumber2"; (ключ для второго телефонного номера)
- :local phoneSMS1 "+79261111111"; (первый телефонный номер)
- :local phoneSMS2 "+79672222222"; (второй телефонный номер)
- :local listPanic1 "Panic-List3";
- :local countMSG1 [/tool sms inbox print count-only where message=$messageSMS1 phone=$phoneSMS1]; (проверяем количество SMS с первого телефонного номера с текстом, содержащим его ключ)
- :local countMSG2 [/tool sms inbox print count-only where message=$messageSMS2 phone=$phoneSMS2]; (проверяем количество SMS со второго телефонного номера с текстом, содержащим его ключ)
- :if ($countMSG1 > 0) do={ (если количество SMS с первого телефонного номера с текстом, содержащим его ключ, больше нуля, то выполняем:)
- /ip firewall filter enable 0; (включаем правило Firewall под номером 0)
- }
- :if ($countMSG2 > 0) do={ (если количество SMS со второго телефонного номера с текстом, содержащим его ключ, больше нуля, то выполняем:)
- /ip firewall filter enable 0; (включаем правило Firewall под номером 0)
- }
- /tool sms inbox remove [find]; (удаляем все полученные сообщения)
- :local countPanic1 [/ip firewall address-list print count-only where list="Panic-List1"];
- :if ($countPanic1 > 0) do={ (проверяем - если к-во IP-адресов в первом IP-листе больше нуля, то)
- /ip firewall filter enable 0; (включаем правило Firewall под номером 0)
- /ip firewal address-list remove [find where list~"Panic-List1"] (очищаем все записи в листе Panic-List1)
- }
Нам осталось настроить этот скрипт на выполнение каждые 10 секунд, как мы сделали это в Примере 1
Настройка сервера под «Тревожную кнопку ZEL-Услуги»
Теперь перейдём к настройке сервера Windows. Нам нужно добавить в планировщик заданий запуск bat-файла с правами администратора и перезапускающий задание, если оно перестало выполняться. Как это сделать - не тема этой статьи, тем более что такая информация легко ищется поисковиками, поэтому перейду сразу к содержимому файлов.
Вариант1.
Вам нужно выключить сервер. Здесь надо уточнить два важных момента.
- Для снижения риска ложного срабатывания лучше делать ~5 попыток «пинга». Если хоть одна окажется успешна, то выключения не произойдёт.
- Время перезагрузки Mikrotik иной раз бывает больше минуты. Значение параметра n тождественно 1 попытке в секунду, а нам надо сделать так, чтобы проверка срабатывала не чаще 1 раза в 2 минуты, поэтому перед каждым циклом делаем ping 127.0.0.1 -n 120
- Set pingip=10.1.40.99
- :END
- ping 127.0.0.1 -n 120
- ping -n 5 %pingip% | Find "TTL="&&Goto END
- :ELSE
- shutdown -s -f -t 60
- Goto END
Вариант2.
При тех же условиях нам нужно остановить процесс «pass2.exe», исполняемый файл которого находится по адресу C:\Pass\pass2.exe
- Set pingip=10.1.40.99
- Set Process=pass2.exe
- :END
- ping 127.0.0.1 -n 120
- ping -n 25 %pingip% | Find "TTL="&&Goto END
- :ELSE
- taskkill /f /im %Process% && start "" /d C:\Pass\pass2.exe
- Goto END
Обратите внимание, что все примеры рассмотрены в варианте при работе с оборудованием Mikrotik. Скриптовую часть вы можете изменять так, как этого требует конкретная ситуация. Главная задача инструкции — определиться с командами и научиться пользоваться сервисом «Тревожная кнопка ZEL-Услуги».

Компания ZEL-Услуги
Для получения подробной консультации и помощи обратитесь к экспертам нашей компании.