PĂ«rshĂ«ndetje tĂ« gjithĂ«ve, kjo Ă«shtĂ« pĂ«rvoja ime e parĂ« nĂ« Habra. Dua tĂ« shkruaj rreth mĂ«nyrĂ«s se si tĂ« menaxhoni pajisjet rrjetĂ«rore nĂ« njĂ« rrjet tĂ« jashtĂ«m nĂ« mĂ«nyrĂ« jo standarde. ĂfarĂ« do tĂ« thotĂ« jo standarde: nĂ« shumicĂ«n e rasteve, pĂ«r tĂ« menaxhuar pajisjet nĂ« njĂ« rrjet tĂ« jashtĂ«m, ju nevojitet:
- Një adresë IP publike. Ose, nëse pajisja ndodhet pas një NAT-i të dikujt, atëherë një IP publike dhe një port i "kalur".
- Një tunel (PPTP/OpenVPN/L2TP+IPSec etj.) në faqen kryesore, përmes të cilit do të ishte e aksesueshme.
Prandaj, "biçikleta ime" do t'ju nevojitet kur metodat standarde nuk ju përshtaten, për shembull:
- Pajisja ndodhet pas NAT-it dhe pĂ«rveç http tĂ« zakonshĂ«m (porti 80) â gjithçka tjetĂ«r Ă«shtĂ« e mbyllur. NjĂ« situatĂ« mjaft normale pĂ«r rrjetet korporative federale tĂ« mĂ«dha. TĂ« kalosh portet â mund tĂ« bĂ«het, por jo menjĂ«herĂ«, jo shpejt dhe jo pĂ«r ju.
- Një kanal komunikimi i paqëndrueshëm dhe/ose "ngushtë". Shpejtësi të vogla, humbje të vazhdueshme. Dhimbje dhe zhgënjim gjatë përpjekjes për të organizuar një tunel.
- Një kanal komunikimi të shtrenjtë, ku çdo megabajt ka rëndësi. Shembuj janë lidhjet satelitore. Plus vonesa të mëdha dhe një "ngushtë" e kanalit.
- Situata kur ju duhet të "xhongloni" me shumë routerë të vegjël, në të cilët nga njëra anë është instaluar OpenWrt/Lede për ta zgjeruar funksionalitetin, kurse nga ana tjetër burimet (memoria) e routerit nuk mjaftojnë për të gjitha.
Shënim numër një Por, çfarë e pengon të vendosni një "flash" në portin USB të routerit dhe të zgjeroni memorien e tij?
Shpesh herë kërkesat për kostot e zgjidhjes në tërësi, por ndonjëherë luajnë rolin kryesor edhe faktorët e formës. Për shembull, në objekt ndodhet një TP-Link ML3020, porta e vetme USB përdoret për modem 2G/3G, gjithçka është e vendosur në ndonjë kuti të vogël plastike dhe është vendosur diku lart (në shtyllë), larg-larg (në fushë, 30 km nga stacioni më i afërt bazë të operatorit të telefonisë mobile). Po, mund të lidhni një USB-hub dhe të zgjeroni numrin e porteve, por eksperienca tregon se kjo është e madhe dhe e pasigurt.
Pra, pĂ«rpiqem tĂ« pĂ«rshkruaj situatĂ«n time tipike: "diku larg-larg, ndodhet njĂ« router shumĂ« i rĂ«ndĂ«sishĂ«m, i vetĂ«m dhe i vogĂ«l nĂ«n menaxhim Linux. ĂshtĂ« e rĂ«ndĂ«sishme tĂ« dihet tĂ« paktĂ«n njĂ« herĂ« nĂ« ditĂ« se ai Ă«shtĂ« "nĂ« jetĂ«" dhe nĂ« rast nevoje t'i dĂ«rgoj komandat, pĂ«r shembull "dielli, ri nĂ« kĂ«mbĂ«!"
Të kalojmë te realizimi:
1) Në anën e routerit, nëpërmjet cron-it çdo 5/10/1440 minuta, ose sa herë të nevojitet, duhet të dërgohet një kërkesë http në server me wget, rezultati i kërkesës ruhet në një skedar, skedari bëhet ekzekutues dhe ekzekutohet.
Rreshti im në cron duket më pak si:
Skedari /etc/crontabs/root:
* /5 * * * * wget "http://xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai/a.php?u=user&p=password" -O /tmp/wa.sh && chmod 777 /tmp/wa.sh && /tmp/wa.sh , ku:
xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai â domeni i serverit tim. TĂ« tregoj, po, mund tĂ« specifikoni gjithashtu njĂ« IP tĂ« caktuar tĂ« serverit, ne e bĂ«nim kĂ«tĂ« mĂ« parĂ«, derisa shteti ynĂ«, nĂ« njĂ« pĂ«rpjekje tĂ« drejtĂ« pĂ«r tĂ« luftuar diçka qĂ« nuk e di â mbylli qasjen nĂ« njĂ« pjesĂ« tĂ« madhe tĂ« "rethey" DigitalOcean dhe Amazon. NĂ« rast se pĂ«rdorni njĂ« domen simbolik, nĂ« rast tĂ« ngjarjeve tĂ« tilla, ju do tĂ« jeni nĂ« gjendje tĂ« ngrisni njĂ« re rezervĂ«, tĂ« drejtoni domenin dhe tĂ« rikuperoni monitorimin e pajisjeve.
a.php â emri i skriptit nĂ« anĂ«n e serverit. Po, e di qĂ« Ă«shtĂ« gabim tĂ« quash variablat dhe emrat e skedarĂ«ve me njĂ« shkronjĂ«... le tĂ« mendojmĂ« se kĂ«shtu kursejmĂ« disa byte gjatĂ« dĂ«rgimit tĂ« kĂ«rkesĂ«s đ
u â emri i pĂ«rdoruesit, identifikuesi i pajisjes
p â fjalĂ«kalimi
"-O /tmp/wa.sh" â skedari nĂ« routerin e largĂ«t, ku do tĂ« ruhet pĂ«rgjigjja e serverit, pĂ«r shembull komanda reboot.
ShĂ«nimi numĂ«r dy: Aaaah, pse pĂ«rdorim wget dhe jo curl, sepse me curl mund tĂ« dĂ«rgojmĂ« kĂ«rkesa https dhe jo vetĂ«m GET, por edhe POST? Aaaah sepse si nĂ« atĂ« shaka tĂ« vjetra "NĂ« kosh nuk hyn!". Curl pĂ«rmban biblioteka kriptimi qĂ« peshojnĂ« rreth 2MB dhe pĂ«r shkak tĂ« kĂ«saj Ă«shtĂ« e vĂ«shtirĂ« tĂ« krijoni njĂ« imazh pĂ«r njĂ« TP-LINK ML3020, pĂ«r shembull. NdĂ«rsa me wget â Ă«shtĂ« e mundur.
2) Në anën e serverit (unë kam Ubuntu) do të përdorim Zabbix. Pse: dua që të duket mirë (me grafika) dhe të jetë e përshtatshme (të dërgoj komanda përmes menusë kontekstuale). Zabbix ka një gjë të bukur, siç është agjenti zabbix. Përmes agentit do të thërrasim një skript php në server, i cili do të kthejë informacionin nëse routeri ynë është regjistruar në periudhën e kërkuar. Për ruajtjen e informacionit mbi kohën e regjistrimit, komandat për pajisjet, unë përdor MySQL, një tavolinë të veçantë përdoruesish me të paktën këto fusha:
KRIJO TABELĂN `users` (
`id` varchar(25) NUK E LEJOHET,
`passwd` varchar(25) NUK E LEJOHET,
`description` varchar(150) NUK E LEJOHET,
`category` varchar(30) NUK E LEJOHET,
`status` varchar(10) NUK E LEJOHET,
`last_time` varchar(20) NUK E LEJOHET,
`last_ip` varchar(20) NUK E LEJOHET,
`last_port` int(11) NUK E LEJOHET,
`task` text NUK E LEJOHET,
`reg_task` varchar(150) NUK E LEJOHET,
`last_task` text NUK E LEJOHET,
`response` text NUK E LEJOHET,
`seq` int(11) NUK E LEJOHET
) MOTOR=InnoDB DEFAULT CHARSET=utf8; Të gjitha burimet mund të merren nga repo Git, në adresën:
Tani skriptet PHP, tĂ« vendosura nĂ« anĂ«n e serverit (pĂ«r lehtĂ«si mund tâi vendosim nĂ« dosjen /usr/share/zabbix/):
Skedari a.php:
set_charset("utf8");
// Këtu kërkojmë routerin tonë në tabelën e bazës së të dhënave
$sql_users=$conn->prepare("SELECT task, reg_task, response, last_time FROM users WHERE id=? AND passwd=? AND status='active';");
$sql_users->bind_param('ss', $user, $password);
$sql_users->bind_result($task, $reg_task, $response, $last_time);
$sql_users->execute();
$sql_users->store_result();
if (($sql_users->num_rows)==1){
$sql_users->fetch();
// Këtu i dërgojmë routerit detyrat e tij
echo $task;
echo "n";
echo $reg_task;
// Këtu shkruajmë kohën e përgjigjes dhe vetë përgjigjen e routerit
$response_history="[".date("Y-m-d H:i")."] ".$message;
// Detyrën e dërguam, tani duhet ta fshijmë, dhe pas fshirjes të shënojmë në log se kjo detyrë është përfunduar
$last_ip=$_SERVER["REMOTE_ADDR"];
$last_port=$_SERVER["REMOTE_PORT"];
$ts_last_conn_time=$last_time;
$sql_users=$conn->prepare("UPDATE users SET task='', seq=1 WHERE (id=?);");
$sql_users->bind_param('s', $user);
$sql_users->execute();
if (strlen($message)>1){
$sql_users=$conn->prepare("UPDATE users SET response=?, seq=1 WHERE (id=?);");
$sql_users->bind_param('ss', $response_history, $user);
$sql_users->execute();
}
// Tani duhet të ruajmë kohën e regjistrimit të përdoruesit, IP-në e tij dhe mesazhin nga ai. Deri tani vetëm mesazhin
$ts_now=time();
$sql_users=$conn->prepare("UPDATE users SET last_time=?, last_ip=?, last_port=? WHERE (id=?);");
$sql_users->bind_param('ssss', $ts_now, $last_ip, $last_port, $user);
$sql_users->execute();
}
// Nëse nuk e gjetëm routerin në bazën tonë të të dhënave, ose statusi i tij është "inaktiv", i dërgohet komandë reboot....
// Pse kaq ashpër? Sepse routerët ndonjëherë zhduken, dhe kjo është një mënyrë e vogël për të ndëshkuar "pronarët e rinj".
else
{
echo "reboot";
}
$sql_users->close();
?>Skedari agent.php (ky është skripti i agentit të thirrur zabbix):
set_charset("utf8");
$sql_users=$conn->prepare("SELECT seq FROM users WHERE id=? AND passwd=? AND status='active';");
$sql_users->bind_param('ss', $user, $password);
$sql_users->bind_result($seq);
$sql_users->execute();
$sql_users->store_result();
// dera e të dhënave ndodh përmes fushës seq. Gjatë regjistrimit pajisja e vendos këtë fushë në "1"
if (($sql_users->num_rows)==1){
$sql_users->fetch();
echo $seq;
}
// zbrazim $seq.
$sql_users=$conn->prepare("UPDATE users SET seq=0 WHERE id=? AND passwd=? AND status='active';");
$sql_users->bind_param('ss', $user, $password);
$sql_users->execute();
$sql_users->close();
?> Dhe tani faza përfundimtare: konfiguroi agjentin dhe shto grafikat.
Nëse ende nuk e keni instaluar zabbix-agent, atëherë:
apt-get install zabbix-agentEditoni skedarin /etc/zabbix/zabbix_agentd.conf.
Shtoni rreshtin:
UserParameter=test,php /usr/share/zabbix/agent.php user password , ku:
test â emri i agjentit tonĂ«
âphp /usr/share/zabbix/agent.php user passwordâ â skripti i thirrur me akreditive tĂ« pajisjes.
Shtimi i grafikëve: hapni ndërfaqen web të zabbix, në menunë zgjidhni:
Konfigurimi -> Nyjat e rrjetit -> Krijo nyjën e rrjetit. Këtu mjafton të jepni emrin e nyjës së rrjetit, grupin e saj dhe ndërfaqen e agjentit nga default:

Tani pĂ«r kĂ«tĂ« nyjĂ« rrjeti na nevojitet tĂ« shtojmĂ« njĂ« element tĂ« dhĂ«nash. Vini re dy fushat: âçelĂ«siâ â kjo Ă«shtĂ« ajo qĂ« kemi shkruar nĂ« skedarin /etc/zabbix/zabbix_agentd.conf (nĂ« rastin tonĂ« Ă«shtĂ« test), dhe âintervali i azhurnimitâ â unĂ« vĂ« 5 minuta, sepse pajisja regjistrohet gjithashtu nĂ« server çdo pesĂ« minuta.

Dhe tani shtojmĂ« grafikun. KĂ«shilloj tĂ« zgjidhni âPlotĂ«simiâ si stil tĂ« vizatimit.

Rezultati është diçka shumë elegante, për shembull kështu:

PĂ«r pyetjen e arsyeshme: âa ja vlen?â, do tĂ« pĂ«rgjigjem: natyrisht, shihni âarsyet pĂ«r krijimin e njĂ« bicikleteâ nĂ« fillim tĂ« artikullit.
Nëse përvoja ime e parë si shkrimtar do të zgjojë interesin e lexuesve, atëherë në artikujt e ardhshëm do të përshkruaj si të dërgoj urdhra në pajisje të largëta. Kështu që arrita të realizoj tërë skemën edhe për pajisjet e bazuara në RouterOS (Mikrotik).
Burimi: habr.com
