Mikrotik. Sterowanie poprzez SMS za pomocą serwera WWW

Dzień dobry wszystkim!

Tym razem postanowiłem opisać sytuację, która nie wydaje się być szczególnie opisana w Internecie, choć są na ten temat pewne wskazówki, ale większość z nich to było po prostu długie, metodyczne szperanie w kodzie i wiki samego Mikrotika.

Rzeczywiste zadanie: zaimplementować sterowanie kilkoma urządzeniami za pomocą wiadomości SMS na przykładzie włączania i wyłączania portów.

Do dyspozycji:

  1. Drugi router CRS317-1G-16S+
  2. Punkt dostępowy Mikrotik NETMETAL 5
  3. Modem LTE R11e-LTE

Zacznijmy od tego, że wspaniały punkt dostępowy Netmetal 5 ma na pokładzie wlutowane złącze karty SIM oraz port do instalacji modemu LTE. Dlatego w tym punkcie zakupiono zasadniczo najlepszy modem z tego, co było dostępne i obsługiwane przez system operacyjny samego punktu, a mianowicie R11e-LTE. Access point został rozebrany, wszystko zostało zainstalowane na swoim miejscu (choć trzeba wiedzieć, że karta SIM znajduje się pod modemem i nie da się jej wyjąć bez wyjmowania płyty głównej), więc sprawdź działanie karty SIM, w przeciwnym razie będziesz musiał kilkakrotnie zdemontować punkt dostępu.

Następnie wywierciliśmy kilka otworów w obudowie, zamontowaliśmy 2 pigtaile i przymocowaliśmy końce do modemu. Niestety nie zachowały się żadne zdjęcia z procesu. Natomiast do pigtaili przymocowano uniwersalne anteny z podstawą magnetyczną.

Główne etapy konfiguracji są dość dobrze opisane w Internecie, z wyjątkiem drobnych luk w interakcjach. Na przykład modem przestaje odbierać wiadomości SMS, gdy nadejdzie 5 z nich i zawisną w skrzynce odbiorczej; usunięcie wiadomości i ponowne uruchomienie modemu nie zawsze rozwiązuje problem. Ale w wersji 6.44.1 odbiór działa stabilniej. Skrzynka odbiorcza wyświetla ostatnie 4 SMS-y, pozostałe są automatycznie kasowane i nie zakłócają życia.

Głównym celem eksperymentu jest wyłączenie i włączenie interfejsów na dwóch routerach w tej samej sieci fizycznej. Główną trudnością było to, że Mikrotik nie obsługuje zarządzania poprzez SNMP, a jedynie umożliwia odczyt wartości. Dlatego musiałem kopać w innym kierunku, a mianowicie w API Mikrotika.

Nie ma jasnej dokumentacji, jak to kontrolować, więc musiałem poeksperymentować i ta instrukcja została sporządzona na potrzeby przyszłych prób.

Aby zarządzać wieloma urządzeniami, będziesz potrzebować dostępnego i działającego serwera WWW w sieci lokalnej, który będzie musiał być kontrolowany za pomocą poleceń Mikrotika.

1. W Netmetal 5 musisz utworzyć kilka skryptów, aby odpowiednio je włączyć i wyłączyć

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. Utwórz 2 skrypty na serwerze WWW (oczywiście w tym przypadku w systemie musi być zainstalowany 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. Pobierz routeros_api.class.php z forum Mikrotik i umieść go w dostępnym katalogu na serwerze.

Zamiast sfp-sfpplus16 musisz podać nazwę interfejsu, który ma zostać wyłączony/włączony.

Teraz podczas wysyłania wiadomości na numer w formularzu

:cmd СЕКРЕТНЫЙКОД script enableiface
или
:cmd СЕКРЕТНЫЙКОД script disableiface 

NETMETAL uruchomi odpowiedni skrypt, który z kolei wykona polecenie na serwerze WWW.

Szybkość operacji przy odbiorze SMS-a to ułamek sekundy. Działa stabilnie.

Dodatkowo istnieje możliwość wysyłania SMS-ów na telefony przez system monitorowania Zabbix i otwierania zapasowego połączenia internetowego w przypadku awarii optyki. Być może wykracza to poza zakres tego artykułu, ale od razu powiem, że wysyłając SMS-y, ich długość powinna mieścić się w standardowym rozmiarze jednej wiadomości, ponieważ... Mikrotik nie dzieli ich na części, a gdy przyjdzie długa wiadomość, po prostu jej nie wysyła, dodatkowo trzeba filtrować znaki przesyłane w wiadomościach, inaczej SMS nie zostanie wysłany.

Źródło: www.habr.com

Dodaj komentarz