Linux/OpenWrt/Lede-ի վրա հիմնված սարքերի հեռավոր մոնիտորինգը և կառավարումը 80 պորտի միջոցով շարունակվում է

Սա հոդվածի վերջին մասն է, ահա սկիզբը habr.com/en/post/445568
Նախորդ անգամ, երբ ես գրեցի, թե ինչպես եմ իրականացրել սարքի մոնիտորինգը, հիմա մենք կխոսենք կառավարման մասին: Հաճախորդի կողմից «տեխնիկների» հետ քննարկումների ժամանակ ես հաճախ հանդիպում եմ նման փոքր սարքերի հնարավորությունների սահմանափակ ընկալման (ցածր հիշողության ռեսուրսներով և կատարողականությամբ), շատերը կարծում են, որ «ամենից շատ մեզ անհրաժեշտ է վերաբեռնում ուղարկելը, ավելին: լուրջ, մենք թիմ կուղարկենք»:
Բայց պրակտիկան ցույց է տալիս, որ դա ամբողջովին ճիշտ չէ: Ահա սովորական տիպիկ առաջադրանքների փոքր ցուցակը.

  1. Ցանցի ախտորոշում և անսարքությունների վերացում: Ձեր երթուղիչի Ethernet պորտի հետևում սովորաբար կա մեկ այլ սարքաշար, որն ունի իր ներքին IP հասցեն: Երբեմն, դուք կարող եք (պետք է) «պինգ» անել այն: Կամ թունելի կառավարում. եթե հանկարծ թունելը չբարձրանա երթուղիչի վրա, որն աշխատում է 3G մոդեմի միջոցով, բայց մենք կարող ենք տեսնել հենց երթուղիչը:
  2. Համակարգի սպասարկում. Որոնվածի թարմացում, ծառայության սցենարի թարմացում:
  3. Հավասարակշռող ակտ. Սա կարելի է անվանել «այլասերվածություն», բայց «հավասարակշռող» հասկացությունը, ինչպես ես մեջբերում եմ. «Կրկեսի կատարողի ունակությունը հավասարակշռություն պահպանելու մարմնի անկայուն դիրքում» - ավելի լավ է տեղավորվում: Նման իրավիճակները առաջանում են հաճախորդի սահմանափակ բյուջեի պատճառով: Ստորև բերեցի մի քանի օրինակ, բայց... Դրանք ուղղակիորեն կապված չեն պատմվածքի թեմայի հետ, ես դրանք դնում եմ գրառումների մեջ

Wi-Fi մոնիտորինգՆորաձև թեմա վերջին հինգ տարիների ընթացքում, հիմնականում դաշնային մանրածախ ցանցերի շրջանում: Դուք հանգիստ զբոսնում եք առևտրի հարկերում, և ձեր բջջային հեռախոսը միացված Wi-Fi-ով, փորձելով «կպչել» ցանցի ինչ-որ շղթային, պարբերաբար ուղարկում է Probe Request փաթեթներ, որոնք կարող են վերլուծվել՝ հաշվարկելու համար։ դուք. Որքա՞ն հաճախ եք գալիս այս խանութ, ինչ պատճառներով եք քայլում հետագծերով և այլն: Այնուհետև հավաքվում են տվյալները, վերլուծվում, գծվում են ջերմային քարտեզներ, և մենեջերները նման նկարների համար գումար են «շորթում» ղեկավարությունից կամ ներդրողներից։ Դե, առայժմ․․․ «փող չկա, բայց դու դիմադրիր...», իսկ արդյունքը (իրական) արդեն պետք է ցույց տալ, սկսվում է հին բարի երգը՝ «Այո, այո, հետո իհարկե մենք։ կտեղադրի cis-ը և այն ամենը, ինչ ցանկանում եք, բայց հիմա մենք պետք է հաճախորդին ցույց տանք արդյունքը: Ի դեպ, մենք մոռացանք ասել, որ Հաճախորդը մեզ թույլ է տվել Wi-Fi-ի միջոցով մեր սարքավորումները միացնել իր «hotspot»-ին, բայց ընդհանուր հիմունքներով, այնպես, կարծես մենք հյուր հաճախորդներ լինենք»։ Եվ այսպես, մենք պետք է հավասարակշռող երթուղիչներ ստեղծենք. մի քանի WiFi ենթամիջերեսներ են բարձրացվում, որոնցից մեկը կպչում է թեժ կետին, իսկ երկրորդը վերահսկում է շրջակա միջավայրը, խելագարորեն վերբեռնում է tcpdump արդյունքը իր մեջ, այնուհետև ֆայլի բովանդակությունը փաթեթավորում է արխիվ և վտանգում: «չափից շատ ուտելուց» մահանալը փորձում է թքել FTP սերվերի բովանդակությունը: Զարմանալի չէ, որ հավասարակշռող երթուղիչը հաճախ «փչանում է» և ինչ-որ կերպ պետք է «վերակենդանացվի» հեռակա կարգով:

շառավիղԱվելի հեշտ է նկարագրել իրավիճակը այստեղ հաճախորդի այս հայտարարությամբ. «Մենք ցանկանում ենք թեժ կետերի ապակենտրոնացված ցանց, որը կաշխատի այն սարքավորումների վրա, որոնց մոդելը նախապես հայտնի չէ, ալիքների միջոցով, բայց որոնք մենք դեռ չգիտենք: Օ, մոռացանք ասել, որ մենք ոչ միայն ցանկանում ենք գովազդ ցուցադրել հաճախորդներին, այլև վերլուծել ամեն ինչ այն վայրի շուրջ, որտեղ տեղադրված է թեժ կետը: Ոչ, մենք դեռ չգիտենք, թե ինչու, բայց մենք դա կպարզենք, մի կասկածեք, մենք կարողացանք այս գաղափարը բերել»:

Եվ մենք չպետք է մոռանանք, որ նախկինում անհայտ բազմաթիվ հանգամանքների պատճառով հսկողությունը պետք է իրականացվի ոչ ստանդարտ պայմաններում, երբ մենք չենք կարող միանալ երթուղիչին անմիջապես IP-ի միջոցով՝ նավահանգիստով և ստիպված ենք պարզապես սպասել նրանից գործողության: Եթե ​​մենք վերացարկենք ինքներս մեզ, ապա սերվերի և երթուղիչի միջև երկխոսությունը կարող է ներկայացվել այսպես.

  • Ուղղորդիչ: Բարեւ Ձեզ. Ես այսինչ երթուղիչն եմ, ինձ համար առաջադրանքներ կա՞ն։
  • Սերվերերթուղիչ այսինչ, ես գրանցել եմ, որ ողջ ես։ Ահա մարտահրավերը. ցույց տվեք ifconfig հրամանի արդյունքը:
  • Ուղղորդիչ: Բարեւ Ձեզ. Ես այսինչ երթուղիչն եմ, վերջին անգամ խնդրեցիր ցույց տալ ifconfig-ի արդյունքը, ահա այն։ Ինձ համար առաջադրանքներ կա՞ն:
  • Սերվերերթուղիչ այսինչ, ես գրանցել եմ, որ ողջ ես։ Ձեզ համար առաջադրանքներ չկան:

Ամենահետաքրքիր հարցը. ինչպե՞ս կարող է հեռավոր երթուղիչը որոշակի քանակությամբ տեղեկատվություն ուղարկել: Վերջին մասում ես նկարագրեցի, որ սահմանափակ ռեսուրսների պատճառով երթուղիչն ունի միայն «կտրված» wget, որն աշխատում է միայն GET-ի միջոցով և ոչ մի այլ բան. չկա FTP-հաճախորդ կամ curl: Ավելի ճիշտ, մեզ անհրաժեշտ է ունիվերսալ մեթոդ՝ անկախ պատկերների հավաքման առանձնահատկություններից։ Ես որոշեցի օգտագործել wget-ը: Ավելի ճիշտ, ինչպես ես «կանգնեցի» - ես պարզապես այլընտրանք չունեի :)

Պարզապես հերքումԻմ կառավարման լուծումն աշխատում է, ոչ շատ սահմանափակ, և ես վստահ եմ, որ այն ծուռ է, նույնիսկ եթե այն համապատասխանում է իմ հաճախորդների մեծ մասին: Ինչպե՞ս կարող եք դա անել խելամտորեն. գրել մի փոքրիկ օգտակար ծրագիր, որն ուղարկում է POST երկուական տվյալներ 80 պորտի միջոցով: Ներառեք այն (կոմունալը) երթուղիչի որոնվածում և մուտք գործեք այն bash-ի միջոցով: Բայց իրականությունն այն է, որ ա) մենք պետք է արագ, բ) մենք, հավանաբար, պետք է ամեն ինչ անենք գոյություն ունեցող «երթուղիչների կենդանաբանական այգում» գ) «մի վնասիր»: — եթե երթուղիչն աշխատում է և այլ առաջադրանքներ է կատարում, փորձեք փոփոխություններ կատարել, որոնք չեն ազդի առկա ֆունկցիոնալության վրա:

Անցնենք իրականացմանը։ Ենթադրենք, ձեր հաճախորդը ցանկանում է հեշտությամբ և բնականաբար վերագործարկել երթուղիչը zabbix-ից՝ «մկնիկի սեղմումով»: Այսօր մենք կսկսենք նկարագրել իրականացումը Zabbix-ի հետ:
«Կառավարում» -> «Սցենարներ» ընտրացանկում ավելացրեք նոր սցենար: Մենք այն անվանում ենք «Reboot», որպես հրաման մուտքագրում ենք «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

, Որտեղ:
message=`ifconfig` — ifconfig հրամանի արդյունքը վերագրում ենք $message փոփոխականին
wget "xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai/a.php — մեր a.php սկրիպտը, որը գրանցում է երթուղիչները և հաղորդագրություններ ստանում նրանցից
u=user&p=գաղտնաբառ!&m=$հաղորդագրություն — հավատարմագրերը և հարցման փոփոխականի արժեքը m — վերագրում է $message փոփոխականի բովանդակությունը
-O /tmp/out.txt — մեզ այս դեպքում /tmp/out.txt ֆայլի ելք պետք չէ, բայց եթե այս պարամետրը նշված չէ, wget-ը չի աշխատում։

Ինչու սա չի աշխատում:Քանի որ դա անվտանգության պոտենցիալ փոս է: Ամենաանվնաս սխալը, որը կարող է պատահել, այն է, եթե, օրինակ, ձեր հրամանի ելքում կա «&» նիշը: Ուստի անհրաժեշտ է զտել և՛ այն ամենը, ինչ ուղարկվում է երթուղիչներից, և՛ այն ամենը, ինչ գալիս է սերվեր։ Այո, ես իսկապես ամաչում եմ: Ի պաշտպանություն իմ, ես կարող եմ միայն գրել, որ ամբողջ հոդվածը նվիրված է այն հարցին, թե ինչպես կառավարել երթուղիչները նախապես սահմանված որոնվածով և կապի ուղիներով, որոնք նախապես սահմանված չեն:

Դե, սկիզբ ապագայի համար. ես դեռ չեմ հասկացել, թե ինչպես օգտագործել ստանդարտ zabbix գործիքները, որպեսզի արտացոլեն արդյունքները (օրինակ՝ հրամանի կատարման արդյունքը), որոնք գալիս են սերվեր:

Հիշեցնում եմ ձեզ, որ բոլոր աղբյուրները կարելի է ձեռք բերել Git պահոցից հետևյալ հասցեով. github.com/BazDen/iotnet.online.git

Source: www.habr.com

Добавить комментарий