Chaw taws teeb saib xyuas thiab tswj ntawm Lunix/OpenWrt/Lede raws li cov khoom siv ntawm chaw nres nkoj 80…

Nyob zoo sawv daws, qhov no yog kuv thawj qhov kev paub ntawm Habre. Kuv xav sau txog yuav ua li cas tswj cov khoom siv hauv network ntawm ib lub network sab nraud uas tsis yog tus qauv. Dab tsi tsis yog tus qauv txhais tau tias: feem ntau, txhawm rau tswj cov khoom siv ntawm lub network sab nraud koj xav tau:

  • Public IP chaw nyob. Zoo, lossis yog tias cov cuab yeej nyob tom qab ib tus neeg NAT, tom qab ntawd tus IP pej xeem thiab qhov chaw nres nkoj "xa mus".
  • Qhov (PPTP / OpenVPN / L2TP + IPSec, thiab lwm yam) rau lub hauv paus ntawm qhov uas nws yuav nkag mus tau.

Yog li ntawd, koj yuav xav tau "kuv lub tsheb kauj vab" thaum cov txheej txheem tsis haum rau koj, piv txwv li:

  1. Cov cuab yeej siv nyob tom qab NAT thiab, tshwj tsis yog qhov ib txwm muaj http (chaw nres nkoj 80), txhua yam raug kaw. Qhov no yog qhov xwm txheej ib txwm muaj rau cov tuam txhab lag luam loj hauv tsoomfwv. Lawv tuaj yeem sau npe cov chaw nres nkoj, tab sis tsis yog tam sim ntawd, tsis sai, thiab tsis yog rau koj.
  2. Tsis ruaj tsis khov thiab / lossis "qis" kev sib txuas lus channel. Tsawg ceev, poob tas li. Mob thiab ntxhov siab thaum sim teeb tsa lub qhov.
  3. Ib qho kev sib txuas lus kim kim, qhov twg txhua tus megabyte suav. Piv txwv li, kev sib txuas lus satellite. Ntxiv rau qhov ncua sij hawm ntev thiab "nqaim" band.
  4. Ib qho xwm txheej thaum koj xav tau "juggle" ntau lub routers me me, ntawm ib sab, OpenWrt / Lede tau teeb tsa los nthuav dav, thiab ntawm qhov tod tes, cov peev txheej (nco) ntawm router tsis txaus. rau txhua yam.

Nco lub sij hawm Dab tsi tiv thaiv koj los ntawm kev txhim kho lub flash drive rau hauv lub router USB chaw nres nkoj thiab nthuav lub router lub cim xeeb?

Feem ntau, cov kev xav tau yog rau tus nqi ntawm cov kev daws teeb meem tag nrho, tab sis qee zaum cov qauv tsim kuj tseem ua lub luag haujlwm tseem ceeb. Piv txwv li, muaj TP-Txuas ML3020 ntawm qhov chaw, nws tsuas yog USB chaw nres nkoj yog siv rau 2G / 3G modem, tag nrho cov no tau qhwv hauv qee yam ntawm cov ntaub ntawv me me thiab muab tso rau qhov chaw siab, siab (ntawm lub mast), nyob deb, nyob deb (hauv teb, 30 km ntawm qhov ze tshaj plaws mobile neeg teb xov tooj chaw nres tsheb). Yog lawm, koj tuaj yeem ntsaws rau hauv USB hub thiab nthuav dav cov chaw nres nkoj, tab sis kev paub qhia tias qhov no yog qhov nyuaj thiab tsis ntseeg.

Yog li, kuv sim piav qhia rau koj kuv qhov xwm txheej zoo li no: "qhov chaw nyob deb, nyob deb, muaj ib qho tseem ceeb heev, kho siab thiab me me router khiav Linux. Nws yog ib qho tseem ceeb kom paub tsawg kawg ib zaug hauv ib hnub tias nws "muaj sia nyob" thiab, yog tias tsim nyog, cov lus txib raug xa mus rau nws, piv txwv li, "niaj txiv, rov pib dua!"

Cia peb mus rau qhov kev siv:

1) Nyob rau sab router, ntawm cron, txhua 5/10/1440 feeb, lossis thaum twg koj xav tau, koj yuav tsum xa http thov mus rau tus neeg rau zaub mov siv wget, txuag cov txiaj ntsig ntawm qhov kev thov rau cov ntaub ntawv, ua kom cov ntaub ntawv ua tiav. , thiab ua nws.

Kuv cov kab cron zoo li no:

Cov ntaub ntawv /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

, nyob qhov twg:
xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai is the domain of my server. Cia kuv ceeb toom tam sim ntawd: yog, koj tuaj yeem hais qhia tus IP chaw nyob ntawm tus neeg rau zaub mov, peb tau ua qhov no kom txog thaum peb lub xeev, hauv kev ncaj ncees ntawm kev tawm tsam, Kuv yuav hais, Kuv tsis paub, thaiv kev nkag mus rau tsov ntxhuav. sib koom ntawm DigitalOcean thiab Amazon "huab". Yog tias koj siv lub cim sau npe, yog tias muaj xwm txheej tshwm sim, koj tuaj yeem yooj yim tsa huab thaub qab, hloov pauv tus sau rau nws thiab rov qab saib xyuas cov cuab yeej.

a.php yog lub npe ntawm server-sab ntawv. Yog lawm, Kuv paub tias nws tsis raug rau npe hloov pauv thiab cov npe cov ntaub ntawv nrog tib tsab ntawv ... Kuv xav tias txoj kev no peb txuag ob peb bytes thaum xa daim ntawv thov :)
u - username, hardware login
p - password
"-O / tmp/wa.sh" yog ib cov ntaub ntawv ntawm lub chaw taws teeb router qhov twg cov neeg rau zaub mov teb, piv txwv li cov lus txib reboot, yuav raug cawm.

Nco ntsoov tus lej thib ob: Ahhh, vim li cas peb thiaj siv wget thiab tsis curl, vim tias ntawm curl koj tuaj yeem xa https thov tsis nrog GET, tab sis nrog POST? Ahhh vim tias, zoo li hauv cov lus tso dag qub "NE nce mus rau hauv lub thawv!" curl suav nrog cov tsev qiv ntawv encryption txog li 2MB hauv qhov loj thiab vim tias qhov no tsis zoo li koj yuav tuaj yeem sib sau cov duab rau TP-LINK ML3020 me me, piv txwv li. Thiab nrog wget - thov.

2) Ntawm sab server (Kuv muaj Ubuntu) peb yuav siv Zabbix. Vim li cas: Kuv xav kom nws zoo nkauj (nrog cov duab) thiab yooj yim (xa cov lus txib ntawm cov ntawv qhia zaub mov). Zabbix muaj qhov zoo li tus neeg sawv cev zabbix. Los ntawm tus neeg sawv cev, peb yuav hu rau PHP tsab ntawv ntawm tus neeg rau zaub mov, uas yuav rov qab cov ntaub ntawv hais txog seb peb lub router puas tau sau npe rau lub sijhawm xav tau. Txhawm rau khaws cov ntaub ntawv hais txog lub sijhawm sau npe, cov lus txib rau cov khoom siv, Kuv siv MySQL, cais cov neeg siv cov lus nrog kwv yees li hauv qab no:

		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;

Txhua qhov chaw tuaj yeem rub tawm los ntawm Git repository ntawm: https://github.com/BazDen/iotnet.online.git
Tam sim no PHP scripts muab tso rau sab server (kom yooj yim, lawv tuaj yeem muab tso rau hauv /usr/share/zabbix/ folder):

a.php cov ntaub ntawv:

<?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 cov ntaub ntawv (qhov no yog tsab ntawv ntawm tus neeg sawv cev zabbix hu ua):

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

Zoo, theem kawg: sau npe tus neeg sawv cev thiab ntxiv sijhawm.

Yog tias koj tseem tsis tau teeb tsa tus neeg sawv cev zabbix, ces:

apt-get install zabbix-agent

Kho cov ntaub ntawv /etc/zabbix/zabbix_agentd.conf.

Ntxiv kab:

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

, nyob qhov twg:
xeem yog lub npe ntawm peb tus neeg sawv cev
"php /usr/share/zabbix/agent.php user password" - ib tug hu ua tsab ntawv qhia cov ntaub ntawv sau npe ntaus ntawv.

Ntxiv cov kab kos: qhib zabbix web interface, xaiv los ntawm cov ntawv qhia zaub mov:
Chaw -> Network nodes -> Tsim ib lub network node. Ntawm no nws yog txaus los qhia lub npe ntawm lub network host, nws pab pawg, thiab tus neeg sawv cev lub neej ntawd interface:

Chaw taws teeb saib xyuas thiab tswj ntawm Lunix/OpenWrt/Lede raws li cov khoom siv ntawm chaw nres nkoj 80…

Tam sim no peb yuav tsum ntxiv cov ntaub ntawv keeb kwm rau lub network node. Ua tib zoo saib rau ob daim teb: "qhov tseem ceeb" - qhov no yog qhov ntsuas raws nraim uas peb tau sau rau hauv cov ntaub ntawv /etc/zabbix/zabbix_agentd.conf (nyob rau hauv peb cov ntaub ntawv nws yog xeem), thiab "hloov ncua sij hawm" - Kuv teem rau 5 feeb , vim thiab cov khoom siv kuj tau sau npe rau ntawm tus neeg rau zaub mov ib zaug txhua tsib feeb.

Chaw taws teeb saib xyuas thiab tswj ntawm Lunix/OpenWrt/Lede raws li cov khoom siv ntawm chaw nres nkoj 80…

Zoo, cia peb ntxiv ib daim duab. Kuv pom zoo xaiv "Fill" raws li qhov kev ua yeeb yam.

Chaw taws teeb saib xyuas thiab tswj ntawm Lunix/OpenWrt/Lede raws li cov khoom siv ntawm chaw nres nkoj 80…

Cov zis yog ib yam dab tsi heev laconic, piv txwv li no:

Chaw taws teeb saib xyuas thiab tswj ntawm Lunix/OpenWrt/Lede raws li cov khoom siv ntawm chaw nres nkoj 80…

Rau cov lus nug tsim nyog: "Nws puas tsim nyog?", Kuv yuav teb: zoo, tau kawg, saib "vim li cas tsim lub tsheb kauj vab" thaum pib ntawm tsab xov xwm.

Yog tias kuv qhov kev paub graphomaniac thawj zaug ua rau muaj kev txaus siab ntawm cov neeg nyeem, tom qab ntawd hauv cov lus hauv qab no kuv xav piav qhia yuav ua li cas xa cov lus txib mus rau cov khoom siv nyob deb. Peb kuj tau tswj hwm los siv tag nrho cov tswv yim rau cov khoom siv raws li RouterOS (Mikrotik).

Tau qhov twg los: www.hab.com

Ntxiv ib saib