Kuwunika kwakutali ndikuwongolera zida za Lunix/OpenWrt/Lede kudzera padoko 80…

Moni nonse, ichi ndichidziwitso changa choyamba pa Habré. Ndikufuna kulemba za momwe mungayendetsere zida zapaintaneti pamaneti akunja m'njira yosagwirizana. Kodi zosavomerezeka zimatanthauza chiyani: nthawi zambiri, kuyendetsa zida pamaneti akunja muyenera:

  • Adilesi ya IP yapagulu. Chabwino, kapena ngati zida zili kumbuyo kwa NAT ya wina, ndiye IP yapagulu ndi doko "lotumizidwa".
  • Tunnel (PPTP/OpenVPN/L2TP+IPSec, etc.) kupita kumalo apakati momwe angafikire.

Chifukwa chake, mufunika "njinga yanga" ngati njira zokhazikika sizikugwirizana ndi inu, mwachitsanzo:

  1. Zida zili kumbuyo kwa NAT ndipo, kupatula pa http wamba (port 80), zonse zimatsekedwa. Izi ndizabwinobwino pama network akuluakulu a federal. Atha kulembetsa madoko, koma osati nthawi yomweyo, osati mwachangu, osati kwa inu.
  2. Njira yolumikizirana yosakhazikika komanso/kapena “yopapatiza”. Kuthamanga kochepa, kutayika kosalekeza. Ululu ndi kukhumudwa poyesa kukonza ngalande.
  3. Njira yolumikizirana yokwera mtengo, pomwe megabyte iliyonse imawerengera. Mwachitsanzo, mauthenga a satana. Kuphatikizanso kuchedwa kwanthawi yayitali komanso gulu "lopapatiza".
  4. Mkhalidwe pamene mukufunikira "kugwedeza" chiwerengero chachikulu cha ma routers ang'onoang'ono, pomwe, kumbali imodzi, OpenWrt / Lede imayikidwa kuti ikulitse luso, ndipo kumbali ina, zothandizira (kukumbukira) kwa rauta sizokwanira. pa chilichonse.

Dziwani nthawi za manambala Kodi chimakulepheretsani chiyani kukhazikitsa flash drive mu doko la USB la rauta ndikukulitsa kukumbukira kwa rauta?

Nthawi zambiri, zofunika ndi mtengo wa yankho lonse, koma nthawi zina mawonekedwe amakhalanso ndi gawo lalikulu. Mwachitsanzo, pali TP-Link ML3020 pamalopo, doko lake lokhalo la USB limagwiritsidwa ntchito pa modemu ya 2G/3G, zonsezi zimakulungidwa mumtundu wina waung'ono wapulasitiki ndikuyikidwa kwinakwake, kumtunda (pamtunda), kutali, kutali (kumunda, 30 km kuchokera pafupi ndi malo oyambira oyendetsa mafoni). Inde, mutha kulumikiza kachipangizo ka USB ndikukulitsa kuchuluka kwa madoko, koma zochitika zikuwonetsa kuti izi ndizovuta komanso zosadalirika.

Chifukwa chake, ndidayesa kukufotokozerani momwe ndimakhalira: "Penapake kutali, kutali, pali rauta yofunika kwambiri, yosungulumwa komanso yaying'ono yomwe ikuyenda pa Linux. Ndikofunikira kudziwa kamodzi patsiku kuti "wamoyo" ndipo, ngati kuli kofunikira, amatumizidwa kwa iye malamulo, mwachitsanzo, "Honey, reboot!"

Tiyeni tipitirire ku kukhazikitsa:

1) Pa mbali ya router, kudzera pa cron, mphindi iliyonse ya 5/10/1440, kapena nthawi iliyonse yomwe mukufuna, muyenera kutumiza http pempho kwa seva pogwiritsa ntchito wget, sungani zotsatira za pempho ku fayilo, pangani fayilo kuti iwonongeke. , ndi kuchita.

Mzere wanga wa cron umawoneka motere:

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

,ku:
xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai ndi dera la seva yanga. Ndizindikira nthawi yomweyo: inde, mutha kufotokozera adilesi ya IP ya seva, tinkakonda kuchita izi mpaka dziko lathu, mwachilungamo chomenyera nkhondo, ndinena, sindikudziwa, kutsekereza kulowa. gawo la mkango la DigitalOcean ndi Amazon "mitambo". Ngati mugwiritsa ntchito dera lophiphiritsa, ngati chochitika chotere chikachitika, mutha kukweza mtambo wosunga zobwezeretsera mosavuta, kuwongoleranso derali ndikubwezeretsa kuwunika kwa chipangizocho.

a.php ndi dzina la seva-side script. Inde, ndikudziwa kuti n'kulakwa kutchula zosintha ndi mafayilo omwe ali ndi chilembo chomwecho ... Ndikupangira kuti motere tisunge ma byte angapo potumiza pempho :)
u - lolowera, kulowa kwa hardware
p - password
"-O /tmp/wa.sh" ndi fayilo pa rauta yakutali pomwe yankho la seva, mwachitsanzo lamulo loyambitsanso, lidzasungidwa.

Chidziwitso chachiwiri: Ahhh, bwanji timagwiritsa ntchito wget osati kupindika, chifukwa kudzera mu curl mutha kutumiza zopempha za https osati ndi GET, koma ndi POST? Ahhh chifukwa, monga nthabwala yakale "NE akukwera mumtsuko!" kupiringa kumaphatikizapo malaibulale obisala pafupifupi 2MB kukula kwake ndipo chifukwa cha izi ndizokayikitsa kuti mutha kusonkhanitsa chithunzi cha TP-LINK ML3020 yaying'ono, mwachitsanzo. Ndipo ndi wget - chonde.

2) Pa mbali ya seva (ndili ndi Ubuntu) tidzagwiritsa ntchito Zabbix. Chifukwa: Ndikufuna kuti ikhale yokongola (yokhala ndi ma graph) komanso yabwino (tumizani malamulo kudzera pazosankha). Zabbix ali ndi chinthu chodabwitsa ngati wothandizira zabbix. Kupyolera mwa wothandizira, tidzayitana PHP script pa seva, yomwe idzabweze zambiri ngati router yathu inalembetsa panthawi yofunikira. Kusunga zambiri za nthawi yolembetsa, malamulo azida, ndimagwiritsa ntchito MySQL, ogwiritsa ntchito patebulo lapadera omwe ali ndi magawo awa:

		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;

Magwero onse atha kutsitsidwa kuchokera ku Git repository pa: https://github.com/BazDen/iotnet.online.git
Tsopano zolemba za PHP zoyikidwa pambali ya seva (kuti zikhale zosavuta, zitha kuyikidwa mu /usr/share/zabbix/foda):

a.php wapamwamba:

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

Fayilo ya Agent.php (iyi ndi script ya wothandizira zabbix wotchedwa):

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

Chabwino, gawo lomaliza: kulembetsa wothandizira ndikuwonjezera ndandanda.

Ngati simunayikebe wothandizira zabbix, ndiye:

apt-get install zabbix-agent

Sinthani fayilo /etc/zabbix/zabbix_agentd.conf.

Onjezani mzere:

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

,ku:
test ndi dzina la wothandizira wathu
"php /usr/share/zabbix/agent.php achinsinsi achinsinsi" - script yotchedwa script yosonyeza deta yolembetsa chipangizo.

Kuwonjezera ma chart: tsegulani mawonekedwe a zabbix, sankhani kuchokera pamenyu:
Zokonda -> Ma network -> Pangani node ya netiweki. Apa ndikokwanira kutchula dzina la network host host, gulu lake, ndi mawonekedwe osakhazikika:

Kuwunika kwakutali ndikuwongolera zida za Lunix/OpenWrt/Lede kudzera padoko 80…

Tsopano tikufunika kuwonjezera chinthu cha data pa node iyi ya netiweki. Samalani magawo awiri: "kiyi" - izi ndizomwe tidalemba mu fayilo ya /etc/zabbix/zabbix_agentd.conf (kwa ife ndi mayeso), ndi "nthawi yosinthira" - Ndayiyika ku mphindi 5. , chifukwa ndi zipangizo amalembedwanso pa seva kamodzi mphindi zisanu zilizonse.

Kuwunika kwakutali ndikuwongolera zida za Lunix/OpenWrt/Lede kudzera padoko 80…

Chabwino, tiyeni tiwonjezere graph. Ndikupangira kusankha "Dzazani" ngati njira yoperekera.

Kuwunika kwakutali ndikuwongolera zida za Lunix/OpenWrt/Lede kudzera padoko 80…

Zotsatira zake ndi za laconic kwambiri, mwachitsanzo:

Kuwunika kwakutali ndikuwongolera zida za Lunix/OpenWrt/Lede kudzera padoko 80…

Kwa funso loyenera: "kodi kunali koyenera?", Ndiyankha: chabwino, ndithudi, onani "zifukwa zopangira njinga" kumayambiriro kwa nkhaniyi.

Ngati chidziwitso changa choyamba cha graphomaniac chimadzutsa chidwi cha owerenga, ndiye m'nkhani zotsatirazi ndikufuna kufotokoza momwe mungatumizire malamulo ku zipangizo zakutali. Tidakwanitsanso kukhazikitsa dongosolo lonse lazida zotengera RouterOS (Mikrotik).

Source: www.habr.com

Kuwonjezera ndemanga