Dies ist der letzte Teil des Artikels, hier ist der Anfang
Im letzten Mal habe ich darüber geschrieben, wie ich die Überwachung von Geräten umgesetzt habe, jetzt geht es um die Verwaltung. In Diskussionen mit den "Technikern" auf der Kundenseite stoße ich häufig auf ein begrenztes Verständnis der Möglichkeiten solcher kleinen Geräte (mit geringen Ressourcen an Speicher und Leistung); viele glauben, dass „das Maximum, was wir benötigen, ein Neustart ist, für etwas Ernsteres – schicken wir ein Team.“
Aber die Praxis zeigt, dass es nicht ganz so ist. Hier ist eine kleine Liste typischer Aufgaben:
- Netzwerkdiagnose und -behebung. Hinter dem Ethernet-Port Ihres Routers lebt in der Regel ein anderes Gerät mit einer eigenen internen IP-Adresse. Manchmal kann man (oder sollte man) es „pingen“. Oder die Verwaltung eines Tunnels – wenn auf dem Router, der über ein 3G-Modem arbeitet, plötzlich der Tunnel nicht hochgeht, aber wir den Router sehen.
- Systemwartung. Firmware-Updates, Upgrade von Dienstskripten.
- Akrobatik. Das könnte man als „Pervertierungen“ bezeichnen, aber der Begriff „Akrobatik“ wie, zitiere, „die Fähigkeit eines Zirkusartisten, im Gleichgewicht zu bleiben, wenn der Körper sich in einer instabilen Position befindet“ — passt besser. Solche Situationen entstehen aufgrund des begrenzten Budgets des Auftraggebers. Ich habe ein paar Beispiele angeführt, aber da sie keinen direkten Bezug zum Thema der Erzählung haben, habe ich sie in die Anmerkungen verschoben.
Wi-Fi-ÜberwachungDas modische Thema der letzten fünf Jahre vor allem unter den großen Einzelhandelsketten. Man schlendert gemächlich durch die Verkaufsbereiche, während das Mobiltelefon mit aktiviertem WLAN in dem Versuch, sich mit einem Netzwerk zu verbinden, regelmäßig Probeanfragen versendet, die analysiert werden können, um zu zählen, wie oft man diesen Laden besucht, auf welchen Wegen man sich bewegt usw. Die gesammelten Daten werden analysiert, Wärmebilder erstellt, und die Manager nutzen solche Grafiken, um Geld von den Führungskräften oder Investoren zu bekommen. Aber währenddessen... "Es gibt kein Geld, aber haltet durch...", und das echte Ergebnis muss bereits vorgelegt werden, es ertönt das alte gute Lied: "Ja, ja, später stellen wir natürlich die Chips und alles, was Sie wünschen, bereit, aber jetzt müssen wir dem Auftraggeber das Ergebnis zeigen! Übrigens haben wir vergessen zu sagen, dass der Auftraggeber uns erlaubt hat, unsere Geräte über WLAN mit seinem Hotspot zu verbinden, aber unter allgemeinen Bedingungen, einfach als ob wir Gäste wären." Und so müssen wir Router-Akrobaten bauen – es werden mehrere WLAN-Schnittstellen aktiviert, einer davon verbindet sich mit dem Hotspot, der andere überwacht die Umgebung, speichert das Ergebnis des tcpdump und versucht dann, den Inhalt der Datei in ein Archiv zu packen und, aus Angst zu "überessen", versucht er, den Inhalt auf einen FTP-Server zu übermitteln. Es ist nicht verwunderlich, dass der Router-Akrobat oft "ausbricht" und es notwendig ist, ihn irgendwie aus der Ferne zu "reanimieren".
RadiusHier lässt sich die Situation einfacher mit der folgenden Aussage des Auftraggebers beschreiben: "Wir wollen ein dezentrales Netzwerk von Hotspots, die auf Geräten funktionieren, deren Modell im Voraus nicht bekannt ist, über Kanäle, deren Art wir noch nicht wissen. Ach, wir haben vergessen zu sagen, dass wir nicht nur Werbung für die Kunden zeigen, sondern auch alles rund um den Standort des Hotspots analysieren wollen. Nein, wir wissen noch nicht warum, aber wir werden es uns ausdenken, keine Sorge, wir konnten diese Idee ja auch erfinden."
Und man darf nicht vergessen, dass aufgrund vieler unvorhersehbarer Umstände das Management unter ungewöhnlichen Bedingungen durchgeführt werden muss, wenn wir uns nicht direkt über IP: Port mit dem Router verbinden können und gezwungen sind, einfach auf Anzeichen von Aktivität zu warten. Wenn man abstrahiert, kann der Dialog zwischen dem Server und dem Router so dargestellt werden:
- Router: Hallo. Ich bin Router so und so, gibt es Aufgaben für mich?
- Server: Router so und so, ich habe dich registriert, dass du aktiv bist. Hier ist die Aufgabe: Zeig mir das Ergebnis des Befehls ifconfig?
- Router: Hallo. Ich bin Router so und so, beim letzten Mal hast du mich gebeten, das Ergebnis von ifconfig zu zeigen, hier ist es. Gibt es Aufgaben für mich?
- Server: Router so und so, ich habe dich registriert, dass du aktiv bist. Es gibt keine Aufgaben für dich.
Die interessanteste Frage: Wie kann der entfernte Router ein bestimmtes Datenvolumen senden? In der vorherigen Ausgabe habe ich beschrieben, dass auf dem Router wegen eingeschränkter Ressourcen nur eine „eingeschränkte“ wget-Version vorhanden ist, die nur über GET funktioniert und nicht mehr. Genauer gesagt, wir brauchen eine universelle Methode, unabhängig von den Besonderheiten des Bildaufbaus. Ich habe mich für die Verwendung von wget entschieden. Genauer gesagt, nun ja, wie soll ich sagen — ich hatte einfach keine Wahl 🙂
Zunächst eine VorbemerkungMeine Lösung für die Verwaltung ist funktional, nicht stark eingeschränkt, und ich bin mir sicher — fehlerhaft, auch wenn sie die meisten meiner Kunden zufriedenstellt. Wie man es richtig machen könnte — eine kleine Dienstprogramm schreiben, das über Port 80 Binärdaten per POST sendet. Es in die Firmware des Routers integrieren und dann mit Hilfe von Bash darauf zugreifen. Aber die Realität ist so, dass: a) man schnell handeln muss b) alles möglicherweise auf dem bestehenden „Zoo von Routern“ erledigt werden muss c) „nicht schaden!“ — wenn der Router funktioniert und andere Aufgaben erfüllt, versuche, Änderungen einzuführen, die die bestehende Funktionalität nicht beeinträchtigen.
Kommen wir zur Umsetzung. Angenommen, Ihr Kunde möchte den Router von Zabbix aus einfach und unkompliziert, mit einem „Mausklick“ neu starten. Heute beginnen wir mit der Beschreibung der Umsetzung in Zabbix.
Im Menü „Verwaltung“ -> „Skripte“ fügen wir ein neues Skript hinzu. Wir nennen es „Neustart“ und als Befehl schreiben wir „php /usr/share/zabbix/reboot.php {HOST.HOST}“

Dann: Menü „Überwachung“ -> „Letzte Daten“ -> „Rechtsklick auf den gewünschten Netzwerk-Knoten“. So wird das Menü nach dem Hinzufügen des Skripts aussehen.

Das Skript reboot.php legen wir im Verzeichnis /usr/share/zabbix ab (bei Ihnen könnte es anders sein, ich benutze das Wurzelverzeichnis von Zabbix).
Vorankündigung zur SicherheitZur Veranschaulichung im Skript verwende ich nur die ID des Routers, aber kein Passwort. In der Produktionsversion wird das nicht empfohlen! Warum ich das gemacht habe: Weil die große Frage ist – wo sollten die Passwörter für die Router gespeichert werden? In den „Inventardaten“ von Zabbix? Eine widersprüchliche Praxis. Eine Möglichkeit: den Zugang von außen zu der Datei reboot.php beschränken.
Die Datei reboot.php
set_charset("utf8");
// "Senden" Sie den Befehl reboot durch Ändern des Feldes task in der Tabelle users. Im Feld task kann jede beliebige Befehle gesendet werden.
$sql_users=$conn->prepare("UPDATE users SET task='reboot' WHERE id=? AND status='active';");
$sql_users->bind_param('s', $user);
$sql_users->execute();
$sql_users->close();
?>Das ist alles. Die offene Frage bleibt: „Wie erhält man das Ergebnis der Ausführung des Kommandos vom Gerät?“ Schauen wir uns die Aufgabe anhand des Kommandos ifconfig an. Ein solches Kommando kann an das Gerät gesendet werden:
message=`ifconfig`; wget "http://xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai/a.php?u=user&p=password!&m=$message" -O /tmp/out.txt, wo:
message=`ifconfig` — wir weisen der Variablen $message das Ergebnis der Ausgabe des Kommandos ifconfig zu.
wget „ — unser Skript a.php, das die Router registriert und Nachrichten von ihnen annimmt.
u=user&p=password!&m=$message — die Zugangsdaten und der Variable m wird der Inhalt der Variablen $message zugewiesen.
-O /tmp/out.txt — die Ausgabe in die Datei /tmp/out.txt brauchen wir in diesem Fall nicht, aber wenn man diesen Parameter nicht angibt, funktioniert wget nicht.
Warum das nicht richtig funktioniertWeil es ein potenzielles Sicherheitsrisiko darstellt. Der harmloseste Fehler, der auftreten kann, ist, wenn in der Ausgabe Ihres Kommandos zum Beispiel das Zeichen „&“ vorhanden ist. Daher müssen alle Daten, die von den Routern gesendet werden und die auf dem Server eingehen, gefiltert werden. Ja, ich schäme mich, ehrlich. Zu meiner Verteidigung kann ich nur sagen, dass der ganze Artikel darauf abzielt, wie Router mit einer im Voraus nicht definierten Firmware und unbestimmten Kommunikationskanälen verwaltet werden können.
Nun habe ich eine Grundlage für die Zukunft gelegt: Ich habe noch nicht herausgefunden, wie ich mit den Standardmitteln von Zabbix Ergebnisse (zum Beispiel das Ergebnis der Ausführung eines Kommandos), die auf den Server kommen, darstelle.
Ich erinnere daran, dass alle Quellcodes vom Git-Repository unter folgender Adresse heruntergeladen werden können:
Quelle: habr.com
