Remote yekutarisa uye kutonga kweLunix/OpenWrt/Lede yakavakirwa zvishandiso kuburikidza nechiteshi 80…

Mhoroi mose, ichi ndicho chiitiko changu chekutanga paHabré. Ini ndoda kunyora nezve maitiro ekugadzirisa network zvishandiso pane yekunze network nenzira isiri-yakajairwa. Zvinorevei zvisiri-standard: kazhinji, kubata michina pane yekunze network yaunoda:

  • Public IP address. Zvakanaka, kana kana michina iri kuseri kweNAT yemumwe munhu, ipapo IP yeruzhinji uye "inotumirwa" chiteshi.
  • Tunnel (PPTP/OpenVPN/L2TP+IPSec, zvichingodaro) kunharaunda yepakati iyo yaizosvikika nayo.

Naizvozvo, iwe unozoda "bhasikoro rangu" kana nzira dzakajairwa dzisingakuenderani, semuenzaniso:

  1. Midziyo iri kuseri kweNAT uye, kunze kweyakajairika http (port 80), zvese zvakavharwa. Aya ndiwo mamiriro akajairwa zvachose kune yakakura federal corporate network. Vanogona kunyoresa zviteshi, asi kwete ipapo, kwete nekukurumidza, uye kwete iwe.
  2. Haina kugadzikana uye/kana “yakamanikana” nzira yekutaurirana. Kuderera kwakaderera, kurasikirwa nguva dzose. Marwadzo uye kushungurudzika paunenge uchiedza kuronga tunnel.
  3. Iyo inodhura nzira yekukurukurirana, uko chaiko kwese megabyte kunokosha. Somuenzaniso, satellite communications. Uyezve kunonoka kwenguva refu uye "yakamanikana" bhendi.
  4. Mamiriro ezvinhu apo iwe unoda "juggle" nhamba huru ye routers duku, iyo, kune rumwe rutivi, OpenWrt / Lede yakaiswa kuti uwedzere hunyanzvi, uye kune rumwe rutivi, zviwanikwa (memory) ye router haina kukwana. pazvinhu zvose.

Cherechedza nhamba dzenguva Chii chinokutadzisa kuisa flash drive mu router's USB port uye kuwedzera ndangariro ye router?

Kazhinji kazhinji, zvinodikanwa ndezvemutengo wemhinduro yese, asi dzimwe nguva chimiro chechimiro chinoitawo basa rakakosha. Semuenzaniso, pane TP-Link ML3020 panzvimbo iyi, iyo chete USB chiteshi inoshandiswa kune 2G/3G modem, zvese izvi zvakaputirwa mune imwe mhando yediki kesi yepurasitiki uye yakaiswa kumwe kwakakwirira, yakakwira (pamasti), kure, kure (mumunda, 30 km kubva padhuze mobile operator base station). Ehe, unogona kubaya USB hub uye kuwedzera huwandu hwezviteshi, asi ruzivo runoratidza kuti izvi zvinorema uye hazvina kuvimbika.

Saka, ndakaedza kukutsanangurira mamiriro angu chaiwo: "kumwe kure, kure, kune yakakosha, yakasurukirwa uye diki router inomhanya Linux. Zvakakosha kuziva kamwechete pazuva kuti "mupenyu" uye, kana zvichidiwa, mirairo inotumirwa kwaari, semuenzaniso, "uchi, reboot!"

Ngatienderere mberi kune kuitisa:

1) Padivi re router, kuburikidza ne cron, yega yega 5/10/1440 maminetsi, kana chero nguva yaunoda, iwe unofanirwa kutumira chikumbiro che http kune server uchishandisa wget, chengetedza mhedzisiro yechikumbiro kune faira, ita kuti faira riite. , uye uzviite.

My cron line inotaridzika seizvi:

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

kupi:
xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai is the domain of my server. Rega ndicherechedze ipapo: hongu, iwe unogona kutsanangura chaiyo IP kero ye server, isu taimboita izvi kusvika nyika yedu, mukumanikidza kwakarurama kwekurwa, ndichati, handizive, yakavharira kupinda kweshumba. chikamu cheDigitalOcean uye Amazon "makore". Kana iwe ukashandisa yekufananidzira dura, kana chiitiko chakadaro chikaitika, unogona kusimudza zviri nyore gore rekuchengetedza, dzosera iyo domain kwairi uye kudzoreredza kutarisisa mudziyo.

a.php izita re server-side script. Hongu, ndinoziva kuti hazvina kunaka kutumidza mazita akasiyana-siyana uye mazita emafaira ane tsamba imwe chete ... Ndinokurudzira kuti nenzira iyi tichengetedze mabhaiti mashomanana pakutumira chikumbiro :)
u - username, hardware login
p - password
"-O /tmp/wa.sh" ifaira pane router iri kure uko mhinduro yeseva, semuenzaniso reboot command, ichachengetwa.

Cherechedza nhamba yechipiri: Ahhh, nei tichishandisa wget uye kwete curl, nekuti kuburikidza curl unogona kutumira https zvikumbiro kwete neGET, asi nePOST? Ahhh nekuti, sezvakaita joke rekare "NE inokwira muchirongo!" curl inosanganisira encryption maraibhurari anosvika 2MB muhukuru, uye nekuda kweizvi hazvigoneke kuti iwe uchakwanisa kuunganidza mufananidzo wediki TP-LINK ML3020, semuenzaniso. Uye ne wget - ndapota.

2) Padivi reseva (ndine Ubuntu) isu tichashandisa Zabbix. Sei: Ini ndinoda kuti ive yakanaka (ine magirafu) uye nyore (tumira mirairo kuburikidza nemenu yemamiriro ezvinhu). Zabbix ine chinhu chinoshamisa chakadai semumiriri we zabbix. Kuburikidza nemumiririri, isu tichadaidza PHP script pane sevha, iyo inozodzosera ruzivo nezve kana router yedu yakanyoreswa panguva inodiwa yenguva. Kuchengeta ruzivo nezve nguva yekunyoresa, mirairo yezvishandiso, ini ndinoshandisa MySQL, yakaparadzana tafura vashandisi vane anenge anotevera minda:

		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;

Ese masosi anogona kutorwa kubva kuGit repository pa: https://github.com/BazDen/iotnet.online.git
Iye zvino PHP zvinyorwa zvakaiswa padivi reseva (kuti zvive nyore, zvinogona kuiswa mu /usr/share/zabbix/ folda):

a.php faira:

<?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 faira (iyi ndiyo script yezabbix mumiririri inonzi):

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

Zvakanaka, nhanho yekupedzisira: kunyoresa mumiriri uye kuwedzera masheti.

Kana iwe usati waisa zabbix mumiriri, zvino:

apt-get install zabbix-agent

Rongedza iyo faira /etc/zabbix/zabbix_agentd.conf.

Wedzera mutsara:

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

kupi:
test izita remumiririri wedu
"php /usr/share/zabbix/agent.php password yevashandisi" - inonzi script inoratidza data rekunyoresa mudziyo.

Kuwedzera machati: vhura iyo zabbix yewebhu interface, sarudza kubva kumenyu:
Zvirongwa -> Network node -> Gadzira network node. Pano zvakakwana kutsanangura zita retiweki host, boka rayo, uye iyo default agent interface:

Remote yekutarisa uye kutonga kweLunix/OpenWrt/Lede yakavakirwa zvishandiso kuburikidza nechiteshi 80…

Zvino isu tinoda kuwedzera data data kune ino network node. Teerera kune maviri minda: "kiyi" - iyi ndiyo chaiyo parameter yatakanyora mu /etc/zabbix/zabbix_agentd.conf faira (munyaya yedu ndeye test), uye "update interval" - ndakaiisa kumaminitsi mashanu. , nekuti uye midziyo inonyoreswa zvakare pane sevha kamwechete maminetsi mashanu.

Remote yekutarisa uye kutonga kweLunix/OpenWrt/Lede yakavakirwa zvishandiso kuburikidza nechiteshi 80…

Zvakanaka, ngatiwedzerei girafu. Ini ndinokurudzira kusarudza "Zadza" senzira yekupa.

Remote yekutarisa uye kutonga kweLunix/OpenWrt/Lede yakavakirwa zvishandiso kuburikidza nechiteshi 80…

Kubuda chinhu chakanyanya laconic, semuenzaniso seizvi:

Remote yekutarisa uye kutonga kweLunix/OpenWrt/Lede yakavakirwa zvishandiso kuburikidza nechiteshi 80…

Kumubvunzo unonzwisisika: "zvaive zvakakosha here?", Ini ndichapindura: zvakanaka, hongu, ona "zvikonzero zvekugadzira bhasikoro" pakutanga kwechinyorwa.

Kana ruzivo rwangu rwekutanga rwegraphomaniac ruchimutsa kufarira kwevaverengi, saka munyaya dzinotevera ndinoda kutsanangura nzira yekutumira mirairo kumidziyo iri kure. Isu takakwanisawo kuita chirongwa chese chemidziyo yakavakirwa paRouterOS (Mikrotik).

Source: www.habr.com

Voeg