Abojuto latọna jijin ati iṣakoso ti awọn ẹrọ orisun Lunix/OpenWrt/Lede nipasẹ ibudo 80…

Kaabo gbogbo eniyan, eyi ni iriri akọkọ mi lori Habré. Mo fẹ lati kọ nipa bi o ṣe le ṣakoso awọn ohun elo nẹtiwọọki lori nẹtiwọọki ita ni ọna ti kii ṣe deede. Kini itumọ ti kii ṣe boṣewa: ni ọpọlọpọ awọn ọran, lati ṣakoso ohun elo lori nẹtiwọọki ita o nilo:

  • Adirẹsi IP ti gbogbo eniyan. O dara, tabi ti ohun elo ba wa lẹhin NAT ẹnikan, lẹhinna IP ti gbogbo eniyan ati ibudo “ti a firanṣẹ siwaju”.
  • Eefin (PPTP/OpenVPN/L2TP+IPSec, ati bẹbẹ lọ) si ipade aarin nipasẹ eyiti yoo jẹ wiwọle.

Nitorinaa, iwọ yoo nilo “keke mi” nigbati awọn ọna boṣewa ko baamu fun ọ, fun apẹẹrẹ:

  1. Awọn ẹrọ ti wa ni be sile NAT ati, ayafi fun awọn ibùgbé http (ibudo 80), ohun gbogbo ti wa ni pipade. Eyi jẹ ipo deede patapata fun awọn nẹtiwọọki ajọṣepọ apapo nla. Wọn le forukọsilẹ awọn ebute oko oju omi, ṣugbọn kii ṣe lẹsẹkẹsẹ, kii ṣe yarayara, kii ṣe fun ọ.
  2. Riru ati/tabi “dín” ikanni ibaraẹnisọrọ. Iyara kekere, awọn adanu igbagbogbo. Irora ati ibanuje nigbati o n gbiyanju lati ṣeto eefin kan.
  3. Ikanni ibaraẹnisọrọ ti o gbowolori, nibiti itumọ ọrọ gangan gbogbo megabyte ka. Fun apẹẹrẹ, awọn ibaraẹnisọrọ satẹlaiti. Plus gun idaduro ati ki o kan "dín" iye.
  4. Ipo kan nigbati o nilo lati “juggle” nọmba nla ti awọn onimọ-ọna kekere, lori eyiti, ni apa kan, OpenWrt / Lede ti fi sii lati faagun awọn agbara, ati ni apa keji, awọn orisun (iranti) ti olulana ko to. fun ohun gbogbo.

Awọn akoko nọmba akiyesi Kini o ṣe idiwọ fun ọ lati fi kọnputa filasi sinu ibudo USB ti olulana ati faagun iranti olulana naa?

Ni ọpọlọpọ igba, awọn ibeere wa fun idiyele ti ojutu bi odidi, ṣugbọn nigbami ifosiwewe fọọmu tun ṣe ipa pataki. Fun apẹẹrẹ, TP-Link ML3020 wa ni aaye naa, ibudo USB nikan ni a lo fun modẹmu 2G/3G, gbogbo eyi ni a we sinu iru apoti ṣiṣu kekere kan ati gbe si ibikan ga, giga (lori mast), jina, jina (ni aaye, 30 km lati ibudo oniṣẹ ẹrọ alagbeka ti o sunmọ julọ). Bẹẹni, o le pulọọgi sinu ibudo USB kan ati ki o faagun nọmba awọn ebute oko oju omi, ṣugbọn iriri fihan pe eyi jẹ ẹru ati aigbẹkẹle.

Nitorinaa, Mo gbiyanju lati ṣapejuwe ipo aṣoju mi ​​fun ọ: “Ibikan ti o jinna, jinna, pataki kan wa, adashe ati olulana kekere ti nṣiṣẹ Linux. O ṣe pataki lati mọ o kere ju lẹẹkan lojoojumọ pe o “laaye” ati, ti o ba jẹ dandan, awọn aṣẹ ni a fi ranṣẹ si i, fun apẹẹrẹ, “oyin, atunbere!”

Jẹ ki a lọ si imuse:

1) Ni ẹgbẹ olulana, nipasẹ cron, gbogbo awọn iṣẹju 5/10/1440, tabi nigbakugba ti o ba fẹ, o nilo lati fi ibeere http ranṣẹ si olupin ni lilo wget, fi abajade ibeere naa pamọ si faili kan, jẹ ki faili naa le ṣiṣẹ. , ki o si ṣiṣẹ.

Laini cron mi dabi nkan bayi:

Faili /etc/crontabs/root:

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

ibo:
xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai ni aaye ti olupin mi. Emi yoo ṣe akiyesi lẹsẹkẹsẹ: bẹẹni, o le ṣafihan adiresi IP kan pato ti olupin naa, a lo lati ṣe eyi titi di ipinlẹ wa, ni itara ododo ti Ijakadi, Emi yoo sọ, Emi ko mọ, dina wiwọle si ipin kiniun ti DigitalOcean ati Amazon “awọsanma”. Ti o ba lo ašẹ aami kan, ti iru iṣẹlẹ ba waye, o le ni rọọrun gbe awọsanma afẹyinti soke, tunto agbegbe naa si ati mu ibojuwo ẹrọ pada.

a.php ni orukọ ti iwe afọwọkọ ẹgbẹ olupin. Bẹẹni, Mo mọ pe o jẹ aṣiṣe lati lorukọ awọn oniyipada ati awọn orukọ faili pẹlu lẹta kanna… Mo daba pe ni ọna yii a fipamọ awọn baiti diẹ nigba fifiranṣẹ ibeere kan :)
u - orukọ olumulo, hardware wiwọle
p - ọrọigbaniwọle
"-O /tmp/wa.sh" jẹ faili lori olulana latọna jijin nibiti esi olupin, fun apẹẹrẹ aṣẹ atunbere, yoo wa ni fipamọ.

Akiyesi nọmba meji: Ahhh, kilode ti a fi lo wget kii ṣe curl, nitori nipasẹ curl o le firanṣẹ awọn ibeere https kii ṣe pẹlu GET, ṣugbọn pẹlu POST? Ahhh nitori, bi ninu awada atijọ “NE gun sinu idẹ!” curl pẹlu awọn ile ikawe fifi ẹnọ kọ nkan ti o to 2MB ni iwọn, ati nitori eyi ko ṣeeṣe pe iwọ yoo ni anfani lati ṣajọ aworan kan fun TP-LINK ML3020 kekere, fun apẹẹrẹ. Ati pẹlu wget - jọwọ.

2) Ni ẹgbẹ olupin (Mo ni Ubuntu) a yoo lo Zabbix. Kini idi: Mo fẹ ki o lẹwa (pẹlu awọn aworan) ati irọrun (firanṣẹ awọn aṣẹ nipasẹ atokọ ọrọ-ọrọ). Zabbix ni iru ohun iyanu bi aṣoju zabbix. Nipasẹ aṣoju, a yoo pe iwe afọwọkọ PHP kan lori olupin naa, eyiti yoo da alaye pada nipa boya olulana wa forukọsilẹ lakoko akoko ti o nilo. Lati tọju alaye nipa akoko iforukọsilẹ, awọn aṣẹ fun awọn ẹrọ, Mo lo MySQL, awọn olumulo tabili lọtọ pẹlu isunmọ awọn aaye wọnyi:

		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;

Gbogbo awọn orisun le ṣe igbasilẹ lati ibi ipamọ Git ni: https://github.com/BazDen/iotnet.online.git
Bayi awọn iwe afọwọkọ PHP ti a gbe si ẹgbẹ olupin (fun irọrun, wọn le gbe sinu folda / usr/share/zabbix/):

a.php faili:

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

Faili Agent.php (eyi ni iwe afọwọkọ ti aṣoju zabbix ti a pe ni):

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

O dara, ipele ikẹhin: fiforukọṣilẹ aṣoju ati fifi awọn iṣeto sii.

Ti o ko ba ti fi sori ẹrọ aṣoju zabbix, lẹhinna:

apt-get install zabbix-agent

Ṣatunkọ faili /etc/zabbix/zabbix_agentd.conf.

Fi ila naa kun:

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

ibo:
idanwo ni orukọ aṣoju wa
“php /usr/share/zabbix/agent.php ọrọigbaniwọle olumulo” - iwe afọwọkọ ti a pe ti n tọka data iforukọsilẹ ẹrọ.

Ṣafikun awọn shatti: ṣii wiwo wẹẹbu zabbix, yan lati inu akojọ aṣayan:
Eto -> Awọn apa nẹtiwọki -> Ṣẹda ipade nẹtiwọki kan. Nibi o ti to lati pato orukọ olupin nẹtiwọọki, ẹgbẹ rẹ, ati wiwo aṣoju aiyipada:

Abojuto latọna jijin ati iṣakoso ti awọn ẹrọ orisun Lunix/OpenWrt/Lede nipasẹ ibudo 80…

Bayi a nilo lati ṣafikun ipin data kan fun ipade nẹtiwọọki yii. San ifojusi si awọn aaye meji: “bọtini” - eyi ni deede paramita ti a kowe ninu faili /etc/zabbix/zabbix_agentd.conf (ninu ọran wa o jẹ idanwo), ati “aarin akoko imudojuiwọn” - Mo ṣeto si awọn iṣẹju 5 , nitori ati pe ẹrọ naa tun forukọsilẹ lori olupin lẹẹkan ni gbogbo iṣẹju marun.

Abojuto latọna jijin ati iṣakoso ti awọn ẹrọ orisun Lunix/OpenWrt/Lede nipasẹ ibudo 80…

O dara, jẹ ki a ṣafikun aworan kan. Mo ṣeduro yiyan “Kun” bi ara Rendering.

Abojuto latọna jijin ati iṣakoso ti awọn ẹrọ orisun Lunix/OpenWrt/Lede nipasẹ ibudo 80…

Ijade jẹ nkan ti laconic pupọ, fun apẹẹrẹ bii eyi:

Abojuto latọna jijin ati iṣakoso ti awọn ẹrọ orisun Lunix/OpenWrt/Lede nipasẹ ibudo 80…

Si ibeere ti o ni imọran: "Ṣe o tọ si?", Emi yoo dahun: daradara, dajudaju, wo "awọn idi fun ṣiṣẹda kẹkẹ" ni ibẹrẹ ti nkan naa.

Ti iriri graphomaniac akọkọ mi ba fa iwulo awọn oluka, lẹhinna ninu awọn nkan atẹle Mo fẹ lati ṣe apejuwe bi o ṣe le fi awọn aṣẹ ranṣẹ si ohun elo latọna jijin. A tun ṣakoso lati ṣe gbogbo ero fun awọn ẹrọ ti o da lori RouterOS (Mikrotik).

orisun: www.habr.com

Fi ọrọìwòye kun