Monitorimi dhe menaxhimi i pajisjeve në bazë të Linux/OpenWrt/Lede përmes portit 80, vazhdimi

Kjo është pjesa përfundimtare e artikullit, këtu është fillimi habr.com/ru/post/445568
Herën e kaluar kam shkruar për mënyrën se si realizova monitorimin e pajisjeve, tani do të flasim për menaxhim. Në diskutimet me "teknikët" nga ana e Klientit, shpesh e has limited perception over capabilities of such small devices (with low memory resources and performance), many believe that "the maximum we will need is to send a reboot, for something more serious - we will send a team."
Por praktika tregon se kjo nuk është plotësisht e vërtetë. Ja një listë e vogël e detyrave tipike:

  1. Diagnostikimi dhe zgjidhja e problemeve në rrjet. Pas portit ethernet të router-it tuaj zakonisht "jeton" një pajisje tjetër, e cila ka një adresë të brendshme ip. Ndonjëherë, ajo mund(duhet) të "ping-ojë". Ose menaxhimi i tunelit - nëse në router-in që punon me modem 3G papritur nuk ngritet tuneli, por ne e shohim vetë router-in.
  2. Mirëmbajtja sistemike. Përditësimi i firmware-it, përmirësimi i skripteve shërbyese.
  3. Ekvilibristika. Kjo mund të quhet "devijime", por koncepti i "ekvilibristikës" siç citoj, "aftësia e artistit cirk të mbajë ekuilibrin në një pozicion të paqëndrueshëm të trupit" — përshtatet më mirë. Situata të tilla lindin për shkak të kufizimeve të buxhetit të klientit. Më poshtë kam sjellë disa shembuj, por pasi nuk kanë lidhje të drejtpërdrejtë me temën e rrëfimit, i kam shkruar në shënimet

Monitorimi i Wi-FiTema që ka qenë në modë për pesë vitet e fundit kryesisht mes rrjeteve federale të shitjeve. Ju ecni ngadalë nëpër sallat e tregtisë, ndërsa telefoni juaj mobil me Wi-Fi të aktivizuar përpiqet të "krijojë lidhje" me ndonjë rrjet dhe me rregull dërgon paketa kërkese Probe, të cilat mund të analizohet për të llogaritur: sa shpesh vini në këtë dyqan, nëpër cilat trajektorish ecni etj. Pastaj të dhënat mblidhen, analizohet, vizatohen hartat termike dhe menaxherët për këto figura "sigurojnë" para nga drejtuesit ose investitorët. Mirë, ndërkohë... "nuk ka para, por ju qëndroni...", dhe rezultati (real) duhet të tregojë, aktivizohet kënga e vjetër e mirë "Po-po, pastaj sigurisht ne do të vendosim ciskat dhe gjithçka që dëshironi, por tani duhet të tregojmë rezultatet për Klientin! Për më tepër, harruam të themi, Klienti lejoi pajisjet tona të lidhen me hotspot-in e tij përmes Wi-Fi, por në kushte të përbashkëta, ndjeshëm si klientë të mysafirëve". Dhe kështu na duhet të krijojmë routera ekvilibristë - ngrihen disa subinterface WiFi, njëri prej të cilëve lidhet me hotspot-in, ndërsa tjetri monitoron ambientin, nervozisht shkarkon rezultatet tcpdump në vete, më pas përmbajtjen e skedarit e paketizon në një arkiv dhe me rrezik për t'u shqetësuar nga "tepria" përpiqet të hedhë përmbajtjen në serverin ftp. Nuk është çudi që routeri ekvilibrist shpesh "shin" dhe duhet ndonjëherë të "riaktivizohet" nga distanca.

RadiusKëtu është më e lehtë të përshkruhet situata me këtë pohim të klientit: "Ne duam një rrjet të decentralizuar hotspotësh, të cilët do të punonin me pajisje të cilat modelin e të cilave nuk e dimë paraprakisht, përmes kanaleve, por nuk dimë se cilat. Ah, harrojmë të themi, ne jo vetëm duam të tregojmë reklama klientëve, por gjithashtu të analizojmë gjithçka përreth vendit të vendosjes së hotspot-it. Jo, nuk e dimë ende pse, por do ta gjejmë një arsye, mos dyshoni, ne e kemi arritur këtë ide"

Dhe nuk duhet harruar se për shkak të një numri të madh të rrethanave të papërcaktuara paraprakisht, menaxhimi duhet të realizohet në kushte jostandarde, kur nuk mund të lidhemi drejtpërdrejt me routerin përmes ip-së: port dhe jemi të detyruar të presim aktivizimin nga ai. Nëse e shohim nga një këndvështrim më të gjerë, dialogu midis serverit dhe routerit mund të paraqitet kështu:

  • Router: përshëndetje. unë jam router-i i tillë, a ka ndonjë detyrë për mua?
  • Server: routeri i tillë të kam regjistruar, që je aktiv. Ja detyra: më trego rezultatin e komandës ifconfig?
  • Router: përshëndetje. Unë jam routeri i tillë, herën e kaluar kërkove ta tregoj rezultatin e ifconfig, ja ai. A ka ndonjë detyrë për mua?
  • Server: routeri i tillë të kam regjistruar, që je aktiv. S'ka detyra për ty.

Pyetja më interesante: si mund të dërgojë një router i largët një sasi të caktuar informacioni? Në pjesën e kaluar përshkrova që për shkak të kufizimeve të burimeve, ka vetëm wget të "shkurtuar", i cili punon vetëm përmes GET dhe asgjë më shumë, nuk ka as FTP klient, as curl. Në të vërtetë, na nevojitet një mënyrë universale, pavarësisht nga veçoritë e ndërtimit të imazhit. U ndala në përdorimin e wget. Në të vërtetë, si "u ndala" — thjesht nuk kisha zgjedhje 🙂

Menjëherë një sqarimZgjidhja ime për menaxhim është e efektshme, jo shumë e kufizuar dhe jam i sigurt - e gabuar, madje edhe nëse i përshtatet shumicës së klientëve të mi. Si mund të bëhej ndryshe - të shkruhej një utilitar të vogël, që dërgon të dhëna binare përmes portit 80 me POST. Ta inkorporosh në firmware-in e routerit dhe me ndihmën e bash-it të adresohet. Por realiteti është ky: a) duhet të jetë e shpejtë b) ndoshta duhet bërë gjithçka në "zooparkun" ekzistues të routerëve c) "mos e dëmto!" - nëse routeri punon dhe përmbush detyra të tjera, përpiqu të bësh ndryshime që nuk do të prekin funksionalitetin ekzistues.

Të kalojmë në zbatim. Le të supozojmë se klienti juaj dëshiron që nga zabbix, të rindezë routerin lehtësisht dhe pa ndonjë problem, "me një klik miu". Sot do të fillojmë përshkrimin e zbatimit me zabbix.
Në menunë "Administrim" -> "Skripte" shtojmë një skript të ri. E quajmë "Rindez", si komandë shkruajmë "php /usr/share/zabbix/reboot.php {HOST.HOST}"

Monitorimi dhe menaxhimi i pajisjeve në bazë të Linux/OpenWrt/Lede përmes portit 80, vazhdimi

Pastaj: Menuja "Monitorim" -> "Të dhënat e fundit" -> "Klikim me të djathtën mbi nyjën e nevojshme të rrjetit". Kështu do të duket menunë pas shtimit të skriptit.

Monitorimi dhe menaxhimi i pajisjeve në bazë të Linux/OpenWrt/Lede përmes portit 80, vazhdimi
Saktësisht, skripti reboot.php e vendosim në direktorinë /usr/share/zabbix (në ju mund të jetë ndryshe, unë përdor direktorinë rrënjësore të zabbix-it).

Sqarim për sigurinëPër sqarimin në skript, unë përdor vetëm ID-në e routerit, por nuk përdor fjalëkalimin. Në versionin e punës, kjo nuk rekomandohet! Pse e bëra këtë: sepse është një pyetje e madhe — ku t'i ruajmë fjalëkalimet për routerat? Në vetë Zabbix në "të dhënat inventar?" Praktikë e kundërthënëshme. Si një mundësi: kufizoni aksesin nga jashtë në vetë skedarin reboot.php

Skedari reboot.php

set_charset("utf8");
		
	// "Dërgojmë" komandën reboot duke ndryshuar fushën task në tabelën users. Në fushën task mund të dërgojmë çdo komandë.
	$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();
?>

Në substancë, kjo është gjithçka. Pyetja e hapur mbetet "si të marrim rezultatin e ekzekutimit të komandës nga pajisja". Le të shqyrtojmë problemin duke marrë si shembull komandën ifconfig. Një komandë e tillë mund të dërgohet pajisjes:

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

, ku:
message=`ifconfig` — ne i caktuam variablës $message rezultatin e daljes nga komanda ifconfig
wget "xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai/a.php — skripti ynë a.php, që regjistron routerat dhe pranon mesazhe nga ata
u=user&p=password!&m=$message — kredencialet dhe vlera e variablës së pyetjes m — i cakton përmbajtjen e variablës $message
-O /tmp/out.txt — dalja në skedarin /tmp/out.txt në këtë rast nuk na nevojitet, por nëse nuk e caktoni këtë parametrin, wget nuk funksionon

Pse kjo funksionon keqSepse kjo është një vrimë potenciale në siguri. Gabimi më i padëmshëm që mund të ndodhë — është në rastin kur në daljen e komandës tuaj ndodhet ndonjë simbol „&“. Prandaj duhet të filtrohet gjithçka që dërgohet nga routerat dhe gjithçka që vjen në server. Po, më vjen turp, me të vërtetë. Në mbrojtjen time mund të shkruaj vetëm — se i gjithë artikulli është dedikuar mënyrës së menaxhimit të routerave me firmware të paparashikueshëm paraprakisht, me kanale lidhjeje të paparashikueshme paraprakisht.

Dhe kështu kam bërë një plan për të ardhmen: ende nuk kam arritur të kuptoj si të pasqyroj rezultatet (p.sh. rezultatin e ekzekutimit të komandës) që vijnë në server duke përdorur mjete standarde të Zabbix.

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

Burimi: habr.com

Blini hostim të besueshëm për faqe interneti me mbrojtje DDoS, serverë VPS VDS 🔥 Blini hostim të besueshëm për faqe interneti me mbrojtje DDoS, serverë VPS VDS - ProHoster