Kulawa mai nisa da sarrafa na'urorin Lunix/OpenWrt/Lede ta hanyar tashar jiragen ruwa 80…

Sannu kowa da kowa, wannan shine gwanina na farko akan Habré. Ina so in rubuta game da yadda ake sarrafa kayan aikin cibiyar sadarwa akan hanyar sadarwar waje ta hanyar da ba ta dace ba. Menene ma'anar rashin daidaituwa: a mafi yawan lokuta, don sarrafa kayan aiki akan hanyar sadarwar waje kuna buƙatar:

  • Adireshin IP na jama'a. To, ko kuma idan kayan aiki suna bayan NAT na wani, to, IP na jama'a da tashar tashar "gabatarwa".
  • Tunnel (PPTP/OpenVPN/L2TP+IPSec, da dai sauransu) zuwa tsakiyar kumburi ta inda za a iya samun dama ga shi.

Don haka, kuna buƙatar “keke na” lokacin da daidaitattun hanyoyin ba su dace da ku ba, misali:

  1. Kayan aiki yana bayan NAT kuma, ban da http da aka saba (tashar jiragen ruwa 80), komai yana rufe. Wannan lamari ne na yau da kullun ga manyan cibiyoyin sadarwar tarayya. Za su iya yin rajistar tashar jiragen ruwa, amma ba nan da nan ba, ba da sauri ba, kuma ba a gare ku ba.
  2. Tashar sadarwar mara ƙarfi da/ko “ƙunƙunciyar”. Low gudun, akai-akai asara. Jin zafi da takaici lokacin ƙoƙarin tsara rami.
  3. Tashar sadarwa mai tsada, inda a zahiri kowane megabyte ya ƙidaya. Misali, sadarwar tauraron dan adam. Ƙarin jinkiri mai tsawo da kuma "ƙunƙun" band.
  4. Halin da ake ciki lokacin da kake buƙatar "juggle" babban adadin ƙananan hanyoyin sadarwa, wanda, a gefe guda, an shigar da OpenWrt / Lede don fadada damar, kuma a daya bangaren, albarkatun (ƙwaƙwalwar) na na'ura mai ba da hanya tsakanin hanyoyin sadarwa ba su isa ba. ga komai.

Lokutan bayanin kula Me zai hana ku shigar da filasha a cikin tashar USB ta na'ura mai ba da hanya tsakanin hanyoyin sadarwa da fadada ƙwaƙwalwar na'ura mai ba da hanya tsakanin hanyoyin sadarwa?

Mafi sau da yawa, abubuwan da ake buƙata don farashin maganin gaba ɗaya ne, amma wani lokacin ma'anar sigar ma tana taka muhimmiyar rawa. Misali, akwai TP-Link ML3020 a wurin, tashar USB daya tilo da ake amfani da ita don modem 2G/3G, duk wannan an nannade shi da wani nau'in karamin akwati na filastik kuma an sanya shi wani wuri mai tsayi, babba (a kan mast). nisa, mai nisa (a cikin filin, kilomita 30 daga tashar cibiyar sadarwar wayar hannu mafi kusa). Ee, zaku iya toshe cikin tashar USB kuma ku faɗaɗa adadin tashoshin jiragen ruwa, amma ƙwarewa ta nuna cewa wannan yana da wahala kuma ba abin dogaro ba ne.

Don haka, na yi ƙoƙarin bayyana muku halin da nake ciki: “wani wuri mai nisa, mai nisa, akwai mai matukar mahimmanci, kaɗaici kuma ƙarami na na'ura mai ba da hanya tsakanin hanyoyin sadarwa da ke tafiyar da Linux. Yana da mahimmanci a san aƙalla sau ɗaya a rana cewa yana "rai" kuma, idan ya cancanta, ana aika masa umarni, misali, "zuma, sake yi!"

Mu ci gaba zuwa aiwatarwa:

1) A gefen na'ura mai ba da hanya tsakanin hanyoyin sadarwa, ta cron, kowane minti 5/10/1440, ko duk lokacin da kuke so, kuna buƙatar aika buƙatun http zuwa uwar garken ta amfani da wget, adana sakamakon buƙatun zuwa fayil, sanya fayil ɗin aiwatarwa. , da aiwatar da shi.

Layin cron na yayi kama da haka:

Fayil /etc/crontabs/tushen:

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

, inda:
xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai shine yankin sabar na. Bari in lura nan da nan: eh, za ku iya tantance takamaiman adireshin IP na uwar garken, mun kasance muna yin haka har zuwa jiharmu, a cikin yunƙurin gwagwarmaya na adalci, zan ce, ban sani ba, toshe hanyar shiga zaki. rabon DigitalOcean da Amazon "girgije". Idan kun yi amfani da yanki na alama, idan irin wannan lamarin ya faru, zaku iya ɗaga gajimare a sauƙaƙe, tura yankin zuwa gare shi kuma ku dawo da sa ido na na'ura.

a.php shine sunan rubutun gefen uwar garken. Ee, na san cewa ba daidai ba ne a sanya sunayen masu canji da fayil sunaye da harafi ɗaya… Ina ba da shawarar cewa ta wannan hanyar mu adana ƴan bytes lokacin aika buƙatu :)
u - sunan mai amfani, shigar da hardware
p - kalmar sirri
"-O /tmp/wa.sh" fayil ne akan na'ura mai ba da hanya tsakanin hanyoyin sadarwa mai nisa inda za a adana martanin uwar garken, misali umarnin sake yi.

Bayanan kula lamba biyu: Ahhh, me yasa muke amfani da wget ba curl, saboda ta hanyar curl za ku iya aika buƙatun https ba tare da GET ba, amma tare da POST? Ahhh saboda, kamar yadda a cikin tsohuwar wargi "NE ya hau cikin tulu!" curl ya haɗa da ɗakunan karatu na ɓoyayyen girman girman 2MB kuma saboda wannan yana da wuya a iya haɗa hoto don ƙaramin TP-LINK ML3020, misali. Kuma tare da wget - don Allah.

2) A gefen uwar garken (Ina da Ubuntu) za mu yi amfani da Zabbix. Me ya sa: Ina so ya zama kyakkyawa (tare da zane-zane) kuma ya dace (aika umarni ta hanyar menu na mahallin). Zabbix yana da irin wannan abu mai ban mamaki kamar wakilin zabbix. Ta hanyar wakili, za mu kira rubutun PHP akan uwar garken, wanda zai dawo da bayani game da ko na'ura mai ba da hanya tsakanin hanyoyin sadarwa ya yi rajista a lokacin da ake bukata. Don adana bayanai game da lokacin rajista, umarni don na'urori, Ina amfani da MySQL, masu amfani da tebur daban tare da kusan filayen masu zuwa:

		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;

Ana iya sauke duk tushe daga ma'ajiyar Git a: https://github.com/BazDen/iotnet.online.git
Yanzu rubutun PHP da aka sanya a gefen uwar garken (don dacewa, ana iya sanya su a cikin /usr/share/zabbix/ babban fayil):

a.php fayil:

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

Fayil Agent.php (wannan shine rubutun wakilin zabbix da ake kira):

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

To, mataki na ƙarshe: yin rijistar wakili da ƙara jadawalin.

Idan har yanzu ba ku shigar da wakilin zabbix ba, to:

apt-get install zabbix-agent

Shirya fayil ɗin /etc/zabbix/zabbix_agentd.conf.

Ƙara layin:

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

, inda:
jarabawa shine sunan wakilin mu
"php /usr/share/zabbix/agent.php kalmar sirrin mai amfani" - rubutun da ake kira da ke nuna bayanan rajistar na'urar.

Ƙara ginshiƙi: buɗe mahaɗin yanar gizo na zabbix, zaɓi daga menu:
Saituna -> Hanyoyin sadarwa -> Ƙirƙiri kumburin cibiyar sadarwa. Anan ya isa a ƙididdige sunan mai watsa shirye-shiryen cibiyar sadarwa, ƙungiyarsa, da maƙallan wakili na tsoho:

Kulawa mai nisa da sarrafa na'urorin Lunix/OpenWrt/Lede ta hanyar tashar jiragen ruwa 80…

Yanzu muna buƙatar ƙara ɓangaren bayanai don wannan kumburin hanyar sadarwa. Kula da filayen guda biyu: "maɓalli" - wannan shine ainihin ma'aunin da muka rubuta a cikin fayil /etc/zabbix/zabbix_agentd.conf (a cikin yanayinmu yana gwadawa), da "tazarar sabuntawa" - Na saita shi zuwa minti 5. , saboda kuma ana yin rajistar kayan aiki akan uwar garken sau ɗaya kowane minti biyar.

Kulawa mai nisa da sarrafa na'urorin Lunix/OpenWrt/Lede ta hanyar tashar jiragen ruwa 80…

To, bari mu ƙara jadawali. Ina ba da shawarar zabar “Cika” azaman salon yin nuni.

Kulawa mai nisa da sarrafa na'urorin Lunix/OpenWrt/Lede ta hanyar tashar jiragen ruwa 80…

Fitowar wani abu ne mai laconic sosai, misali kamar haka:

Kulawa mai nisa da sarrafa na'urorin Lunix/OpenWrt/Lede ta hanyar tashar jiragen ruwa 80…

Ga tambaya mai ma'ana: "Shin yana da daraja?", Zan amsa: da kyau, ba shakka, duba "dalilai don ƙirƙirar keke" a farkon labarin.

Idan gwaninta na farko na graphomaniac yana tayar da sha'awar masu karatu, to a cikin labarai masu zuwa ina so in bayyana yadda ake aika umarni zuwa kayan aiki mai nisa. Mun kuma gudanar da aiwatar da dukkan makircin na na'urori dangane da RouterOS (Mikrotik).

source: www.habr.com

Add a comment