Мониторинг ва идоракунии дурдасти дастгоҳҳои Linux/OpenWrt/Lede тавассути порти 80, идома ёфт

Ин қисми ниҳоии мақола аст, ин ҷо ибтидо аст habr.com/en/post/445568
Дафъаи гузашта ман дар бораи он ки чӣ гуна мониторинги дастгоҳро амалӣ кардам, навишта будам, ҳоло мо дар бораи идоракунӣ сӯҳбат хоҳем кард. Дар мубоҳисаҳо бо "техникҳо"-и муштарӣ, ман аксар вақт бо дарки маҳдуди қобилиятҳои чунин дастгоҳҳои хурд (бо захираҳои хотираи кам ва иҷрои кор) дучор мешавам, бисёриҳо боварӣ доранд, ки "аз ҳама бештар ба мо фиристодани бозсозӣ лозим аст. ҷиддӣ мо як даста мефиристем ".
Аммо амалия нишон медиҳад, ки ин комилан дуруст нест. Дар ин ҷо як рӯйхати хурди вазифаҳои маъмулии маъмул аст:

  1. Диагностикаи шабакавӣ ва ҳалли мушкилот. Дар паси бандари ethernet-и роутери шумо одатан як таҷҳизоти дигар мавҷуд аст, ки суроғаи IP-и дохилии худро дорад. Баъзан, шумо метавонед (бояд) онро "пинг кунед". Ё идоракунии нақб - агар нақб дар роутере, ки тавассути модеми 3G кор мекунад, ногаҳон баланд нашавад, аммо мо худи роутерро дида метавонем.
  2. Нигоҳдории система. Навсозии нармафзор, навсозии скрипти хидмат.
  3. Амали мувозинат. Инро метавон "таҳриф" номид, аммо мафҳуми "эквилибрист" ҳамчунон, ки ман иқтибос меорам, "қобилияти ҳунарманди сирк барои нигоҳ доштани мувозинат дар ҳолати ноустувори бадан" - беҳтар мувофиқат мекунад. Чунин ҳолатҳо аз сабаби маҳдуд будани буҷаи муштарӣ ба вуҷуд меоянд. Дар зер чанд мисол овардам, аммо... Онхо ба мавзуи повесть бевосита дахл надоранд, дар кайдхо мегузорам

Мониторинги Wi-FiМавзӯи муд барои панҷ соли охир, асосан дар байни занҷирҳои чаканаи федералӣ. Шумо оромона дар ошёнаҳои савдо сайру гашт мекунед ва телефони мобилии шумо бо Wi-Fi фаъол бо мақсади «часпидан» ба ягон риштаи шабака мунтазам бастаҳои дархости Probe мефиристад, ки онҳоро барои ҳисоб кардани он таҳлил кардан мумкин аст. шумо: шумо ба ин магазин чанд вакт меоед, бо кадом сабабхо, бо траекторияхо кадам мезанед ва гайра. Пас аз он маълумот ҷамъоварӣ, таҳлил карда мешавад, харитаҳои гармӣ кашида мешаванд ва роҳбарон барои чунин тасвирҳо аз роҳбарият ё сармоягузорон пул "ситонанд". Хуб, ҳоло.... "пул нест, аммо шумо нигоҳ доред..." ва натиҷаро (воқеӣ) аллакай нишон додан лозим аст, суруди хуби кӯҳна оғоз мешавад: "Бале, ҳа, пас албатта мо cis ва ҳама чизеро, ки шумо мехоҳед насб кунед, аммо ҳоло мо бояд ба Муштарӣ натиҷаро нишон диҳем! Дар омади гап, мо фаромӯш кардаем, ки Фармоишгар ба мо иҷозат дод, ки таҷҳизоти худро ба нуқтаи дастрасии худ тавассути Wi-Fi пайваст кунем, аммо дар асоси умумӣ, чунон ки гӯё мо мизоҷони меҳмон будем». Ва аз ин рӯ, мо бояд роутерҳои мувозинатӣ созем - якчанд зеринтерфейсҳои WiFi баланд карда мешаванд, ки яке аз онҳо ба нуқтаи доғ часпида, дуюмӣ муҳити атрофро назорат мекунад, натиҷаи tcpdump-ро ба худаш хашмгинона бор мекунад, сипас мундариҷаи файлро ба бойгонӣ ҷойгир мекунад ва хатарҳо дорад. мурдан аз "хӯрдан" кӯшиш мекунад, ки мундариҷаро дар сервери FTP туф кунад. Тааҷҷубовар нест, ки роутери мувозинат аксар вақт "шикаст" мешавад ва ба ҳар ҳол бояд аз фосилаи дур "реаниматсия" карда шавад.

радиусВазъиятро бо чунин изҳороти муштарӣ тавсиф кардан осонтар аст: "Мо мехоҳем, ки шабакаи ғайримарказонидашудаи нуқтаҳои доғ, ки дар таҷҳизоте кор кунад, ки модели онҳо қаблан маълум нест, тавассути каналҳо, аммо кадомашро мо ҳоло намедонем. Оҳ, мо гуфтанро фаромӯш кардаем, ки мо на танҳо мехоҳем ба мизоҷон таблиғ нишон диҳем, балки ҳама чизро дар атрофи маконе, ки нуқтаи дастрас насб шудааст, таҳлил кунем. Не, мо то ҳол намедонем, ки чаро, аммо мо инро мефаҳмем, ба он шубҳа накунед, мо тавонистем ин идеяро ба миён орем."

Ва мо набояд фаромӯш кунем, ки бо сабаби бисёр ҳолатҳои қаблан номаълум, назорат бояд дар шароити ғайристандартӣ сурат гирад, вақте ки мо наметавонем мустақиман тавассути IP: порт ба роутер пайваст шавем ва маҷбурем, ки танҳо фаъолиятро аз он интизор шавем. Агар мо худамонро абстракт кунем, муколамаи байни сервер ва роутер метавонад чунин ифода карда шавад:

  • Роуминг: Салом. Ман фалон роутер ҳастам, оё барои ман ягон вазифа ҳаст?
  • Сервер: роутер чунин ва чунин, ман шуморо сабти ном кардам, ки шумо зиндаед. Ин аст мушкилот: натиҷаи фармони ifconfig-ро ба ман нишон диҳед?
  • Роуминг: Салом. Ман чунин ва фалон роутер ҳастам, бори охир шумо хоҳиш кардед, ки натиҷаи ifconfig -ро нишон диҳед, ин ҷост. Оё барои ман ягон вазифа вуҷуд дорад?
  • Сервер: роутер чунин ва чунин, ман шуморо сабти ном кардам, ки шумо зиндаед. Барои шумо ягон вазифа нест.

Саволи ҷолибтарин: роутери дурдаст чӣ гуна метавонад миқдори муайяни маълумотро фиристад? Дар қисми охир ман тавсиф кардам, ки аз сабаби маҳдуд будани захираҳо, роутер танҳо wget-и "пастшуда" дорад, ки танҳо тавассути GET кор мекунад ва ҳеҷ чизи дигаре нест; муштарии FTP ё curl вуҷуд надорад. Аниқтараш, ба мо усули универсалӣ, сарфи назар аз хусусиятҳои васлкунии тасвирҳо лозим аст. Ман ба истифодаи wget қарор додам. Аниқтараш, ман чӣ гуна "қатъ кардам" - ман дигар илоҷ надоштам :)

Танҳо як раддҲалли идоракунии ман кор мекунад, на он қадар маҳдуд ва ман боварӣ дорам, ки он каҷ аст, ҳатто агар он ба аксари муштариёни ман мувофиқ бошад. Чӣ тавр шумо инро оқилона карда метавонед - як утилитаи хурде нависед, ки маълумоти дуии POST-ро тавассути порти 80 мефиристад. Онро (утилит) ба нармафзори роутер дохил кунед ва ба он тавассути bash дастрасӣ пайдо кунед. Аммо воқеият ин аст, ки: а) ба мо лозим аст, ки зуд б) ба мо лозим аст, ки ҳама чизро дар "боғи роутерҳои" мавҷуда анҷом диҳем в) "зарар нарасон!" — агар роутер кор кунад ва дигар вазифаҳоро иҷро кунад, кӯшиш кунед, ки тағирот ворид кунед, ки ба функсияҳои мавҷуда таъсир нарасонанд.

Биёед ба татбиқи он гузарем. Фарз мекунем, ки муштарии шумо мехоҳад роутерро аз zabbix ба осонӣ ва ба таври табиӣ бо "клики муш" дубора оғоз кунад. Имрӯз мо ба тавсифи татбиқ бо Zabbix шурӯъ мекунем.
Дар менюи "Маъмурият" -> "Скриптҳо" скрипти нав илова кунед. Мо онро "Бозоғоз" меномем ва ҳамчун фармон "php /usr/share/zabbix/reboot.php {HOST.HOST}" -ро ворид кунед.

Мониторинг ва идоракунии дурдасти дастгоҳҳои Linux/OpenWrt/Lede тавассути порти 80, идома ёфт

Минбаъд: Менюи "Мониторинг" -> "Маълумоти охирин" -> "Дар гиреҳи шабакавии дилхоҳ клик кунед." Ин аст он чизе ки меню пас аз илова кардани скрипт ба назар мерасад.

Мониторинг ва идоракунии дурдасти дастгоҳҳои Linux/OpenWrt/Lede тавассути порти 80, идома ёфт
Мутаносибан, мо скрипти reboot.php-ро дар директорияи /usr/share/zabbix мегузорем (ки шумо метавонад гуногун бошад, ман директорияи решаи zabbixa -ро истифода мебарам).

Радди бехатарӣБарои равшантар кардани шарҳ дар скрипт, ман танҳо ID-и роутерро истифода мебарам, аммо паролро истифода намебарам. Дар версияи истеҳсолӣ ин кор тавсия дода намешавад! Чаро ман ин корро кардам: зеро саволи калон ин аст, ки паролҳоро барои роутерҳо дар куҷо нигоҳ доред? Дар худи zabbixe дар "маълумоти инвентаризатсия"? Амалияи баҳснок. Интихобан: дастрасии берунаро ба худи файли reboot.php маҳдуд кунед

Файл 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();
?>

Ҳамааш ҳамин. Савол кушода боқӣ мемонад: "чӣ гуна метавон натиҷаи иҷрои фармонро аз дастгоҳ ба даст овард." Биёед супоришро бо истифода аз фармони ifconfig ҳамчун намуна дида бароем. Ин фармонро ба дастгоҳ фиристодан мумкин аст:

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

, ки:
паём = `ifconfig` — мо натиҷаи баромади фармони ifconfig-ро ба тағирёбандаи $message таъин мекунем
wget "xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai/a.php — скрипти a.php мо, ки роутерҳоро ба қайд мегирад ва аз онҳо паёмҳоро қабул мекунад
u = корбар & p = парол! & m = $ паём — маълумоти эътимоднок ва арзиши тағирёбандаи дархост m — мундариҷаи тағирёбандаи $message-ро таъин мекунад
-O /tmp/out.txt — дар ин ҳолат ба мо баромад ба файли /tmp/out.txt лозим нест, аммо агар ин параметр муайян нашуда бошад, wget кор намекунад

Чаро ин кор намекунад?Зеро он як сӯрохи эҳтимолии амният аст. Хатогии безарартарине, ки метавонад рӯй диҳад, ин аст, ки масалан, дар баромади фармони шумо аломати "&" мавҷуд бошад. Аз ин рӯ, зарур аст, ки ҳам ҳама чизеро, ки аз роутерҳо фиристода мешаванд ва ҳам ҳама чизе, ки ба сервер меояд, филтр кунед. Бале, ман шарм дорам, воқеан. Дар ҳимояи худ, ман танҳо метавонам нависам, ки тамоми мақола ба идоракунии роутерҳо бо нармафзори пешакӣ муайяншуда ва каналҳои коммуникатсионӣ, ки пешакӣ муайян карда нашудаанд, бахшида шудааст.

Хуб, оғоз барои оянда: Ман то ҳол нафаҳмидам, ки чӣ гуна асбобҳои стандартии zabbix барои инъикоси натиҷаҳо (масалан, натиҷаи иҷрои фармон), ки ба сервер меоянд, истифода бурдан мумкин аст.

Ба шумо хотиррасон мекунам, ки ҳама манбаъҳоро аз анбори Git дар суроғаи зерин дастрас кардан мумкин аст: github.com/BazDen/iotnet.online.git

Манбаъ: will.com

Илова Эзоҳ