Ka nānā ʻana a me ka hoʻomalu ʻana i nā polokalamu Lunix/OpenWrt/Lede ma o ke awa 80…

Aloha kākou, ʻo kēia kaʻu ʻike mua ma Habré. Makemake wau e kākau e pili ana i ka hoʻokele ʻana i nā lako pūnaewele ma kahi pūnaewele waho ma ke ʻano maʻamau ʻole. He aha ka manaʻo maʻamau ʻole: ma ka hapanui o nā hihia, pono ʻoe e hoʻokele i nā mea hana ma kahi pūnaewele waho:

  • Helu IP lehulehu. ʻAe, a inā paha ka mea hana ma hope o ka NAT o kekahi, a laila he IP ākea a me kahi awa "i mua".
  • Tunnel (PPTP/OpenVPN/L2TP+IPSec, etc.) i ka piko waena e hiki ai ke komo.

No laila, pono ʻoe i "kaʻu kaʻa" inā ʻaʻole kūpono nā ala maʻamau iā ʻoe, no ka laʻana:

  1. Aia nā mea hana ma hope o NAT a, koe wale no ka http maʻamau (port 80), ua pani ʻia nā mea a pau. He kūlana maʻamau kēia no nā ʻoihana hui federal nui. Hiki iā lākou ke hoʻopaʻa inoa i nā awa, akā ʻaʻole koke, ʻaʻole wikiwiki, ʻaʻole no ʻoe.
  2. Kaila kamaʻilio paʻa ʻole a/a i ʻole “haiki”. ʻO ka māmā haʻahaʻa, nā poho mau. ʻO ka ʻeha a me ka huhū ke hoʻāʻo nei e hoʻonohonoho i kahi tunnel.
  3. He kaila kamaʻilio pipiʻi, kahi e helu maoli ai kēlā me kēia megabyte. Eia kekahi laʻana, nā leka uila. Hoʻohui ʻia nā lohi lōʻihi a me kahi hui "haiki".
  4. ʻO kahi kūlana inā pono ʻoe e "juggle" i kahi helu nui o nā mea ala liʻiliʻi, ma ka ʻaoʻao hoʻokahi, ua hoʻokomo ʻia ʻo OpenWrt / Lede e hoʻonui i nā hiki, a ma kekahi ʻaoʻao, ʻaʻole lawa nā kumuwaiwai (hoʻomanaʻo) o ke alalai. no na mea a pau.

Hoʻomaopopo i nā manawa helu He aha ka mea e pale ai iā ʻoe mai ka hoʻokomo ʻana i kahi kaʻa uila i loko o ke awa USB o ke alalai a hoʻonui i ka hoʻomanaʻo o ke alalai?

ʻO ka pinepine, ʻo nā koi no ke kumukūʻai o ka hopena ma ke ʻano holoʻokoʻa, akā i kekahi manawa he mea nui ke kumu kumu. No ka laʻana, aia kahi TP-Link ML3020 ma ka pūnaewele, ʻo kāna port USB wale nō i hoʻohana ʻia no ka modem 2G/3G, ua uhi ʻia kēia mau mea āpau i kekahi ʻano pahu liʻiliʻi liʻiliʻi a waiho ʻia ma kahi kiʻekiʻe, kiʻekiʻe (ma ka mast). mamao, mamao loa (ma ke kula, 30 km mai ke kahua kahua kahua paʻa kelepona kokoke loa). ʻAe, hiki iā ʻoe ke hoʻopili i kahi hub USB a hoʻonui i ka nui o nā awa, akā hōʻike ka ʻike he paʻakikī kēia a ʻaʻole hilinaʻi.

No laila, ua hoʻāʻo wau e wehewehe iā ʻoe i koʻu kūlana maʻamau: "ma kahi mamao, kahi mamao loa, aia kahi mea koʻikoʻi nui, mehameha a liʻiliʻi e holo ana i Linux. He mea nui e ʻike i hoʻokahi manawa i ka lā he "ola" ʻo ia a, inā pono, hoʻouna ʻia nā kauoha iā ia, no ka laʻana, "honey, reboot!"

E neʻe kākou i ka hoʻokō:

1) Ma ka ʻaoʻao router, ma o cron, kēlā me kēia 5/10/1440 mau minuke, a i kēlā me kēia manawa āu e makemake ai, pono ʻoe e hoʻouna i kahi noi http i ke kikowaena me ka hoʻohana ʻana i wget, mālama i ka hopena o ka noi i kahi faila, e hoʻokō i ka faila. , a e hooko aku.

Penei ke ano o ka'u laina cron:

Kōnae /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

, ma hea:
xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai ka waihona o kaʻu kikowaena. E ʻae mai iaʻu e hoʻomaopopo koke: ʻae, hiki iā ʻoe ke kuhikuhi i kahi helu IP kikoʻī o ka server, hana mākou i kēia a hiki i ko mākou mokuʻāina, i ka manaʻo pono o ka hakakā, e ʻōlelo wau, ʻaʻole au i ʻike, ua kāohi ʻia ke komo ʻana i ka liona. mahele o ka DigitalOcean a me Amazon "clouds". Inā hoʻohana ʻoe i kahi kikowaena hōʻailona, ​​​​inā loaʻa kahi hanana, hiki iā ʻoe ke hoʻāla maʻalahi i kahi ao hoʻihoʻi, hoʻihoʻi hou i ke kikowaena iā ia a hoʻihoʻi i ka nānā ʻana i nā hāmeʻa.

ʻO a.php ka inoa o ka palapala ʻaoʻao kikowaena. ʻAe, ʻike wau he hewa ka inoa ʻana i nā mea hoʻololi a me nā inoa faila me ka leka like ... Manaʻo wau e mālama mākou i kekahi mau bytes i ka hoʻouna ʻana i kahi noi :)
u - inoa hoʻohana, hoʻopaʻa inoa
p - ʻōlelo huna
ʻO "-O /tmp/wa.sh" kahi faila ma ke alalai mamao kahi e mālama ʻia ai ka pane o ke kikowaena, e like me ke kauoha reboot.

Nānā helu ʻelua: Ahhh, no ke aha mākou e hoʻohana ai i ka wget a ʻaʻole curl, no ka mea ma o ka curl hiki iā ʻoe ke hoʻouna i nā noi https ʻaʻole me GET, akā me POST? Ahhh no ka mea, e like me ka ʻōlelo hoʻohenehene kahiko "Piʻi ʻo NE i loko o ka ipu!" curl nā hale waihona puke hoʻopunipuni ma kahi o 2MB ka nui a ma muli o kēia ʻaʻole hiki iā ʻoe ke hōʻuluʻulu i kahi kiʻi no kahi TP-LINK ML3020 liʻiliʻi, no ka laʻana. A me wget - e ʻoluʻolu.

2) Ma ka ʻaoʻao kikowaena (loaʻa iaʻu ʻo Ubuntu) e hoʻohana mākou iā Zabbix. No ke aha: Makemake au e nani (me nā kiʻi) a maʻalahi (e hoʻouna i nā kauoha ma ka papa kuhikuhi). He mea kupanaha ko Zabbix e like me ka zabbix agent. Ma o ka ʻelele, e kāhea mākou i kahi script PHP ma ke kikowaena, e hoʻihoʻi i ka ʻike e pili ana i kā mākou mea hoʻokele i hoʻopaʻa inoa i ka manawa i koi ʻia. No ka mālama ʻana i ka ʻike e pili ana i ka manawa hoʻopaʻa inoa, nā kauoha no nā hāmeʻa, hoʻohana wau i MySQL, kahi mea hoʻohana papaʻaina ʻokoʻa me kēia mau kahua:

		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;

Hiki ke hoʻoiho ʻia nā kumuwaiwai āpau mai ka waihona Git ma: https://github.com/BazDen/iotnet.online.git
I kēia manawa ua kau ʻia nā palapala PHP ma ka ʻaoʻao kikowaena (no ka maʻalahi, hiki ke waiho ʻia i loko o ka /usr/share/zabbix/ folder):

a.php waihona:

<?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 file (ʻo ia ka palapala a ka luna zabbix i kapa ʻia):

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

ʻAe, ʻo ka pae hope: hoʻopaʻa inoa i kahi ʻelele a hoʻohui i nā papa manawa.

Inā ʻaʻole ʻoe i kau i ka luna zabbix, a laila:

apt-get install zabbix-agent

Hoʻoponopono i ka faila /etc/zabbix/zabbix_agentd.conf.

Hoʻohui i ka laina:

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

, ma hea:
ʻO ka hoʻāʻo ka inoa o kā mākou luna
“php /usr/share/zabbix/agent.php password mea hoʻohana” - he palapala i kapa ʻia e hōʻike ana i ka ʻikepili hoʻopaʻa inoa.

Hoʻohui i nā pakuhi: wehe i ka pūnaewele pūnaewele zabbix, koho mai ka papa kuhikuhi:
Nā hoʻonohonoho -> Nā node pūnaewele -> E hana i kahi node pūnaewele. Eia ua lawa ka wehewehe ʻana i ka inoa o ka mea hoʻokipa pūnaewele, kāna hui, a me ka mea hoʻohana paʻamau.

Ka nānā ʻana a me ka hoʻomalu ʻana i nā polokalamu Lunix/OpenWrt/Lede ma o ke awa 80…

I kēia manawa pono mākou e hoʻohui i kahi mea ʻikepili no kēia node pūnaewele. E noʻonoʻo i ʻelua mau kahua: "kī" - ʻo ia ka mea i kākau ʻia ma ka faila /etc/zabbix/zabbix_agentd.conf (i kā mākou hihia ʻo ia ka hoʻāʻo), a me ka "update interval" - hoʻonoho wau i 5 mau minuke. , no ka mea a ua hoʻopaʻa inoa ʻia nā mea hana ma ke kikowaena hoʻokahi i kēlā me kēia ʻelima mau minuke.

Ka nānā ʻana a me ka hoʻomalu ʻana i nā polokalamu Lunix/OpenWrt/Lede ma o ke awa 80…

ʻAe, e hoʻohui kākou i ka pakuhi. Paipai au i ke koho ʻana i ka "Fill" ma ke ʻano hoʻohālike.

Ka nānā ʻana a me ka hoʻomalu ʻana i nā polokalamu Lunix/OpenWrt/Lede ma o ke awa 80…

ʻO ka hopena he mea laconic loa, no ka laʻana e like me kēia:

Ka nānā ʻana a me ka hoʻomalu ʻana i nā polokalamu Lunix/OpenWrt/Lede ma o ke awa 80…

I ka nīnau kūpono: "pono ​​ia?", E pane wau: pono, ʻoiaʻiʻo, e ʻike i "nā kumu no ka hana ʻana i ke kaʻa" ma ka hoʻomaka o ka ʻatikala.

Inā hoʻāla kaʻu ʻike graphomaniac mua i ka hoihoi o ka poʻe heluhelu, a laila ma nā ʻatikala aʻe makemake wau e wehewehe pehea e hoʻouna ai i nā kauoha i nā lako mamao. Ua hoʻokō pū mākou i ka hoʻolālā holoʻokoʻa no nā polokalamu e pili ana i RouterOS (Mikrotik).

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka