Monitorimi dhe menaxhimi në distancë i pajisjeve të bazuara në Linux/OpenWrt/Lede përmes portit 80, vazhdoi

Kjo është pjesa e fundit e artikullit, këtu është fillimi habr.com/en/post/445568
Herën e fundit që shkrova se si zbatova monitorimin e pajisjes, tani do të flasim për menaxhimin. Në diskutimet me "teknikët" nga ana e klientit, shpesh ndeshem me një perceptim të kufizuar të aftësive të pajisjeve të tilla të vogla (me burime dhe performancë të ulët memorie), shumë besojnë se "më së shumti që na duhet është të dërgojmë një rindezje, për diçka më shumë. seriozisht do të dërgojmë një ekip”.
Por praktika tregon se kjo nuk është plotësisht e vërtetë. Këtu është një listë e vogël e detyrave të zakonshme tipike:

  1. Diagnostifikimi i rrjetit dhe zgjidhja e problemeve. Prapa portit ethernet të ruterit tuaj zakonisht ekziston një pjesë tjetër e harduerit që ka adresën e vet të brendshme IP. Ndonjëherë, ju mund (duhet) të "ping" atë. Ose menaxhimi i tunelit - nëse tuneli papritmas nuk ngrihet në një ruter që funksionon përmes një modemi 3G, por ne mund të shohim vetë ruterin.
  2. Mirëmbajtja e sistemit. Përditësimi i firmuerit, përmirësimi i skriptit të shërbimit.
  3. Akti balancues. Ky mund të quhet "perversion", por koncepti i "ekuilibrit" siç, citoj unë, "Aftësia e një interpretuesi cirku për të mbajtur ekuilibrin në një pozicion të paqëndrueshëm të trupit" - përshtatet më mirë. Situata të tilla lindin për shkak të buxhetit të kufizuar të klientit. Më poshtë kam dhënë disa shembuj, por... Nuk lidhen drejtpërdrejt me temën e tregimit, i kam vendosur në shënime

Monitorimi i Wi-FiNjë temë në modë për pesë vitet e fundit, kryesisht midis zinxhirëve federalë të shitjes me pakicë. Ju jeni duke shëtitur me nge nëpër katet e tregtimit dhe telefoni juaj celular me Wi-Fi të ndezur, në përpjekje për t'u "ngjitur" në ndonjë fije të rrjetit, dërgon rregullisht pako të kërkesës së hetimit që mund të analizohen për të llogaritur për ju : sa shpesh vini në këtë dyqan, për çfarë arsyesh ecni nëpër trajektore etj. Më pas mblidhen të dhënat, analizohen, vizatohen hartat e nxehtësisë dhe menaxherët “zhvatin” para nga menaxhmenti ose investitorët për foto të tilla. Epo, tani për tani... "s'ka para, por ju mbajeni...", dhe rezultati (i vërtetë) tashmë duhet të shfaqet, fillon kënga e mirë e vjetër: "Po, po, atëherë sigurisht që ne do të instalojë cis dhe gjithçka që dëshironi, por tani duhet t'i tregojmë klientit rezultatin! Meqë ra fjala, harruam të themi se Klienti na lejoi të lidhnim pajisjet tona me hotspot-in e tij nëpërmjet Wi-Fi, por në një bazë të përgjithshme, njësoj sikur të ishim klientë të ftuar.” Dhe kështu duhet të bëjmë ruterë balancues - ngrihen disa nënndërfaqe WiFi, njëra prej të cilave ngjitet në pikën e nxehtë dhe e dyta monitoron mjedisin, ngarkon furishëm rezultatin tcpdump në vetvete, më pas paketon përmbajtjen e skedarit në një arkiv dhe rrezikon vdes nga "ngrënia e tepërt" përpiqet të nxjerr përmbajtjen në serverin FTP. Nuk është për t'u habitur që ruteri balancues shpesh "prihet" dhe disi duhet të "ringjallet" nga distanca.

rrezeËshtë më e lehtë të përshkruhet situata këtu me diçka si kjo deklaratë nga klienti: “Ne duam një rrjet të decentralizuar pikash të nxehta që do të funksiononin në pajisje, modeli i të cilave nuk dihet paraprakisht, përmes kanaleve, por cilat nuk i dimë ende. Oh, harruam të themi, jo vetëm që duam t'u shfaqim reklama klientëve, por gjithashtu të analizojmë gjithçka rreth vendndodhjes ku është instaluar hotspot-i. Jo, nuk e dimë ende pse, por do ta kuptojmë, mos e dyshoni, ne ishim në gjendje të dilnim me këtë ide.”

Dhe nuk duhet të harrojmë se për shkak të shumë rrethanave të panjohura më parë, kontrolli duhet të kryhet në kushte jo standarde, kur nuk mund të lidhemi me ruterin drejtpërdrejt përmes portit IP: dhe jemi të detyruar të presim thjesht aktivitetin prej tij. Nëse abstragojmë veten, dialogu midis serverit dhe ruterit mund të përfaqësohet si ky:

  • router: Përshëndetje. Unë jam një ruter i tillë dhe i tillë, a ka ndonjë detyrë për mua?
  • Serveri: router filan e keshtu, te kam regjistruar, se je gjalle. Këtu është sfida: më tregoni rezultatin e komandës ifconfig?
  • router: Përshëndetje. Unë jam një ruter i tillë dhe i tillë, herën e fundit që keni kërkuar të tregoni rezultatin e ifconfig, ja ku është. A ka ndonjë detyrë për mua?
  • Serveri: router filan e keshtu, te kam regjistruar, se je gjalle. Nuk ka detyra për ju.

Pyetja më interesante: si mund të dërgojë një ruter në distancë një sasi të caktuar informacioni? Në pjesën e fundit, përshkrova se për shkak të burimeve të kufizuara, ruteri ka vetëm një wget "të zhveshur", i cili funksionon vetëm përmes GET dhe asgjë tjetër; nuk ka klient FTP ose curl. Më saktësisht, ne kemi nevojë për një metodë universale, pavarësisht nga veçoritë e montimit të imazhit. Unë vendosa të përdor wget. Më saktësisht, si "ndalova" - thjesht nuk kisha zgjidhje :)

Vetëm një mohimZgjidhja ime e menaxhimit po funksionon, jo shumë e kufizuar, dhe jam i sigurt se është e shtrembër, edhe nëse i përshtatet shumicës së klientëve të mi. Si mund ta bëni këtë me mençuri - shkruani një mjet të vogël që dërgon të dhëna binare POST përmes portit 80. Përfshijeni atë (shërbimin) në firmware-in e ruterit dhe aksesojeni atë duke përdorur bash. Por realiteti është se: a) duhet të bëjmë shpejt b) ndoshta duhet të bëjmë gjithçka në "kopshtin zoologjik të ruterave" ekzistues c) "Mos bëni dëm!" — nëse ruteri po punon dhe po kryen detyra të tjera, përpiquni të bëni ndryshime që nuk do të ndikojnë në funksionalitetin ekzistues.

Le të kalojmë në zbatimin. Le të themi se klienti juaj dëshiron të rinisë ruterin nga zabbix lehtësisht dhe natyrshëm, me një "klik të mausit". Sot do të fillojmë të përshkruajmë zbatimin me Zabbix.
Në menynë "Administrimi" -> "Skriptet", shtoni një skript të ri. Ne e quajmë atë "Reboot", shkruani "php /usr/share/zabbix/reboot.php {HOST.HOST}" si komandë

Monitorimi dhe menaxhimi në distancë i pajisjeve të bazuara në Linux/OpenWrt/Lede përmes portit 80, vazhdoi

Tjetra: Menyja "Monitorimi" -> "Të dhënat e fundit" -> "Klikoni me të djathtën në nyjen e dëshiruar të rrjetit". Kështu do të duket menyja pas shtimit të skenarit.

Monitorimi dhe menaxhimi në distancë i pajisjeve të bazuara në Linux/OpenWrt/Lede përmes portit 80, vazhdoi
Prandaj, ne vendosim skriptin reboot.php në drejtorinë /usr/share/zabbix (e juaja mund të jetë e ndryshme, unë përdor direktorinë rrënjë zabbixa).

Mohim i SigurisëPër ta bërë shpjegimin më të qartë në skript, unë përdor vetëm ID-në e routerit, por nuk përdor fjalëkalimin. Nuk rekomandohet ta bëni këtë në versionin e prodhimit! Pse e bëra këtë: sepse pyetja e madhe është se ku të ruhen fjalëkalimet për ruterat? Në vetë zabbixe në "të dhënat e inventarit"? Praktikë e diskutueshme. Përndryshe: kufizoni aksesin e jashtëm në vetë skedarin reboot.php

Skedari reboot.php

<?php
	// присваиваем параметры с консоли переменным
	$user = $argv[1];
	// ВНИМАНИЕ. Вот здесь в целях безопасности все-таки прописывать пароль устройства! Но для демонстрации мы будем обращаться к базе данных без использования пароля. 
	//$password = $argv[2];
		
	$conn=new mysqli("localhost","db_user","db_password","db_name");
	if (mysqli_connect_errno()) {
		exit();
	}
	$conn->set_charset("utf8");
			
	// "Отправляем" команду reboot за счет изменения поля task таблицы users. В поле task можно отправлять любую команду.
	$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();
?>

Kjo eshte e gjitha. Pyetja mbetet e hapur: "si të merrni rezultatin e ekzekutimit të një komande nga pajisja". Le të shohim detyrën duke përdorur komandën ifconfig si shembull. Kjo komandë mund të dërgohet në pajisje:

message=`ifconfig`; wget "http://xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai/a.php?u=user&p=password!&m=$message" -O /tmp/out.txt

, ku:
mesazh=`ifconfig` — ne caktojmë rezultatin e daljes së komandës ifconfig në ndryshoren $message
wget "xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai/a.php — skripti ynë a.php që regjistron ruterat dhe merr mesazhe prej tyre
u=përdoruesi&p=fjalëkalimi!&m=$mesazh — kredencialet dhe vlera e ndryshores së kërkesës m — cakton përmbajtjen e ndryshores $message
-O /tmp/out.txt - nuk kemi nevojë për dalje në skedarin /tmp/out.txt në këtë rast, por nëse ky parametër nuk është specifikuar, wget nuk funksionon

Pse kjo nuk funksionon?Sepse është një vrimë e mundshme sigurie. Gabimi më i padëmshëm që mund të ndodhë është nëse, për shembull, ka një karakter "&" në daljen e komandës suaj. Prandaj, është e nevojshme të filtroni gjithçka që dërgohet nga ruterët dhe gjithçka që vjen në server. Po, më vjen turp, vërtet. Në mbrojtjen time, mund të shkruaj vetëm se i gjithë artikulli i kushtohet mënyrës së menaxhimit të ruterave me firmware dhe kanale komunikimi të paracaktuara që nuk janë përcaktuar paraprakisht.

Epo, një fillim për të ardhmen: Unë nuk e kam kuptuar ende se si të përdor mjetet standarde zabbix për të pasqyruar rezultatet (për shembull, rezultatin e ekzekutimit të një komande) që vijnë në server.

Ju kujtoj se të gjitha burimet mund të merren nga depoja e Git në: github.com/BazDen/iotnet.online.git

Burimi: www.habr.com

Shto një koment