Detta Àr den avslutande delen av artikeln, hÀr Àr början
I förra omgĂ„ngen skrev jag om hur jag implementerade övervakning av enheter, nu handlar det om styrning. I diskussioner med "tekniska personer" frĂ„n kundens sida möter jag ofta ett begrĂ€nsat synsĂ€tt pĂ„ möjligheterna hos sĂ„dana smĂ„ enheter (med begrĂ€nsade minnesresurser och prestanda), mĂ„nga anser att "det maximala vi behöver Ă€r att skicka en omstart, för nĂ„got mer seriöst â vi skickar en grupp."
Men praktiken visar att det inte riktigt Àr sÄ. HÀr Àr en liten lista över vanliga typiska uppgifter:
- NĂ€tverksdiagnos och felsökning. Bakom ethernet-porten pĂ„ din router "bor" vanligtvis en annan enhet, som har sin egen interna ip-adress. Ibland kan den behöva "pinga". Eller tunnelhantering â om tunneln inte plötsligt gĂ„r upp pĂ„ routern som arbetar via 3G-modem, men vi ser sjĂ€lva routern.
- SystemunderhÄll. Uppdatering av programvaran, uppgradering av tjÀnsteskanningar.
- Ekvilibrism. Detta skulle kunna kallas "perversioner", men begreppet "ekvilibrism" Ă€r som, jag citerar, "förmĂ„gan hos en cirkusartist att upprĂ€tthĂ„lla balans i en instabil kroppsstĂ€llning" â passar bĂ€ttre. SĂ„dana situationer uppstĂ„r pĂ„ grund av kundens budgetbegrĂ€nsningar. Nedan har jag gett nĂ„gra exempel, men eftersom de inte har nĂ„got direkt samband med Ă€mnet, har jag flyttat dem till en kommentar.
Wi-Fi övervakningEn trend som har varit populÀr de senaste fem Ären, framför allt bland federala detaljhandelskedjor. Du promenerar sakta genom butiksavdelningarna, och din mobil med aktiverad Wi-Fi försöker regelbundet ansluta sig till nÄgot nÀtverk genom att skicka ut Probe Request-paket, som kan analyseras för att rÀkna hur ofta du besöker denna butik, vilka vÀgar du gÄr osv. Data samlas in, analyseras, vÀrmekartor ritas upp, och chefer fÄr sÄdana bilder för att 'krÀva' pengar frÄn ledningen eller investerare. Men för tillfÀllet... 'det finns inga pengar, men ni hÄller ut...' och det verkliga resultatet mÄste nu visas, sÄ den gamla goda sÄngen kommer fram: 'Ja, ja, vi kommer sjÀlvklart sÀtta upp allt ni önskar, men just nu mÄste vi visa kunden resultat! Förresten, vi glömde att nÀmna, kunden har tillÄtit oss att koppla vÄr utrustning till deras hotspot via Wi-Fi, men pÄ gemensamma villkor, precis som vi vore gÀstklienter.' SÄ vi mÄste skapa routerekvilibrister - flera Wi-Fi-subgrÀnssnitt aktiveras, en av dem ansluter sig till hotspot, medan den andra övervakar den omgivande miljön, och panikartat laddar resultatet frÄn tcpdump tillbaka till sig sjÀlv, sedan packar filens innehÄll i ett arkiv och riskerar att 'överÀta' sig nÀr den försöker skicka innehÄllet till en FTP-server. Det Àr inte förvÄnande att routerekvilibristen ofta 'misslyckas' och mÄste pÄ nÄgot sÀtt 'Äterupplivas' pÄ distans.
RadiusHĂ€r beskriver man situationen enklast med följande pĂ„stĂ„ende frĂ„n kunden: âVi vill ha ett decentraliserat nĂ€tverk av hotspots som ska fungera pĂ„ utrustning vars modell vi inte kĂ€nner till i förvĂ€g, via kanaler som vi Ă€nnu inte vet vilka de Ă€r. Ă h, vi glömde sĂ€ga, vi vill inte bara visa reklam till kunderna, utan ocksĂ„ analysera allt runt installationens plats för hotspot. Nej, vi vet inte riktigt varför Ă€n, men vi kommer att komma pĂ„ det, tveka inte, vi lyckades ju komma pĂ„ den hĂ€r idĂ©n.â
Och man fÄr inte glömma att pÄ grund av mÄnga osÀkra omstÀndigheter i förvÀg, mÄste hanteringen ske under icke-standardiserade förhÄllanden, dÀr vi inte kan ansluta direkt till routern via IP:port och mÄste helt enkelt vÀnta pÄ att den visar aktivitet. Om man abstraherar skulle dialogen mellan servern och routern kunna se ut sÄ hÀr:
- Router: Hej. Jag Àr routern, finns det uppgifter för mig?
- Servern: Routern har jag registrerat dig, sÄ du Àr aktiv. HÀr Àr uppgiften: Visa mig resultatet av kommandot ifconfig?
- Router: Hej. Jag Àr Routern, sist bad du mig att visa resultatet av ifconfig, hÀr Àr det. Har du nÄgra uppgifter för mig?
- Servern: Routern har jag registrerat dig, sÄ du Àr aktiv. Inga uppgifter för dig.
Den mest intressanta frĂ„gan: hur kan en fjĂ€rrrouter skicka en viss mĂ€ngd information? I förra delen beskrev jag att pĂ„ routern, pĂ„ grund av begrĂ€nsade resurser, finns det bara en "nedbantad" wget, som endast fungerar via GET och inget mer, det finns ingen ftp-klient eller curl. Mer exakt, vi behöver en universell metod, oavsett specifikationerna för byggandet av bilden. Jag slutade med att anvĂ€nda wget. Mer exakt, ja, som jag "slutade" â jag hade bara inget val đ
Ett snabbt tillĂ€ggMin lösning för hantering fungerar, Ă€r inte alltför begrĂ€nsad och jag Ă€r sĂ€ker â den Ă€r rolig, Ă€ven om den passar de flesta av mina kunder. Hur man skulle kunna göra det pĂ„ riktigt â skriva en liten utilitet som via port 80 skickar binĂ€ra data via POST. Inkludera den (utnyttjande) i routerns firmware och sedan anvĂ€nda bash för att anropa den. Men verkligheten Ă€r sĂ„dan att: a) man mĂ„ste göra det snabbt b) kanske mĂ„ste man göra allt pĂ„ den nuvarande "djungeln av routrar" c) "gör inget ont!" â om routern fungerar och utför andra uppgifter, försök att göra Ă€ndringar som inte pĂ„verkar den existerande funktionen.
LÄt oss gÄ vidare till implementeringen. Antag att din kund vill frÄn zabbix kunna starta om routern enkelt och lÀtt, "med ett musklick". Idag börjar vi beskrivningen av implementeringen med Zabbix.
I menyn "Administration" -> "Script" lÀgger vi till ett nytt script. Vi namnger det "Reboot", och skriver kommandot "php /usr/share/zabbix/reboot.php {HOST.HOST}"

DĂ€refter: Meny "Ăvervakning" -> "Senaste data" -> "Högerklicka pĂ„ den aktuella nĂ€tverksnoden". SĂ„ hĂ€r ser menyn ut efter att skriptet har lagts till.

DÀrför lÀgger vi skriptet reboot.php i katalogen /usr/share/zabbix (du kan ha en annan, jag anvÀnder rootkatalogen för Zabbix).
TillÀgg för sÀkerhetFör att tydliggöra förklaringen i skriptet anvÀnder jag endast routerns ID, men jag anvÀnder inte lösenordet. I den arbetsversionen rekommenderas det inte att göra sÄ! Anledningen till att jag gjorde sÄ Àr att det stora frÄgan Àr: var ska vi lagra lösenorden till routrarna? I sjÀlva Zabbix i "inventariedata"? En kontroversiell praxis. Ett alternativ Àr att begrÀnsa Ätkomsten utifrÄn till sjÀlva filen reboot.php.
Fil reboot.php
set_charset("utf8");
// "Skickar" kommando reboot genom att Àndra fÀltet task i tabellen users. I fÀltet task kan du skicka vilket kommando som helst.
$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();
?>Det Àr egentligen allt. Den öppna frÄgan Àr "hur man fÄr resultatet av kommandots utförande frÄn enheten". Vi tittar pÄ uppgiften genom exemplet med kommandot ifconfig. SÄ hÀr kan ett kommando skickas till enheten:
message=`ifconfig`; wget "http://xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai/a.php?u=user&p=password!&m=$message" -O /tmp/out.txt, dÀr:
message=`ifconfig` â vi tilldelar variabeln $message resultatet av kommandot ifconfig.
wget " â vĂ„rt skript a.php, som registrerar routrar och tar emot meddelanden frĂ„n dem.
u=user&p=password!&m=$message â autentiseringsuppgifter och vĂ€rdet av förfrĂ„gningsvariabeln m tilldelas innehĂ„llet i variabeln $message.
-O /tmp/out.txt â utdata till filen /tmp/out.txt Ă€r i det hĂ€r fallet inte nödvĂ€ndig, men om den hĂ€r parametern inte anges, fungerar inte wget.
Varför fungerar detta sĂ„ dĂ„ligt?För att det Ă€r ett potentiellt sĂ€kerhetshĂ„l. Det mest harmlösa felet som kan hĂ€nda Ă€r om kommandots utmatning till exempel innehĂ„ller symbolen â&â. DĂ€rför mĂ„ste allt som skickas frĂ„n routrarna och allt som kommer till servern filtreras. Ja, jag skĂ€ms, verkligen. Till mitt försvar kan jag bara skriva â att hela artikeln handlar om hur man hanterar routrar med okĂ€nd firmware i förvĂ€g, med okĂ€nda kommunikationskanaler.
Och en framtidsplan: jag har inte riktigt listat ut hur man med Zabbix-standardverktyg visar resultat (till exempel resultatet av ett kommando) som kommer till servern.
PÄminner om att alla kÀllkodsfiler kan hÀmtas frÄn Git-repositoriet pÄ adressen:
KĂ€lla: habr.com
