Даљинско праћење и управљање уређајима заснованим на Линук/ОпенВрт/Леде преко порта 80, настављено

Ово је завршни део чланка, ево почетка һабр.цом/ру/пост/445568
Последњи пут када сам писао о томе како сам имплементирао праћење уређаја, сада ћемо разговарати о управљању. У разговорима са „техничарима“ на страни корисника, често наилазим на ограничену перцепцију могућности тако малих уређаја (са ниским меморијским ресурсима и перформансама), многи верују да је „највише што нам треба да пошаљемо поновно покретање, за нешто више озбиљно, послаћемо тим”.
Али пракса показује да то није сасвим тачно. Ево мале листе уобичајених типичних задатака:

  1. Мрежна дијагностика и решавање проблема. Иза етернет порта вашег рутера обично постоји још један комад хардвера који има своју интерну ИП адресу. Понекад можете (требало би) да га „пингујете“. Или управљање тунелом - ако се тунел изненада не подигне на рутеру који ради преко 3Г модема, али можемо видети сам рутер.
  2. Одржавање система. Ажурирање фирмвера, надоградња сервисне скрипте.
  3. Балансирање. Ово би се могло назвати "перверзија", али концепт "еквилибриста" као, цитирам, "способност циркуског извођача да одржи равнотежу у нестабилном положају тела" - боље пристаје. Такве ситуације настају због ограниченог буџета купца. У наставку сам навео пар примера, али... Нису директно везане за тему приче, ставио сам их у белешке

Ви-Фи мониторингМодерна тема последњих пет година, углавном међу савезним малопродајним ланцима. Лагано шетате трговачким подовима, а ваш мобилни телефон са укљученим Ви-Фи-јем, у покушају да се „залепи” за неку нит мреже, редовно шаље пакете Пробе Рекуест, који се могу анализирати како би се израчунало за ви: колико често долазите у ову продавницу, из којих разлога? ходате дуж путање и тако даље. Затим се подаци прикупљају, анализирају, цртају топлотне карте, а менаџери „изнуђују“ новац од менаџмента или инвеститора за такве слике. Е, за сада.... „нема пара, али ти се држи...“, а резултат (прави) већ треба да се покаже, почиње стара добра песма: „Да, да, онда наравно ми ће инсталирати цис и све што желите, али сада треба да покажемо клијенту резултат! Узгред, заборавили смо да кажемо да нам је Купац дозволио да своју опрему повежемо са његовом хотспотом преко Ви-Фи мреже, али генерално, баш као да смо гости. И тако морамо да направимо балансирајуће рутере - подиже се неколико ВиФи подинтерфејса, од којих се један држи хотспота, а други надгледа окружење, грозничаво учитава тцпдумп резултат у себе, затим пакује садржај датотеке у архиву и ризикује умирање од „преједања“ покушава да испљуне садржај на ФТП серверу. Није изненађујуће што се рутер за балансирање често „поквари“ и некако мора да се „оживљава“ на даљину.

полупречникЛакше је описати ситуацију са нечим попут ове изјаве купца: „Желимо децентрализовану мрежу жаришта која би радила на опреми чији модел није познат унапред, путем канала, али које још не знамо. Ох, заборавили смо да кажемо, не само да желимо да приказујемо рекламе клијентима, већ и да анализирамо све око локације на којој је хотспот инсталиран. Не, још увек не знамо зашто, али схватићемо то, не сумњајте, успели смо да дођемо до ове идеје.”

И не смемо заборавити да због много раније непознатих околности, контрола мора да се врши у нестандардним условима, када не можемо да се повежемо на рутер директно преко ИП: порта и приморани смо да једноставно чекамо активност са њега. Ако се апстрахујемо, дијалог између сервера и рутера може се представити овако:

  • Рутер: Здраво. Ја сам такав и такав рутер, има ли задатака за мене?
  • Сервер: рутер такав и такав, регистровао сам те, да си жив. Ево изазова: покажите ми резултат наредбе ифцонфиг?
  • Рутер: Здраво. Ја сам такав и такав рутер, последњи пут када сте тражили да покажете резултат ифцонфиг-а, ево га. Има ли задатака за мене?
  • Сервер: рутер такав и такав, регистровао сам те, да си жив. За вас нема задатака.

Најинтересантније питање: како удаљени рутер може послати одређену количину информација? У последњем делу сам описао да због ограничених ресурса рутер има само „скинути“ вгет, који ради само преко ГЕТ-а и ништа више; нема ФТП клијента или цурл-а. Тачније, потребан нам је универзални метод, без обзира на карактеристике склапања слике. Одлучио сам да користим вгет. Тачније, како сам "стао" - једноставно нисам имао избора :)

Само одрицање од одговорностиМоје решење за управљање функционише, није много ограничено, и сигуран сам да је криво, чак и ако одговара већини мојих купаца. Како бисте то могли учинити мудро - напишите мали услужни програм који шаље ПОСТ бинарне податке преко порта 80. Укључите га (услужни програм) у фирмвер рутера и приступите му користећи басх. Али реалност је таква да: а) морамо брзо б) вероватно треба да урадимо све на постојећем „зоолошком врту рутера“ ц) „не шкоди!“ — ако рутер ради и обавља друге задатке, покушајте да унесете промене које неће утицати на постојећу функционалност.

Пређимо на имплементацију. Рецимо да ваш клијент жели да поново покрене рутер са заббик-а лако и природно, „кликом миша“. Данас ћемо почети да описујемо имплементацију са Заббик-ом.
У менију „Администрација“ -> „Скрипте“ додајте нову скрипту. Ми то зовемо „Ребоот“, унесите „пхп /уср/схаре/заббик/ребоот.пхп {ХОСТ.ХОСТ}“ као команду

Даљинско праћење и управљање уређајима заснованим на Линук/ОпенВрт/Леде преко порта 80, настављено

Следеће: Мени „Мониторинг“ -> „Најновији подаци“ -> „Кликните десним тастером миша на жељени мрежни чвор.“ Овако ће изгледати мени након додавања скрипте.

Даљинско праћење и управљање уређајима заснованим на Линук/ОпенВрт/Леде преко порта 80, настављено
Сходно томе, скрипту ребоот.пхп стављамо у /уср/схаре/заббик директоријум (ваш може бити другачији, ја користим заббика основни директоријум).

Сафети ДисцлаимерДа би објашњење било јасније у скрипти, користим само ид рутера, али не користим лозинку. Не препоручује се да то радите у продукцијској верзији! Зашто сам ово урадио: јер је велико питање где да чувам лозинке за рутере? У самом заббику у „подацима о инвентару“? Контроверзна пракса. Алтернативно: ограничите спољни приступ самој датотеци ребоот.пхп

Датотека ребоот.пхп

<?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();
?>

То је све. Остаје отворено питање: "како добити резултат извршавања команде са уређаја." Хајде да погледамо задатак користећи команду ифцонфиг као пример. Ова команда се може послати на уређај:

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

, где:
мессаге=`ифцонфиг` — резултат излаза команде ифцонфиг додељујемо променљивој $мессаге
вгет "xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai/a.php — наша а.пхп скрипта која региструје рутере и прима поруке од њих
у=корисник&п=лозинка!&м=$порука — акредитиви и вредност променљиве захтева м — додељује садржај променљиве $мессаге
-О /тмп/оут.ткт — у овом случају нам није потребан излаз у датотеку /тмп/оут.ткт, али ако овај параметар није наведен, вгет не ради

Зашто ово не ради?Зато што је то потенцијална сигурносна рупа. Најбезопаснија грешка која се може десити је ако, на пример, постоји знак „&“ у излазу ваше команде. Због тога је потребно филтрирати и све што се шаље са рутера и све што долази на сервер. Да, стидим се, стварно. У своју одбрану могу само да напишем да је цео чланак посвећен томе како управљати рутерима са унапред дефинисаним фирмвером и каналима комуникације који нису унапред дефинисани.

Па, почетак за будућност: још нисам схватио како да користим стандардне заббик алате да прикажем резултате (на пример, резултат извршавања команде) који долазе на сервер.

Подсећам вас да се сви извори могу добити из Гит репозиторијума на: гитхуб.цом/БазДен/иотнет.онлине.гит

Извор: ввв.хабр.цом

Додај коментар