Доброго всем дня!
На этот раз решил описать ситуацию, которая вроде бы и не особо описана в интернете, хотя некоторые намеки на нее есть, но большая часть досталась просто долгим методичным копанием кода и вики самого Mikrotik.
Собственно задача: реализовать при помощи SMS управлением несколькими устройствами, на примере включения и выключения портов.
Имеется:
Начнем с того что чудесная точка доступа Netmetal 5 имеет на борту распаянный разъем для сим карты и порт для установки LTE модема. Потому для этой точки был куплен по сути лучший модем из того, что было доступно и поддерживалось операционной системой самой точки, а именно R11e-LTE. Точка была разобрана, все установлено на свои места (хотя надо знать, что сим карта расположена под модемом и без снятия основной платы ее не возможно достать), потому проверьте сим карту на работоспособность, иначе придется несколько раз разбирать точку доступа.
Далее просверлили пару отверстий в корпусе, установили 2 пигтейла и концы закрепили на модеме. К сожалению фото процесса не сохранилось. С другой стороны на пигтейлы закрепили универсальные антенны с магнитным основанием.
Основные этапы настройки описаны в интернете достаточно хорошо, кроме мелких косяков взаимодействия. Например модем перестает принимать сообщения SMS, когда из поступает 5 штук и они висят в Inbox, очистка сообщений, перезапуск модема не всегда решают проблему. Но в версии 6.44.1 прием работает более стабильно. В Inbox отображается 4 последние sms, остальные автоматически стираются и жизни не мешают.
Основная цель эксперимента тушить и поднимать интерфейсы на двух маршрутизаторах в одной физической сети. Основная сложность заключалась в том, что Mikrotik не поддерживает управление через SNMP, а позволяет только считывать значения. Потому пришлось копать в другую сторону, а именно Mikrotik API.
Четкой документации о том, как управлять нет, потому пришлось экспериментировать и для будущих попыток сделана эта инструкция.
Для управления несколькими устройствами потребуется доступный и рабочий WEB сервер в локальной сети, на него возлагается необходимость управления по командам Mikrotik.
1. На Netmetal 5 нужно сделать пару скриптов для включения и выключения соответственно
2. Создать 2 скрипта на веб сервере (конечно на системе в данном случае должен быть установлен php):
3. Скачать с форума Mikrotik routeros_api.class.php и расположить его в доступном каталоге на сервере.
вместо sfp-sfpplus16 нужно указать имя отключаемого/включаемого интерфейса.
Теперь при отправке сообщения на номер в виде
NETMETAL будет запускать соответствующий скрипт, а тот в свою очередь выполнение команды на WEB сервере.
Скорость выполнения операций при получении смс доли секунды. Работает стабильно.
Помимо этого есть функционал отправки СМС на телефоны системой мониторинга Zabbix и открытие резервного выхода в интернет при падении оптики. Пожалуй это выходи за рамки этой статьи, но скажу сразу, при отправке смс их длина должна укладываться в стандартный размер одного сообщения, т.к. Mikrotik не делит их на части, а при поступлении длинного сообщения просто его не отправляет, кроме того нужно фильтровать знаки передаваемые в сообщения, в противном случае СМС не отправится.
P.S. Дополняю теперь про косяки в предыдущих версиях RouterOS, которые были и как с ними бороться.
1. Максимальная длина сообщения и используемые знаки в сообщениях ограничены, потому пришлось бороться на уровне Zabbix, а именно исправлять шаблон отправки сообщения, чтобы в кратце, но было понятно о чем речь сообщения.
Настройка — Действия — Report to sms — Операции — Тема: Problem: {HOST.NAME} {TRIGGER.NAME}
А на восстановление Report to sms — Операции восстановления Тема: Resolved: {HOST.NAME} {TRIGGER.NAME}
2. Дополнительно сам скрипт, отправляющий данные в модем также режет максимальную длину отправляемого сообщения, т.к. если оно слишком длинное, то сообщение не отправится.
Скрипт на php, отправляющий данные
3. Очистка входящих сообщений для RouterOS < 6.44
System-Sheduler
Если скрипт ниже у Вас будет иметь другой порядковый номер, то в планировщике потребуется изменить run 7, на соответсвтвующий номер
System-Script
Скрипт с порядковым номером 7
4. На версиях ниже 6.38 помогала перезагрузке модема также встроенными скриптами и планировщиком
5. И немного про пополнение команд. Для отправки смс допустимо скажем на хосте с Zabbix генерировать RSC файл, а затем скриптом его отправлять на ftp на Mikrotik, далее в самом модеме уже скриптом в планировщике запускать требуемый файл, команды выполняются, но мне показалось более удобным использовать механизм выше.
В случае такой отправки генерируемый код достаточно прост.
В этом примере лишние символы уже убраны, а длина не ограничена. Скрипт, обрабатывающий запуск по такому методу после отрабатывания должен внутри Mikrotik скопировать пустой RSC файл на место существующего.
Данный метод не понравился, поскольку в принципе отсутствует защита от глюков и возможна неконтролируемая неотправка сообщений.
В версии RouterOS 6.44.1 проблемы по переполнению входящих уже устранены, потому к колхозным способам очистки можно не прибегать
На этот раз решил описать ситуацию, которая вроде бы и не особо описана в интернете, хотя некоторые намеки на нее есть, но большая часть досталась просто долгим методичным копанием кода и вики самого Mikrotik.
Собственно задача: реализовать при помощи SMS управлением несколькими устройствами, на примере включения и выключения портов.
Имеется:
- Второстепенный маршрутизатор CRS317-1G-16S+
- Точка доступа Mikrotik NETMETAL 5
- LTE модем R11e-LTE
Начнем с того что чудесная точка доступа Netmetal 5 имеет на борту распаянный разъем для сим карты и порт для установки LTE модема. Потому для этой точки был куплен по сути лучший модем из того, что было доступно и поддерживалось операционной системой самой точки, а именно R11e-LTE. Точка была разобрана, все установлено на свои места (хотя надо знать, что сим карта расположена под модемом и без снятия основной платы ее не возможно достать), потому проверьте сим карту на работоспособность, иначе придется несколько раз разбирать точку доступа.
Далее просверлили пару отверстий в корпусе, установили 2 пигтейла и концы закрепили на модеме. К сожалению фото процесса не сохранилось. С другой стороны на пигтейлы закрепили универсальные антенны с магнитным основанием.
Основные этапы настройки описаны в интернете достаточно хорошо, кроме мелких косяков взаимодействия. Например модем перестает принимать сообщения SMS, когда из поступает 5 штук и они висят в Inbox, очистка сообщений, перезапуск модема не всегда решают проблему. Но в версии 6.44.1 прием работает более стабильно. В Inbox отображается 4 последние sms, остальные автоматически стираются и жизни не мешают.
Основная цель эксперимента тушить и поднимать интерфейсы на двух маршрутизаторах в одной физической сети. Основная сложность заключалась в том, что Mikrotik не поддерживает управление через SNMP, а позволяет только считывать значения. Потому пришлось копать в другую сторону, а именно Mikrotik API.
Четкой документации о том, как управлять нет, потому пришлось экспериментировать и для будущих попыток сделана эта инструкция.
Для управления несколькими устройствами потребуется доступный и рабочий WEB сервер в локальной сети, на него возлагается необходимость управления по командам Mikrotik.
1. На Netmetal 5 нужно сделать пару скриптов для включения и выключения соответственно
system script
add dont-require-permissions=no name=disableiface owner=admin policy= ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source= "/tool fetch http://WEB_SERVER_IP/di.php "
add dont-require-permissions=no name=enableiface owner=admin policy= ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source= "/tool fetch http://WEB_SERVER_IP/en.php "
2. Создать 2 скрипта на веб сервере (конечно на системе в данном случае должен быть установлен php):
<?php
# file en.php enable interfaces
require('/usr/lib/zabbix/alertscripts/routeros_api.class.php');
$API = new RouterosAPI();
$API->debug=true;
if ($API->connect('IP управляемого Mikrotik', 'логин администратора', 'пароль администратора')) {
$API->comm("/interface/ethernet/enable", array(
"numbers"=>"sfp-sfpplus16",));
}
$API->disconnect();
?>
<?php
#file di.php disable interfaces
require('/usr/lib/zabbix/alertscripts/routeros_api.class.php');
$API = new RouterosAPI();
$API->debug=true;
if ($API->connect('IP управляемого Mikrotik', 'логин администратор', 'пароль администратора')) {
$API->comm("/interface/ethernet/disable", array(
"numbers"=>"sfp-sfpplus16",));
}
$API->disconnect();
?>
3. Скачать с форума Mikrotik routeros_api.class.php и расположить его в доступном каталоге на сервере.
вместо sfp-sfpplus16 нужно указать имя отключаемого/включаемого интерфейса.
Теперь при отправке сообщения на номер в виде
:cmd СЕКРЕТНЫЙКОД script enableiface
или
:cmd СЕКРЕТНЫЙКОД script disableiface
NETMETAL будет запускать соответствующий скрипт, а тот в свою очередь выполнение команды на WEB сервере.
Скорость выполнения операций при получении смс доли секунды. Работает стабильно.
Помимо этого есть функционал отправки СМС на телефоны системой мониторинга Zabbix и открытие резервного выхода в интернет при падении оптики. Пожалуй это выходи за рамки этой статьи, но скажу сразу, при отправке смс их длина должна укладываться в стандартный размер одного сообщения, т.к. Mikrotik не делит их на части, а при поступлении длинного сообщения просто его не отправляет, кроме того нужно фильтровать знаки передаваемые в сообщения, в противном случае СМС не отправится.
P.S. Дополняю теперь про косяки в предыдущих версиях RouterOS, которые были и как с ними бороться.
1. Максимальная длина сообщения и используемые знаки в сообщениях ограничены, потому пришлось бороться на уровне Zabbix, а именно исправлять шаблон отправки сообщения, чтобы в кратце, но было понятно о чем речь сообщения.
Настройка — Действия — Report to sms — Операции — Тема: Problem: {HOST.NAME} {TRIGGER.NAME}
А на восстановление Report to sms — Операции восстановления Тема: Resolved: {HOST.NAME} {TRIGGER.NAME}
2. Дополнительно сам скрипт, отправляющий данные в модем также режет максимальную длину отправляемого сообщения, т.к. если оно слишком длинное, то сообщение не отправится.
#!/bin/bash
strz=$1 $2 $3
php /usr/lib/zabbix/alertscripts/ro.php "8926ххххххх" "${strz:0:150}"
echo ${strz:0:150}\" >> /var/log/sendsms.history
Скрипт на php, отправляющий данные
<?php
require('/usr/lib/zabbix/alertscripts/routeros_api.class.php');
$API = new RouterosAPI();
$API->debug=true;
if ($API->connect('IP модема', 'логин администратора', 'пароль администратора')) {
$API->comm("/tool/sms/send", array(
"port"=>"lte1",
"phone-number"=>$argv[1],
"message"=>$argv[2],));
}
$API->disconnect();
echo $argv[1];
echo $argv[2];
?>
3. Очистка входящих сообщений для RouterOS < 6.44
System-Sheduler
/system scheduler
add disabled=yes interval=1m name=removeSMS on-event="/system script run 7" \
policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \
start-date=nov/01/2018 start-time=19:32:00
Если скрипт ниже у Вас будет иметь другой порядковый номер, то в планировщике потребуется изменить run 7, на соответсвтвующий номер
System-Script
/system script
add dont-require-permissions=no name=removeSMS owner=admin policy=\
ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\
tool sms inbox remove 0\r\
\n/delay 1\r\
\n/tool sms inbox remove 0\r\
\n/delay 1\r\
\n/tool sms inbox remove 0\r\
\n/delay 1\r\
\n/tool sms inbox remove 0\r\
\n/delay 1\r\
\n/tool sms inbox remove 0\r\
\n/delay 1\r\
\n/tool sms inbox remove 0\r\
\n/delay 1\r\
\n/tool sms inbox remove 0\r\
\n/delay 1\r\
\n/tool sms inbox remove 0\r\
\n/delay 1\r\
\n"
Скрипт с порядковым номером 7
4. На версиях ниже 6.38 помогала перезагрузке модема также встроенными скриптами и планировщиком
/system script
add dont-require-permissions=no name=rebootLTE owner=admin policy=\
ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\
interface lte disable 0\r\
\ndelay 10\r\
\n/interface lte enable 0\r\
\n/tool sms set receive-enabled=false\r\
\ndelay 10\r\
\n/tool sms set receive-enabled=true\r\
\n"
5. И немного про пополнение команд. Для отправки смс допустимо скажем на хосте с Zabbix генерировать RSC файл, а затем скриптом его отправлять на ftp на Mikrotik, далее в самом модеме уже скриптом в планировщике запускать требуемый файл, команды выполняются, но мне показалось более удобным использовать механизм выше.
В случае такой отправки генерируемый код достаточно прост.
/tool sms send lte1 +7926xxxxxxx message "Problem: High ICMP ping response time Problem started at 17:08:04 on 2018.07.10 Problem name: High ICMP ping response time Host: Netgear7212 Severity: Warning Original problem ID: 5403803"
В этом примере лишние символы уже убраны, а длина не ограничена. Скрипт, обрабатывающий запуск по такому методу после отрабатывания должен внутри Mikrotik скопировать пустой RSC файл на место существующего.
Данный метод не понравился, поскольку в принципе отсутствует защита от глюков и возможна неконтролируемая неотправка сообщений.
В версии RouterOS 6.44.1 проблемы по переполнению входящих уже устранены, потому к колхозным способам очистки можно не прибегать
Комментарии (7)
Luxo
15.04.2019 15:04Ну и относительно последнего абзаца.
Вы рассказали, с какими граблями по смс в микротике столкнулись. Но не поделились решениями. Мило.kisyabrus Автор
15.04.2019 17:32часть «граблей» я описал, но Вы подтолкнули к другой статье уже более краткой по части смс отправок. Думаю корректнее это вынести в отдельную статью по теме.
Luxo
Неужели это нельзя реализовать без отдельного веб-сервера?
kisyabrus Автор
управлять своей точкой можно по смс очень просто, управлять удаленным микротиком без SNMP очень сложно, самым простым вариантом и действенным было использование API. А продолжением задачи было отключение портов еще на одном устройстве, в этом случае просто в php скрипт добавлял еще одну секцию команд. Кроме того WEB сервер на себе крутил Zabbix, потому он всегда включен, всегда доступен и видит все изменение устройств.
Luxo
Очень сложно или невозможно?
— вот так, например. Не проще ли, чем городить веб-сервер?kisyabrus Автор
спасибо за предложение, попробую сделать через ssh