పోర్ట్ 80 ద్వారా Linux/OpenWrt/Lede ఆధారిత పరికరాల రిమోట్ పర్యవేక్షణ మరియు నిర్వహణ, కొనసాగింది

ఇది వ్యాసం యొక్క చివరి భాగం, ఇక్కడ ప్రారంభం habr.com/en/post/445568
చివరిసారి నేను పరికర పర్యవేక్షణను ఎలా అమలు చేసాను అనే దాని గురించి వ్రాసాను, ఇప్పుడు మేము నిర్వహణ గురించి మాట్లాడుతాము. కస్టమర్ వైపున ఉన్న “సాంకేతిక నిపుణులతో” చర్చల్లో, నేను తరచుగా అలాంటి చిన్న పరికరాల సామర్థ్యాల గురించి పరిమిత అవగాహనను ఎదుర్కొంటాను (తక్కువ మెమరీ వనరులు మరియు పనితీరుతో), చాలా మంది నమ్ముతారు, “మరింత ఏదైనా కోసం రీబూట్ పంపడం మాకు చాలా అవసరం. సీరియస్ మేము ఒక టీమ్ పంపుతాము” .
కానీ ఇది పూర్తిగా నిజం కాదని అభ్యాసం చూపిస్తుంది. సాధారణ సాధారణ పనుల యొక్క చిన్న జాబితా ఇక్కడ ఉంది:

  1. నెట్‌వర్క్ డయాగ్నస్టిక్స్ మరియు ట్రబుల్షూటింగ్. మీ రౌటర్ యొక్క ఈథర్నెట్ పోర్ట్ వెనుక సాధారణంగా దాని స్వంత అంతర్గత IP చిరునామాను కలిగి ఉండే మరొక హార్డ్‌వేర్ భాగం ఉంటుంది. కొన్నిసార్లు, మీరు దానిని "పింగ్" చేయవచ్చు (తప్పక). లేదా సొరంగం నిర్వహణ - 3G మోడెమ్ ద్వారా పనిచేసే రౌటర్‌లో సొరంగం అకస్మాత్తుగా పెరగకపోతే, కానీ మనం రూటర్‌ను చూడవచ్చు.
  2. వ్యవస్థ నిర్వహణ. ఫర్మ్‌వేర్ అప్‌డేట్, సర్వీస్ స్క్రిప్ట్ అప్‌గ్రేడ్.
  3. బ్యాలెన్సింగ్ యాక్ట్. దీనిని "వక్రబుద్ధి" అని పిలవవచ్చు, కానీ "సమతుల్యత" అనే భావన, నేను కోట్ చేస్తున్నాను, "అస్థిర శరీర స్థితిలో సమతుల్యతను కాపాడుకోవడానికి సర్కస్ ప్రదర్శనకారుడి సామర్థ్యం" - బాగా సరిపోతుంది. కస్టమర్ యొక్క పరిమిత బడ్జెట్ కారణంగా ఇటువంటి పరిస్థితులు తలెత్తుతాయి. క్రింద నేను కొన్ని ఉదాహరణలు ఇచ్చాను, కానీ ... అవి నేరుగా కథ ఇతివృత్తానికి సంబంధించినవి కావు, నోట్స్‌లో పెట్టాను

Wi-Fi పర్యవేక్షణప్రధానంగా ఫెడరల్ రిటైల్ చైన్‌లలో గత ఐదు సంవత్సరాలుగా ఫ్యాషన్ అంశం. మీరు ట్రేడింగ్ ఫ్లోర్‌లలో తీరికగా షికారు చేస్తున్నారు మరియు Wi-Fiని ఆన్ చేసిన మీ మొబైల్ ఫోన్ నెట్‌వర్క్‌లోని కొన్ని థ్రెడ్‌లకు “అంటుకునే” ప్రయత్నంలో, క్రమం తప్పకుండా ప్రోబ్ రిక్వెస్ట్ ప్యాకెట్‌లను పంపుతుంది, వీటిని లెక్కించేందుకు విశ్లేషించవచ్చు మీరు: మీరు ఈ దుకాణానికి ఎంత తరచుగా వస్తారు, ఏ కారణాల వల్ల మీరు పథాల వెంట నడుస్తారు మరియు మొదలైనవి. అప్పుడు డేటా సేకరించబడుతుంది, విశ్లేషించబడుతుంది, హీట్ మ్యాప్‌లు డ్రా చేయబడతాయి మరియు నిర్వాహకులు అటువంటి చిత్రాల కోసం నిర్వహణ లేదా పెట్టుబడిదారుల నుండి డబ్బు "దోపిడీ" చేస్తారు. సరే, ప్రస్తుతానికి.... “డబ్బు లేదు, కానీ మీరు పట్టుకోండి...”, మరియు ఫలితం (నిజమైన) ఇప్పటికే చూపబడాలి, మంచి పాత పాట ప్రారంభమవుతుంది: “అవును, అవును, అప్పుడు మేము సిస్ మరియు మీకు కావలసిన ప్రతిదాన్ని ఇన్‌స్టాల్ చేస్తుంది, కానీ ఇప్పుడు మేము కస్టమర్‌కు ఫలితాన్ని చూపించాలి! చెప్పాలంటే, కస్టమర్ మా పరికరాలను అతని హాట్‌స్పాట్‌కి Wi-Fi ద్వారా కనెక్ట్ చేయడానికి మాకు అనుమతినిచ్చారని చెప్పడం మర్చిపోయాము, కానీ సాధారణ ప్రాతిపదికన, మేము అతిథి క్లయింట్‌ల వలె. కాబట్టి మనం బ్యాలెన్సింగ్ రూటర్‌లను తయారు చేయాలి - అనేక WiFi సబ్‌ఇంటర్‌ఫేస్‌లు పెంచబడతాయి, వాటిలో ఒకటి హాట్‌స్పాట్‌కు అతుక్కుంటుంది మరియు రెండవది పర్యావరణాన్ని పర్యవేక్షిస్తుంది, tcpdump ఫలితాన్ని ఆవేశంగా అప్‌లోడ్ చేస్తుంది, ఆపై ఫైల్‌లోని కంటెంట్‌లను ఆర్కైవ్‌లో ప్యాక్ చేస్తుంది మరియు నష్టాలను కలిగిస్తుంది. "అతిగా తినడం" నుండి చనిపోవడం FTP సర్వర్‌లోని కంటెంట్‌లను ఉమ్మివేయడానికి ప్రయత్నిస్తుంది. బ్యాలెన్సింగ్ రూటర్ తరచుగా "విచ్ఛిన్నం" కావడంలో ఆశ్చర్యం లేదు మరియు ఏదో ఒకవిధంగా రిమోట్‌గా "పునరుజ్జీవనం" చేయాలి.

వ్యాసార్ధంకస్టమర్ నుండి ఈ ప్రకటన వంటి వాటితో ఇక్కడ పరిస్థితిని వివరించడం సులభం: “మేము వికేంద్రీకృత హాట్‌స్పాట్‌ల నెట్‌వర్క్‌ను కోరుకుంటున్నాము, ఇది ఛానెల్‌ల ద్వారా ముందుగా తెలియని పరికరాలపై పని చేస్తుంది, కానీ మనకు ఇంకా తెలియదు. ఓహ్, మేము చెప్పడం మర్చిపోయాము, మేము క్లయింట్‌లకు ప్రకటనలను మాత్రమే చూపించాలనుకుంటున్నాము, కానీ హాట్‌స్పాట్ ఇన్‌స్టాల్ చేయబడిన ప్రదేశం చుట్టూ ఉన్న ప్రతిదాన్ని కూడా విశ్లేషిస్తాము. లేదు, ఎందుకు అని మాకు ఇంకా తెలియదు, కానీ మేము దానిని కనుగొంటాము, సందేహించకండి, మేము ఈ ఆలోచనతో ముందుకు రాగలిగాము.

మరియు ఇంతకుముందు తెలియని చాలా పరిస్థితుల కారణంగా, మేము IP: పోర్ట్ ద్వారా నేరుగా రౌటర్‌కు కనెక్ట్ చేయలేనప్పుడు మరియు దాని నుండి కార్యాచరణ కోసం వేచి ఉండవలసి వచ్చినప్పుడు, ప్రామాణికం కాని పరిస్థితులలో నియంత్రణ తప్పనిసరిగా నిర్వహించబడుతుందని మనం మర్చిపోకూడదు. మనల్ని మనం సంగ్రహించుకుంటే, సర్వర్ మరియు రూటర్ మధ్య సంభాషణను ఇలా సూచించవచ్చు:

  • రూటర్: హలో. నేను అలాంటి మరియు అలాంటి రౌటర్, నాకు ఏవైనా పనులు ఉన్నాయా?
  • సర్వర్: రూటర్ అటువంటి మరియు అటువంటి, నేను మీరు సజీవంగా ఉన్నారని, మీరు నమోదు. ఇక్కడ సవాలు ఉంది: ifconfig కమాండ్ యొక్క ఫలితాన్ని నాకు చూపించాలా?
  • రూటర్: హలో. నేను అలాంటి రూటర్‌ని, చివరిసారి మీరు ifconfig ఫలితాన్ని చూపించమని అడిగారు, ఇదిగోండి. నాకు ఏవైనా పనులు ఉన్నాయా?
  • సర్వర్: రూటర్ అటువంటి మరియు అటువంటి, నేను మీరు సజీవంగా ఉన్నారని, మీరు నమోదు. మీ కోసం టాస్క్‌లు లేవు.

అత్యంత ఆసక్తికరమైన ప్రశ్న: రిమోట్ రూటర్ కొంత సమాచారాన్ని ఎలా పంపగలదు? చివరి భాగంలో, పరిమిత వనరుల కారణంగా, రూటర్‌లో “స్ట్రిప్డ్-డౌన్” wget మాత్రమే ఉందని నేను వివరించాను, ఇది GET ద్వారా మాత్రమే పనిచేస్తుంది మరియు మరేమీ లేదు; FTP క్లయింట్ లేదా కర్ల్ లేదు. మరింత ఖచ్చితంగా, ఇమేజ్ అసెంబ్లీ లక్షణాలతో సంబంధం లేకుండా మనకు సార్వత్రిక పద్ధతి అవసరం. నేను wget ఉపయోగించడంపై స్థిరపడ్డాను. మరింత ఖచ్చితంగా, నేను ఎలా “ఆగిపోయాను” - నాకు వేరే మార్గం లేదు :)

కేవలం నిరాకరణనా మేనేజ్‌మెంట్ సొల్యూషన్ పని చేస్తోంది, చాలా పరిమితం కాదు, మరియు ఇది నా కస్టమర్‌లలో చాలా మందికి సరిపోయినప్పటికీ, అది వంకరగా ఉందని నేను ఖచ్చితంగా అనుకుంటున్నాను. మీరు దీన్ని తెలివిగా ఎలా చేయగలరు - పోర్ట్ 80 ద్వారా POST బైనరీ డేటాను పంపే చిన్న యుటిలిటీని వ్రాయండి. రౌటర్ ఫర్మ్‌వేర్‌లో దీన్ని (యుటిలిటీ) చేర్చండి మరియు బాష్‌ని ఉపయోగించి దాన్ని యాక్సెస్ చేయండి. కానీ వాస్తవమేమిటంటే: ఎ) మనం త్వరగా చేయాలి బి) ఇప్పటికే ఉన్న “జూ ఆఫ్ రూటర్స్”లో మనం ప్రతిదీ చేయాల్సి ఉంటుంది సి) “హాని చేయవద్దు!” — రౌటర్ పని చేస్తూ మరియు ఇతర పనులను నిర్వహిస్తుంటే, ఇప్పటికే ఉన్న కార్యాచరణను ప్రభావితం చేయని మార్పులను చేయడానికి ప్రయత్నించండి.

అమలుకు వెళ్దాం. మీ కస్టమర్ "మౌస్ క్లిక్"తో సులభంగా మరియు సహజంగా zabbix నుండి రూటర్‌ని రీబూట్ చేయాలనుకుంటున్నారని అనుకుందాం. ఈ రోజు మనం Zabbixతో అమలును వివరించడం ప్రారంభిస్తాము.
“అడ్మినిస్ట్రేషన్” -> “స్క్రిప్ట్‌లు” మెనులో, కొత్త స్క్రిప్ట్‌ను జోడించండి. మేము దానిని “రీబూట్” అని పిలుస్తాము, “php /usr/share/zabbix/reboot.php {HOST.HOST}”ని కమాండ్‌గా నమోదు చేయండి.

పోర్ట్ 80 ద్వారా Linux/OpenWrt/Lede ఆధారిత పరికరాల రిమోట్ పర్యవేక్షణ మరియు నిర్వహణ, కొనసాగింది

తదుపరి: మెనూ “మానిటరింగ్” -> “తాజా డేటా” -> “కావలసిన నెట్‌వర్క్ నోడ్‌పై కుడి క్లిక్ చేయండి.” స్క్రిప్ట్‌ని జోడించిన తర్వాత మెనూ ఇలా ఉంటుంది.

పోర్ట్ 80 ద్వారా Linux/OpenWrt/Lede ఆధారిత పరికరాల రిమోట్ పర్యవేక్షణ మరియు నిర్వహణ, కొనసాగింది
దీని ప్రకారం, మేము reboot.php స్క్రిప్ట్‌ను /usr/share/zabbix డైరెక్టరీలో ఉంచాము (మీది భిన్నంగా ఉండవచ్చు, నేను zabbixa రూట్ డైరెక్టరీని ఉపయోగిస్తాను).

భద్రతా నిరాకరణస్క్రిప్ట్‌లో వివరణను స్పష్టంగా తెలియజేయడానికి, నేను రూటర్ ఐడిని మాత్రమే ఉపయోగిస్తాను, కానీ పాస్‌వర్డ్‌ని ఉపయోగించను. ఉత్పత్తి సంస్కరణలో దీన్ని చేయడానికి ఇది సిఫార్సు చేయబడదు! నేను దీన్ని ఎందుకు చేసాను: ఎందుకంటే రౌటర్ల కోసం పాస్‌వర్డ్‌లను ఎక్కడ నిల్వ చేయాలి అనేది పెద్ద ప్రశ్న? "ఇన్వెంటరీ డేటా"లో 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=user&p=password!&m=$message — ఆధారాలు మరియు అభ్యర్థన వేరియబుల్ విలువ m — $message వేరియబుల్ యొక్క కంటెంట్‌లను కేటాయిస్తుంది
-O /tmp/out.txt — ఈ సందర్భంలో మనకు /tmp/out.txt ఫైల్‌కి అవుట్‌పుట్ అవసరం లేదు, కానీ ఈ పరామితి పేర్కొనబడకపోతే, wget పని చేయదు

ఇది ఎందుకు పని చేయదు?ఎందుకంటే ఇది ఒక సంభావ్య భద్రతా రంధ్రం. ఉదాహరణకు, మీ కమాండ్ అవుట్‌పుట్‌లో “&” అక్షరం ఉంటే జరిగే అత్యంత హానిచేయని లోపం. అందువల్ల, రౌటర్ల నుండి పంపబడిన ప్రతిదీ మరియు సర్వర్‌కు వచ్చే ప్రతిదీ రెండింటినీ ఫిల్టర్ చేయడం అవసరం. అవును, నేను నిజంగా సిగ్గుపడుతున్నాను. నా రక్షణలో, ముందుగా నిర్వచించని ఫర్మ్‌వేర్ మరియు కమ్యూనికేషన్ ఛానెల్‌లతో రౌటర్‌లను ఎలా నిర్వహించాలో మొత్తం కథనం అంకితం చేయబడిందని మాత్రమే నేను వ్రాయగలను.

సరే, భవిష్యత్తు కోసం ప్రారంభం: సర్వర్‌కు వచ్చే ఫలితాలను (ఉదాహరణకు, ఆదేశాన్ని అమలు చేయడం వల్ల) ప్రతిబింబించేలా ప్రామాణిక zabbix సాధనాలను ఎలా ఉపయోగించాలో నేను ఇంకా గుర్తించలేదు.

అన్ని మూలాధారాలను Git రిపోజిటరీ నుండి ఇక్కడ పొందవచ్చని నేను మీకు గుర్తు చేస్తున్నాను: github.com/BazDen/iotnet.online.git

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి