በሉኒክስ/OpenWrt/Lede ላይ የተመሰረቱ መሳሪያዎችን በፖርት 80 በኩል የርቀት ክትትል እና ቁጥጥር…

ሰላም ለሁላችሁ፣ ይህ በሀበሬ ላይ የመጀመሪያዬ ተሞክሮ ነው። መደበኛ ባልሆነ መንገድ በውጫዊ አውታረመረብ ላይ የኔትወርክ መሳሪያዎችን እንዴት ማስተዳደር እንዳለብኝ መጻፍ እፈልጋለሁ. መደበኛ ያልሆነ ማለት ምን ማለት ነው፡- በአብዛኛዎቹ ሁኔታዎች በውጫዊ አውታረመረብ ላይ መሳሪያዎችን ለማስተዳደር የሚከተሉትን ያስፈልግዎታል:

  • የህዝብ አይፒ አድራሻ። ደህና, ወይም መሳሪያው ከአንድ ሰው NAT ጀርባ ከሆነ, የህዝብ አይፒ እና "የተላለፈ" ወደብ.
  • መሿለኪያ (PPTP/OpenVPN/L2TP+IPSec፣ ወዘተ) ወደሚገኝበት ማዕከላዊ መስቀለኛ መንገድ።

ስለዚህ መደበኛ ዘዴዎች ለእርስዎ የማይስማሙ ከሆነ “የእኔ ብስክሌት” ያስፈልግዎታል ፣ ለምሳሌ-

  1. መሳሪያዎቹ ከ NAT በስተጀርባ ይገኛሉ እና ከተለመደው http (ፖርት 80) በስተቀር ሁሉም ነገር ተዘግቷል. ይህ ለትልቅ የፌዴራል የኮርፖሬት ኔትወርኮች ሙሉ በሙሉ የተለመደ ሁኔታ ነው. ወደቦች መመዝገብ ይችላሉ, ነገር ግን ወዲያውኑ አይደለም, በፍጥነት አይደለም, እና ለእርስዎ አይደለም.
  2. ያልተረጋጋ እና/ወይም “ጠባብ” የመገናኛ ሰርጥ። ዝቅተኛ ፍጥነት, የማያቋርጥ ኪሳራዎች. ዋሻ ለማደራጀት ሲሞክሩ ህመም እና ብስጭት.
  3. እያንዳንዱ ሜጋባይት በትክክል የሚቆጠርበት ውድ የግንኙነት ጣቢያ። ለምሳሌ, የሳተላይት ግንኙነቶች. በተጨማሪም ረጅም መዘግየቶች እና "ጠባብ" ባንድ.
  4. በአንድ በኩል አቅምን ለማስፋት OpenWrt/Lede የተጫነበት ብዙ ትናንሽ ራውተሮችን “ማሽከርከር” የሚያስፈልግበት ሁኔታ ፣ በሌላ በኩል ደግሞ የራውተሩ ሀብቶች (ትውስታ) በቂ አይደሉም። ለሁሉም ነገር.

የማስታወሻ ቁጥር ጊዜዎች ፍላሽ አንፃፊን ወደ ራውተር ዩኤስቢ ወደብ ከመጫን እና የራውተር ማህደረ ትውስታን ከማስፋፋት የሚከለክለው ምንድን ነው?

ብዙውን ጊዜ, መስፈርቶቹ በአጠቃላይ የመፍትሄው ዋጋ ናቸው, ነገር ግን አንዳንድ ጊዜ የቅርጽ መንስኤም ቁልፍ ሚና ይጫወታል. ለምሳሌ በጣቢያው ላይ TP-Link ML3020 አለ፣ ብቸኛው የዩኤስቢ ወደብ ለ2ጂ/3ጂ ሞደም ጥቅም ላይ ይውላል፣ይህ ሁሉ በሆነ ትንሽ የፕላስቲክ መያዣ ተጠቅልሎ ከፍ ባለ ቦታ (ማስት ላይ) ይቀመጣል። ሩቅ ፣ ሩቅ (በሜዳ ፣ ከአቅራቢያው የሞባይል ኦፕሬተር ጣቢያ ጣቢያ 30 ኪ.ሜ) ። አዎ፣ የዩኤስቢ መገናኛ መሰካት እና የወደብ ብዛት ማስፋት ትችላለህ፣ ነገር ግን ልምድ እንደሚያሳየው ይህ አስቸጋሪ እና የማይታመን ነው።

ስለዚህ፣ የእኔን የተለመደ ሁኔታ ልገልጽልህ ሞከርኩ፡- “አንድ ቦታ፣ ሩቅ ቦታ፣ ሊኑክስን የሚያስኬድ በጣም አስፈላጊ፣ ብቸኛ እና ትንሽ ራውተር አለ። ቢያንስ በቀን አንድ ጊዜ "ህያው" እንደሆነ ማወቅ አስፈላጊ ነው, አስፈላጊ ከሆነ, ትዕዛዞች ወደ እሱ ይላካሉ, ለምሳሌ "ማር, ዳግም አስነሳ!"

ወደ ትግበራው እንሂድ፡-

1) በ ራውተር በኩል ፣ በ cron ፣ በየ 5/10/1440 ደቂቃዎች ፣ ወይም በፈለጉት ጊዜ ፣ ​​wgetን በመጠቀም የ http ጥያቄን ወደ አገልጋዩ መላክ ያስፈልግዎታል ፣ የጥያቄውን ውጤት ወደ ፋይል ያስቀምጡ ፣ ፋይሉ ተፈፃሚ እንዲሆን ያድርጉ። ፣ እና አስፈጽመው።

የእኔ ክሮን መስመር ይህን ይመስላል።

ፋይል /ወዘተ/crontabs/ሥር፡

  */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

, የት:
xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai የአገልጋዬ ጎራ ነው። ወዲያውኑ አስተውያለሁ፡ አዎ፣ የአገልጋዩን የተወሰነ አይ ፒ አድራሻ መግለጽ ትችላላችሁ፣ እስከ ግዛታችን ድረስ ይህን እናደርግ ነበር፣ በቀና የትግል ግፊት፣ እላለሁ፣ አላውቅም፣ መዳረሻውን ተዘግቷል የዲጂታል ውቅያኖስ እና የአማዞን “ደመናዎች” የአንበሳ ድርሻ። ተምሳሌታዊ ጎራ ከተጠቀሙ, እንደዚህ አይነት ክስተት ከተከሰተ, በቀላሉ ምትኬ ደመናን ከፍ ማድረግ, ጎራውን ወደ እሱ ማዞር እና የመሣሪያ ክትትልን ወደነበረበት መመለስ ይችላሉ.

a.php የአገልጋይ ጎን ስክሪፕት ስም ነው። አዎ፣ ተለዋዋጮችን መሰየም እና ስሞችን በተመሳሳይ ፊደል መመዝገብ ስህተት መሆኑን አውቃለሁ... በዚህ መንገድ ጥያቄ ስንልክ ጥቂት ባይት እንድናስቀምጥ ሀሳብ አቀርባለሁ :)
u - የተጠቃሚ ስም ፣ የሃርድዌር መግቢያ
p - የይለፍ ቃል
"-O /tmp/wa.sh" በርቀት ራውተር ላይ የአገልጋዩ ምላሽ ለምሳሌ የዳግም ማስነሳት ትዕዛዝ የሚቀመጥበት ፋይል ነው።

ማስታወሻ ቁጥር ሁለት፡- አህህ፣ ለምን wgetን እንጠቀማለን እንጂ አንከባለልም ምክንያቱም በ curl በኩል የhttps ጥያቄዎችን በGET ሳይሆን በPOST መላክ ትችላላችሁ? አህህ ምክንያቱም፣ እንደ ቀድሞው ቀልድ “NE ወደ ማሰሮው ውስጥ ይወጣል!” curl ወደ 2 ሜባ የሚጠጉ የምስጠራ ቤተ-ፍርግሞችን ያካትታል፣ እና በዚህ ምክንያት ለምሳሌ ለትንሽ TP-LINK ML3020 ምስል መሰብሰብ አይችሉም። እና በ wget - እባክዎን.

2) በአገልጋዩ በኩል (ኡቡንቱ አለኝ) Zabbix እንጠቀማለን. ለምን: ቆንጆ እንዲሆን እፈልጋለሁ (ከግራፎች ጋር) እና ምቹ (በአውድ ምናሌው በኩል ትዕዛዞችን ይላኩ). Zabbix እንደ ዛቢክስ ወኪል ያለ አስደናቂ ነገር አለው። በወኪሉ በኩል በአገልጋዩ ላይ የPHP ስክሪፕት እንጠራዋለን፣ ይህም ራውተራችን በተፈለገው ጊዜ መመዝገቡን ወይም አለመመዝገቡን መረጃ ይመልስልናል። ስለ መመዝገቢያ ጊዜ መረጃን ለማከማቸት ፣ለመሳሪያዎች ትዕዛዞች ፣እኔ MySQL እጠቀማለሁ ፣የሚከተሉትን መስኮች በግምት ያላቸውን የተለየ የሰንጠረዥ ተጠቃሚዎች።

		CREATE TABLE `users` (
		  `id` varchar(25) NOT NULL,
		  `passwd` varchar(25) NOT NULL,
		  `description` varchar(150) NOT NULL,
		  `category` varchar(30) NOT NULL,
		  `status` varchar(10) NOT NULL,
		  `last_time` varchar(20) NOT NULL, // время последнего соединения
		  `last_ip` varchar(20) NOT NULL, // IP последнего соединения 
		  `last_port` int(11) NOT NULL, // порт последнего соединения
		  `task` text NOT NULL, // задача которую получает роутер
		  `reg_task` varchar(150) NOT NULL, // "регулярная" задача, если мы захотим чтобы задача выполнялась всегда при регистрации
		  `last_task` text NOT NULL, // лог задач
		  `response` text NOT NULL, // сюда пишется ответ устройства
		  `seq` int(11) NOT NULL
		) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ሁሉም ምንጮች ከ Git ማከማቻ ሊወርዱ ይችላሉ በ፡ https://github.com/BazDen/iotnet.online.git
አሁን ፒኤችፒ ስክሪፕቶች በአገልጋዩ በኩል ተቀምጠዋል (ለምቾት ሲባል በ / usr/share/zabbix/ አቃፊ ውስጥ ሊቀመጡ ይችላሉ)

a.php ፋይል፡-

<?php
// Получаем входные параметры: имя пользователя, пароль и сообщение от удаленного роутера
// Зачем нужен message ? Это способ ответа роутера, например если вы захотите посмотреть содержимое файла роутера
	$user=$_REQUEST['u'];
	$password=$_REQUEST['p'];
	$message=$_REQUEST['m'];
	
	// Подключаемся к нашей базе данных (MySQL)
	$conn=new mysqli("localhost","db_login","db_password","DB_name");
	if (mysqli_connect_errno()) {
		exit();
	}
	$conn->set_charset("utf8");
	// здесь ищем наш роутер в таблице базы данных
	$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();
		// здесь мы роутеру отправляем его задачи
		echo $task;
		echo "n";
		echo $reg_task;
		// вот здесь мы пишем время ответа и сам ответ роутера
		$response_history="[".date("Y-m-d H:i")."] ".$message;
		// задачу отправили, теперь надо ее удалить,а после удаления отметить в логах, что такая-то задача выполнена
		$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();
		}
		// теперь надо сохранить время регистрации пользователя, его айпи и сообщение от него. Пока только сообщение
		$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();
	}
	// если мы не нашли роутер в нашей базе данных, или его статус "неактивный", то ему ... будет отправлена команда reboot....
	// Почему так жестоко ? Потому что роутеры иногда пропадают, а это маленький способ проучить "новых владельцев". 
	else
	{
	echo "reboot";
	}
	$sql_users->close();
	?>

Agent.php ፋይል (ይህ የሚጠራው የ zabbix ወኪል ስክሪፕት ነው)

<?php
	// файл агента Zabbix. Данный скрипт обращается к таблице users и получает "1" если устройство регистрировалось с момента последнего обращения
	// user и password - учетные данные оборудования
	$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");
	$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();
	// обмен данными происходит через поле seq. При регистрации железка ставит данное поле в "1"
	if (($sql_users->num_rows)==1){
		$sql_users->fetch();
		echo $seq;
	}
		
	// обнуляем $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();
?>		

ደህና, የመጨረሻው ደረጃ: ወኪል መመዝገብ እና መርሃግብሮችን መጨመር.

የዛቢክስ ወኪልን ገና ካልጫኑት፡-

apt-get install zabbix-agent

ፋይሉን ያርትዑ /etc/zabbix/zabbix_agentd.conf.

መስመሩን አክል፡

UserParameter=test,php /usr/share/zabbix/agent.php user password

, የት:
ፈተና የወኪላችን ስም ነው።
"php /usr/share/zabbix/agent.php የተጠቃሚ ይለፍ ቃል" - የመሳሪያውን ምዝገባ ውሂብ የሚያመለክት ስክሪፕት.

ገበታዎችን ማከል፡ የ zabbix ድር በይነገጽን ይክፈቱ፣ ከምናሌው ይምረጡ፡
መቼቶች -> የአውታረ መረብ ኖዶች -> የአውታረ መረብ መስቀለኛ መንገድ ይፍጠሩ። እዚህ የአውታረ መረብ አስተናጋጁን ፣ ቡድኑን እና የነባሪ ወኪል በይነገጽን ስም መጥቀስ በቂ ነው።

በሉኒክስ/OpenWrt/Lede ላይ የተመሰረቱ መሳሪያዎችን በፖርት 80 በኩል የርቀት ክትትል እና ቁጥጥር…

አሁን ለዚህ የአውታረ መረብ መስቀለኛ መንገድ የውሂብ አካል ማከል አለብን። ለሁለት መስኮች ትኩረት ይስጡ-“ቁልፍ” - ይህ በትክክል በ /etc/zabbix/zabbix_agentd.conf ፋይል ውስጥ የጻፍነው ግቤት ነው (በእኛ ሁኔታ ይህ ፈተና ነው) እና “የዝማኔ ክፍተት” - ለ 5 ደቂቃዎች አዘጋጅቼዋለሁ። , ምክንያቱም እና መሳሪያዎቹ በየአምስት ደቂቃዎች አንድ ጊዜ በአገልጋዩ ላይ ይመዘገባሉ.

በሉኒክስ/OpenWrt/Lede ላይ የተመሰረቱ መሳሪያዎችን በፖርት 80 በኩል የርቀት ክትትል እና ቁጥጥር…

ደህና፣ ግራፍ እንጨምር። እንደ የአጻጻፍ ስልት "ሙላ" እንዲመርጡ እመክራለሁ.

በሉኒክስ/OpenWrt/Lede ላይ የተመሰረቱ መሳሪያዎችን በፖርት 80 በኩል የርቀት ክትትል እና ቁጥጥር…

ውፅዓት በጣም ላኮኒክ ነው ፣ ለምሳሌ እንደዚህ

በሉኒክስ/OpenWrt/Lede ላይ የተመሰረቱ መሳሪያዎችን በፖርት 80 በኩል የርቀት ክትትል እና ቁጥጥር…

ወደ ምክንያታዊ ጥያቄ: "ይህ ዋጋ ነበረው?", እኔ እመልስለታለሁ: ደህና, በእርግጥ, በአንቀጹ መጀመሪያ ላይ "ብስክሌት ለመፍጠር ምክንያቶች" የሚለውን ተመልከት.

የእኔ የመጀመሪያ የግራፍማኒያ ልምድ የአንባቢዎችን ፍላጎት ካነሳሳ, በሚቀጥሉት ጽሁፎች ውስጥ ትዕዛዞችን ወደ የርቀት መሳሪያዎች እንዴት እንደሚልክ መግለጽ እፈልጋለሁ. በ RouterOS (Mikrotik) ላይ በመመስረት ለመሳሪያዎች ሙሉውን እቅድ ተግባራዊ ለማድረግ ችለናል.

ምንጭ: hab.com

አስተያየት ያክሉ