Monitorimi dhe menaxhimi në distancë i pajisjeve që bazohen në Linux/OpenWrt/Lede përmes portit 80, vazhdim

Kjo është pjesa përfundimtare e artikullit, ja fillimi habr.com/sq/post/445568
Herën e kaluar shkrova për mënyrën se si realizova monitorimin e pajisjeve, tani do flas për menaxhimin. Në diskutimet me "teknikët" nga ana e Porositësit, shpesh përballem me perceptime të kufizuara mbi mundësitë e këtyre pajisjeve të vogla (me burime të ulta memorie dhe performancë), shumë mendojnë se "maksimumi që na nevojitet është të dërgojmë një ribashkim, për diçka më serioze - do dërgojmë një ekip."
Por praktika tregon se nuk është aq e thjeshtë. Ja një listë e vogël e detyrave tipike të zakonshme:

  1. Diagnostikimi i rrjetit dhe zgjidhja e problemeve. Pas portit ethernet të router-it tuaj zakonisht "jeton" një pajisje tjetër, e cila ka një ip-adres të brendshëm. Nd sometimes, ajo mund (ose duhet) të "ping-ojë". Ose menaxhimi i tunelit - nëse në router-in që punon përmes një modemi 3G papritmas nuk ngrihet tuneli, por ne e shohim router-in.
  2. Mërgata e sistemit. Përditësimi i firmware-it, përmirësimi i skenarëve të shërbimeve.
  3. Ekvilibristika. Kjo mund të quhet "përzjerje", por koncepti i "ekvilibristikës", siç citoj "aftësia e një artisti cirku për të ruajtur ekuilibrin në një pozicion të paqëndrueshëm të trupit" i përshtatet më shumë. Situata të tilla ndodhin për shkak të kufizimeve buxhetore të porositësit. Më poshtë kam paraqitur disa shembuj, por pasi nuk kanë një lidhje të drejtpërdrejtë me temën e tregimit, i kam ndarë në shënime.

Monitorimi Wi-FiNjë temë e modës në pesë vitet e fundit kryesisht mes rrjeteve federale të shitjes me pakicë. Ju po ecni ngadalë nëpër sallat tregtare, ndërsa telefoni juaj celular me Wi-Fi të aktivizuar, në përpjekjet për të "kapur" ndonjë rrjet, rregullisht dërgon paketa Probe Request, të cilat mund të analizohet, me qëllim që të llogarisin: sa shpesh vini në këtë dyqan, cilat janë trajektoret që kaloni dhe kështu me radhë. Më pas, të dhënat mblidhen, analizohet, krijohen hartat termike dhe menaxherët për këto figura "marrin" para nga menaxhimi ose investitorët. Ndërsa tani... "nuk ka para, por ju qëndroni...", dhe rezultati (real) duhet të tregojë, duke aktivizuar këngën e mirë të vjetër "Po, pas kësaj do vendosim siç dhe gjithçka tjetër që dëshironi, por tani duhet të tregojmë rezultatin ndaj Porositësit! Pas përmendëm që Porositësi lejoi pajisjet tona të lidheshin me hotspot-in e tij përmes Wi-Fi, por në mënyrë të përgjithshme, thjesht sikur të ishim klientë mysafirë." Dhe kështu, duhet të krijojmë routera-ekvilibriste - ngrihen disa subinterface WiFi, njëri prej të cilëve lidhet me hotspot-in, ndërsa tjetri monitoron ambientin, me nervozizëm shkarkon rezultatin e tcpdump-it në veten e tij, më pas përmbajtjen e skedarit e kompreson në një arkiv dhe rrezikon të vdesë nga "teprimi" përpiqet të shkarkojë përmbajtjen në serverin ftp. Nuk është çudi që router-ekvilibrist shpesh "shkëputet" dhe ndonjëherë duhet të "rikuperohet" në distancë.

RadiusKëtu është më e lehtë të përshkruhet situata me një pohim të Porositësit: "Ne duam një rrjet të decentralizuar hotspotesh që të funksionojnë në pajisje të cilat modeli i tyre nuk është i njohur paraprakisht, përmes kanaleve, por cilat nuk e dimë ende. Ah, haruam të themi, ne nuk duam vetëm të tregojmë reklamat për klientët, por gjithashtu të analizojmë gjithçka përreth vendit të instalimit të hotspotit. Jo, ne ende nuk e dimë pse, por do të mendojmë, mos dyshoni, ne arritëm të mendojmë këtë ide"

Dhe nuk duhet harruar se për shkak të masës së rrethanave të pa përkufizuara paraprakisht, menaxhimi duhet të realizohet në kushte jo standarde, kur ne s'mund të lidhemi drejtpërdrejt me router-in përmes ip: portit dhe jemi të detyruar të presim manifestimin e aktivitetit prej tij. Nëse abstrahojmë, dialogu midis serverit dhe router-it mund të paraqitet kështu:

  • Router: pĂ«rshĂ«ndetje. unĂ« jam router-i i tillĂ«, a ka pĂ«r mua detyra?
  • ХДрĐČДр: router-i i tillĂ« qĂ« tĂ« kam regjistruar, qĂ« je gjallĂ«. Ja detyra: mĂ« tregoni rezultatin e komandĂ«s ifconfig?
  • Router: pĂ«rshĂ«ndetje. unĂ« jam router-i i tillĂ«, herĂ«n e kaluar kĂ«rkuat tĂ« tregoj rezultatin ifconfig, ja ai. A ka pĂ«r mua ndonjĂ« detyrĂ«?
  • ХДрĐČДр: router-i i tillĂ« qĂ« tĂ« kam regjistruar, qĂ« je gjallĂ«. Nuk ka detyra pĂ«r ty.

Pyetja mĂ« interesante: si mund tĂ« dĂ«rgojĂ« routeri i largĂ«t njĂ« volum tĂ« caktuar informacioni? NĂ« pjesĂ«n e kaluar shkrova se nĂ« router pĂ«r shkak tĂ« kufizimeve tĂ« burimeve ka vetĂ«m wget tĂ« "shkurtuar", qĂ« funksionon vetĂ«m pĂ«rmes GET dhe asgjĂ« mĂ« tepĂ«r, nuk ka klient ftp, as curl. NĂ« tĂ« vĂ«rtetĂ«, ne na nevojitet njĂ« mĂ«nyrĂ« universale, pavarĂ«sisht nga veçoritĂ« e ndĂ«rtimit tĂ« imazhit. U ndala nĂ« pĂ«rdorimin e wget. MĂ« saktĂ«sisht, si "u ndala" - thjesht nuk kisha alternativĂ« 🙂

MenjĂ«herĂ« njĂ« rezervĂ«Zgjidhja ime pĂ«r menaxhimin e rrjetit Ă«shtĂ« efikase, e kufizuar dhe unĂ« jam i sigurt se Ă«shtĂ« ndonjĂ«herĂ« jo optimale, megjithĂ«se i kĂ«naq shumicĂ«n e klientĂ«ve tĂ« mi. Si do tĂ« ishte e mundur tĂ« realizohej mĂ« mirĂ« — tĂ« shkruhej njĂ« utilitar i vogĂ«l qĂ« dĂ«rgon tĂ« dhĂ«na binare pĂ«rmes portit 80 duke pĂ«rdorur POST. Ta pĂ«rfshijmĂ« atĂ« (utilitarin) nĂ« firmware-in e router-it dhe mĂ« pas tĂ« komunikojmĂ« me tĂ« pĂ«rmes bash-it. MegjithatĂ«, realiteti Ă«shtĂ« se: a) ne kemi nevojĂ« pĂ«r shpejtĂ«si b) ndoshta duhet tĂ« punojmĂ« me “zooparkun” ekzistues tĂ« routerĂ«ve c) “mos dĂ«mto!” — nĂ«se router-i funksionon dhe kryen detyra tĂ« tjera, pĂ«rpiquni tĂ« bĂ«ni ndryshime qĂ« nuk dĂ«mtojnĂ« funksionalitetin ekzistues.

TĂ« kalojmĂ« nĂ« implementim. Supozoni se klienti juaj dĂ«shiron tĂ« ri-fillojĂ« router-in nga zabbix lehtĂ«sisht dhe pa pengesa, me njĂ« “klik”. Sot do tĂ« fillojmĂ« pĂ«rshkrimin e implementimit me zabbix-in.
Në menunë «Administrimi» -> «Scripts» shtoni një skenar të ri. Ta quajmë atë «Reboot», si komandë shkruajmë «php /usr/share/zabbix/reboot.php {HOST.HOST}»

Monitorimi dhe menaxhimi në distancë i pajisjeve që bazohen në Linux/OpenWrt/Lede përmes portit 80, vazhdim

Pastaj: Menuja «Monitorimi» -> «Të dhënat e fundit» -> «Klikoni me të djathtën mbi nodin e nevojshëm të rrjetit». Kështu do të duket menuja pas shtimit të skriptit.

Monitorimi dhe menaxhimi në distancë i pajisjeve që bazohen në Linux/OpenWrt/Lede përmes portit 80, vazhdim
Përkatësisht, skripti reboot.php vendoset në direktorinë /usr/share/zabbix (e juaja mund të jetë e ndryshme, unë përdor direktorine kryesore të zabbix-it).

Kujdes pĂ«r sigurinĂ«PĂ«r ta bĂ«rĂ« mĂ« vizual pĂ«rshkrimin, nĂ« skript unĂ« pĂ«rdor vetĂ«m id-nĂ« e router-it, 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Ă« ruajmĂ« fjalĂ«kalimet pĂ«r routerĂ«t? NĂ« vĂ«rtetĂ« nĂ« zabbix nĂ« «tĂ« dhĂ«nat inventar»? NjĂ« praktikĂ« e diskutueshme. NjĂ« opsion: tĂ« kufizohet aksesin nga jashtĂ« nĂ« skedarin reboot.php

Skedari reboot.php

<?php
	// caktimi i parametrave nga konsola në variabla
	$user = $argv[1];
	// KËTË bĂ«ni kujdes. KĂ«tu pĂ«r qĂ«llime sigurie duhet tĂ« specifikohet fjalĂ«kalimi i pajisjes! Por pĂ«r demonstrimin, do tĂ« kemi qasje nĂ« bazĂ«n e tĂ« dhĂ«nave pa pĂ«rdorur fjalĂ«kalimin.
	//$password = $argv[2];
		
	$conn=new mysqli("localhost","db_user","db_password","db_name");
	if (mysqli_connect_errno()) {
		exit();
	}
	$conn->set_charset("utf8");
			
	// "Dërgojmë" komandën reboot përmes ndryshimit të fushës task në tabelën users. Në fushën task mund të dërgoni ç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();
?>

Kjo është gjithçka. Pyetja e hapur mbetet «si të marrim rezultatin e ekzekutimit të komandës nga ana e pajisjes». Të hedhim një vështrim në këtë problem me komandën ifconfig. Këtë komandë mund ta dërgojmë 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 sĂ« komandĂ«s ifconfig
wget "xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai/a.php — skripti ynĂ« a.php, qĂ« regjistron routerĂ«t dhe pranoni mesazhe nga ata
u=user&p=password!&m=$message — kredencialet dhe vlerĂ«s sĂ« variablĂ«s sĂ« kĂ«rkesĂ«s m — i cakton pĂ«rmbajtjen e variablĂ«s $message
-O /tmp/out.txt — nxjerr nĂ« skedar /tmp/out.txt, nĂ« kĂ«tĂ« rast nuk na nevojitet, por nĂ«se nuk e specifikoni kĂ«tĂ« parametr, 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Ă«se nĂ« daljen e komandĂ«s suaj, pĂ«r shembull, ka njĂ« simbol „&“. Prandaj, duhen filtruar gjithçka qĂ« dĂ«rgohet nga routerĂ«t dhe çdo gjĂ« qĂ« vjen nĂ« server. Po, mĂ« vjen turp, vĂ«rtet. NĂ« mbrojtje tĂ« vetes mund tĂ« them se gjithĂ« artikulli Ă«shtĂ« pĂ«r menaxhimin e routerĂ«ve me firmware tĂ« papĂ«rcaktuar mĂ« herĂ«t, me kanale komunikimi tĂ« papĂ«rcaktuar.

Dhe një plan për të ardhmen: akoma nuk kam arritur të kuptoj si të reflektoj rezultatin (për shembull rezultatin e ekzekutimit të komandës), i cili vjen në server me mjete standarde të zabbix-it.

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

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster