Mikrotik. Controle de SMS usando o servidor WEB

Bom dia a todos!

Dessa vez, decidi descrever a situação, que parece não ser particularmente descrita na Internet, embora haja algumas dicas, mas a maior parte foi apenas para uma longa e metódica escavação do código e do wiki do Mikrotik.

Na verdade, a tarefa: implementar usando o controle SMS de vários dispositivos, no exemplo de ativar e desativar portas.

Existe:

  1. Roteador secundário CRS317-1G-16S +
  2. Ponto de acesso Mikrotik NETMETAL 5
  3. Modem LTE R11e-LTE

Para começar, o maravilhoso ponto de acesso Netmetal 5 possui um conector soldado para um cartão SIM e uma porta para a instalação de um modem LTE. Portanto, para este ponto, de fato, o melhor modem foi comprado do que estava disponível e suportado pelo sistema operacional do ponto em si, ou seja, R11e-LTE. O ponto foi desmontado, tudo foi colocado no lugar (embora você precise saber que o cartão SIM está localizado sob o modem e não é possível obtê-lo sem remover a placa principal), verifique o funcionamento do cartão SIM; caso contrário, será necessário desmontar o ponto de acesso várias vezes.

Em seguida, fizemos alguns furos no gabinete, instalamos duas tranças e fixamos as extremidades no modem. Infelizmente, a foto do processo não foi preservada. Por outro lado, antenas universais com base magnética foram acopladas às tranças.

As principais etapas de configuração são descritas muito bem na Internet, exceto por pequenos batentes de interação. Por exemplo, o modem para de receber mensagens SMS quando são enviadas 5 peças e elas ficam na Caixa de entrada, limpando as mensagens, reiniciando o modem nem sempre resolve o problema. Mas na versão 6.44.1, a recepção funciona de forma mais estável. A Caixa de entrada exibe os últimos 4 sms, o restante é apagado automaticamente e a vida não interfere.

O principal objetivo do experimento é extinguir e elevar interfaces em dois roteadores em uma rede física. A principal dificuldade foi que o Mikrotik não suporta gerenciamento via SNMP, mas apenas permite a leitura de valores. Portanto, eu tive que cavar na outra direção, ou seja, a API Mikrotik.

Não há documentação clara sobre como gerenciar, então tive que experimentar e esta instrução foi feita para tentativas futuras.

Para gerenciar vários dispositivos, você precisa de um servidor WEB acessível e funcional na rede local, é necessário gerenciá-lo usando os comandos Mikrotik.

1. No Netmetal 5, você precisa criar alguns scripts para ativar e desativar, respectivamente

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. Crie 2 scripts no servidor web (é claro, o php deve estar instalado no sistema neste caso):

 <?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. Faça o download no fórum Mikrotik routeros_api.class.php e coloque-o em um diretório acessível no servidor.

em vez de sfp-sfpplus16, você precisa especificar o nome da interface desconectada / incluída.

Agora, ao enviar uma mensagem para um número no formulário

 :cmd  script enableiface  :cmd  script disableiface 

O NETMETAL executará o script correspondente e, por sua vez, executará o comando no servidor WEB.

A velocidade das operações ao receber frações de SMS de segundo. Funciona de forma estável.

Além disso, existe a funcionalidade de enviar SMS para telefones pelo sistema de monitoramento Zabbix e a abertura de uma conexão de Internet de backup quando a óptica cai. Talvez isso esteja além do escopo deste artigo, mas direi imediatamente que, ao enviar SMS, seu tamanho deve caber no tamanho padrão de uma mensagem, porque O Mikrotik não os divide em partes e, quando chega uma mensagem longa, simplesmente não a envia; além disso, você precisa filtrar os caracteres enviados às mensagens, caso contrário, o SMS não será enviado.

PS: Estou complementando agora os batentes das versões anteriores do RouterOS que eram e como lidar com eles.
1. O tamanho máximo da mensagem e os caracteres usados ​​nas mensagens são limitados, então tive que lutar no nível do Zabbix, ou seja, para corrigir o modelo de envio de mensagens, para que, em resumo, ficou claro o que era a mensagem.
Configurações - Ações - Relatar para sms - Operações - Assunto: Problema: {HOST.NAME} {TRIGGER.NAME}
E na recuperação Relatório para sms - Operações de recuperação Assunto: Resolvido: {HOST.NAME} {TRIGGER.NAME}

2. Além disso, o próprio script, que envia dados para o modem, também reduz o tamanho máximo da mensagem enviada, porque se for muito longo, a mensagem não será enviada.
 #!/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 


Script php enviando dados
 <?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. Limpando a Caixa de entrada do 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


Se o script abaixo tiver um número de série diferente, no planejador, você precisará alterar a execução 7 para o número correspondente

Script do sistema
/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"

Script com número de série 7

4. Nas versões abaixo de 6.38, ajudou a reiniciar o modem também com scripts internos e um agendador
/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. E um pouco sobre reabastecimento de equipes. Para enviar um SMS, é permitido dizer em um host com Zabbix para gerar um arquivo RSC e depois enviá-lo para ftp no Mikrotik com um script, depois no próprio modem, pelo script no agendador para executar o arquivo necessário, os comandos são executados, mas me parecia mais conveniente usar o mecanismo acima.
No caso de tal envio, o código gerado é bastante simples.
/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"

Neste exemplo, caracteres extras já foram removidos e o comprimento é ilimitado. O script que processa o lançamento de acordo com este método após o exercício deve copiar um arquivo RSC vazio dentro do arquivo Mikrotik existente.
Não gostei desse método, pois, em princípio, não há proteção contra falhas e são possíveis mensagens não enviadas não controladas.

Na versão do RouterOS 6.44.1, os problemas de excesso de entrada já foram eliminados, portanto você não pode recorrer a métodos de limpeza coletiva de fazendas

Source: https://habr.com/ru/post/pt448124/


All Articles