Hello lil kulħadd, din hija l-ewwel esperjenza tiegħi fuq Habré. Irrid nikteb dwar kif timmaniġġja t-tagħmir tan-netwerk fuq netwerk estern b'mod mhux standard. X'ifisser mhux standard: fil-biċċa l-kbira tal-każijiet, biex timmaniġġja tagħmir fuq netwerk estern għandek bżonn:
- Indirizz IP pubbliku. Ukoll, jew jekk it-tagħmir ikun wara n-NAT ta 'xi ħadd, allura IP pubbliku u port "mgħoddi".
- Mina (PPTP/OpenVPN/L2TP+IPSec, eċċ.) għan-nodu ċentrali li permezz tiegħu tkun aċċessibbli.
Għalhekk, ser ikollok bżonn "ir-rota tiegħi" meta l-metodi standard ma jkunux adattati għalik, pereżempju:
- It-tagħmir jinsab wara NAT u, ħlief għall-http tas-soltu (port 80), kollox huwa magħluq. Din hija sitwazzjoni kompletament normali għal netwerks korporattivi federali kbar. Jistgħu jirreġistraw portijiet, iżda mhux minnufih, mhux malajr, u mhux għalik.
- Kanal ta' komunikazzjoni instabbli u/jew “dejjaq”. Veloċità baxxa, telf kostanti. Uġigħ u frustrazzjoni meta tipprova torganizza mina.
- Kanal ta 'komunikazzjoni għali, fejn litteralment kull megabyte jgħodd. Per eżempju, komunikazzjonijiet bis-satellita. Flimkien ma' dewmien twil u faxxa "dejqa".
- Sitwazzjoni meta għandek bżonn "juggle" numru kbir ta 'routers żgħar, li fuqhom, min-naħa waħda, OpenWrt/Lede huwa installat biex jespandu l-kapaċitajiet, u min-naħa l-oħra, ir-riżorsi (memorja) tar-router mhumiex biżżejjed għal kollox.
Innota numru drabi X'jipprevjenik milli tinstalla flash drive fil-port USB tar-router u tespandi l-memorja tar-router?
Ħafna drabi, ir-rekwiżiti huma għall-ispiża tas-soluzzjoni kollha kemm hi, iżda xi drabi l-fattur tal-forma għandu wkoll rwol ewlieni. Pereżempju, hemm TP-Link ML3020 fis-sit, l-uniku port USB tiegħu jintuża għal modem 2G/3G, dan kollu huwa mgeżwer f'xi tip ta 'każ żgħir tal-plastik u mqiegħed x'imkien għoli, għoli (fuq l-arblu), bogħod, bogħod (fil-għalqa, 30 km mill-eqreb stazzjon bażi tal-operatur mobbli). Iva, tista 'tipplaggja hub USB u tespandi n-numru ta' portijiet, iżda l-esperjenza turi li dan huwa ingombranti u mhux affidabbli.
Għalhekk, ippruvajt niddeskrivilek is-sitwazzjoni tipika tiegħi: “x'imkien 'il bogħod, il-bogħod, hemm router importanti ħafna, solitarju u żgħir li jħaddem Linux. Huwa importanti li tkun taf mill-inqas darba kuljum li huwa "ħaj" u, jekk meħtieġ, jintbagħtu kmandi lilu, pereżempju, "għasel, reboot!"
Ejja ngħaddu għall-implimentazzjoni:
1) Fuq in-naħa tar-router, permezz ta' cron, kull 5/10/1440 minuta, jew kull meta trid, trid tibgħat talba http lis-server billi tuża wget, issalva r-riżultat tat-talba għal fajl, tagħmel il-fajl eżekutibbli , u tesegwixxiha.
Il-linja cron tiegħi tidher xi ħaġa bħal din:
Fajl /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
, fejn:
xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai huwa d-dominju tas-server tiegħi. Ħalli ninnota mill-ewwel: iva, tista 'tispeċifika indirizz IP speċifiku tas-server, konna nagħmlu dan sakemm l-istat tagħna, f'impuls ġust ta' ġlieda, se ngħid, ma nafx, imblokka l-aċċess għall-iljun sehem tas-“sħab” DigitalOcean u Amazon. Jekk tuża dominju simboliku, jekk iseħħ inċident bħal dan, tista 'faċilment tqajjem sħaba ta' backup, terġa 'tidderieġi d-dominju lejha u tirrestawra l-monitoraġġ tal-apparat.
a.php huwa l-isem tal-iskript tan-naħa tas-server. Iva, naf li huwa ħażin li nsemmi varjabbli u ismijiet ta' fajls bl-istess ittra... Nissuġġerixxi li b'dan il-mod niffrankaw ftit bytes meta nibagħtu talba :)
u - username, login tal-hardware
p - password
“-O /tmp/wa.sh” huwa fajl fuq ir-router remot fejn ir-rispons tas-server, pereżempju l-kmand tar-reboot, se jiġi ffrankat.
Innota numru tnejn: Ahhh, għaliex nużaw wget u mhux curl, għax permezz ta 'curl tista' tibgħat talbiet https mhux b'GET, iżda bil-POST? Ahhh għax, bħal fiċ-ċajta l-antika “NE titla’ fil-vażett!” curl jinkludi libreriji ta 'kodifikazzjoni ta' madwar 2MB fid-daqs u minħabba dan huwa improbabbli li inti tkun tista 'tiġbor immaġini għal TP-LINK ML3020 żgħir, pereżempju. U ma wget - jekk jogħġbok.
2) Fuq in-naħa tas-server (għandi Ubuntu) se nużaw Zabbix. Għaliex: Irrid li jkun sabiħ (bil-grafiċi) u konvenjenti (ibgħat kmandi permezz tal-menu tal-kuntest). Zabbix għandu ħaġa sabiħa daqs l-aġent zabbix. Permezz tal-aġent, aħna se nsejħu script PHP fuq is-server, li se jirritorna informazzjoni dwar jekk ir-router tagħna irreġistrax matul il-perjodu ta 'żmien meħtieġ. Biex taħżen informazzjoni dwar il-ħin tar-reġistrazzjoni, kmandi għall-apparati, nuża MySQL, utenti ta' tabella separati b'madwar l-oqsma li ġejjin:
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;
Is-sorsi kollha jistgħu jitniżżlu mir-repożitorju Git fuq:
Issa skripts PHP mqiegħda fuq in-naħa tas-server (għall-konvenjenza, jistgħu jitqiegħdu fil-folder /usr/share/zabbix/):
Fajl a.php:
<?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();
?>
Fajl Agent.php (dan huwa l-iskript tal-aġent zabbix imsejjaħ):
<?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();
?>
Ukoll, l-istadju finali: tirreġistra aġent u żżid l-iskedi.
Jekk għadek ma installajtx l-aġent zabbix, allura:
apt-get install zabbix-agent
Editja l-fajl /etc/zabbix/zabbix_agentd.conf.
Żid il-linja:
UserParameter=test,php /usr/share/zabbix/agent.php user password
, fejn:
it-test huwa l-isem tal-aġent tagħna
“php /usr/share/zabbix/agent.php user password” - skript imsejjaħ li jindika d-dejta tar-reġistrazzjoni tal-apparat.
Żieda ta' mapep: iftaħ l-interface web zabbix, agħżel mill-menu:
Settings -> Network nodes -> Oħloq node tan-netwerk. Hawnhekk huwa biżżejjed li tispeċifika l-isem tal-host tan-netwerk, il-grupp tiegħu, u l-interface tal-aġent default:
Issa rridu nżidu element tad-dejta għal dan in-node tan-netwerk. Oqgħod attent għal żewġ oqsma: "ċavetta" - dan huwa eżattament il-parametru li ktibna fil-fajl /etc/zabbix/zabbix_agentd.conf (fil-każ tagħna huwa test), u "intervall ta' aġġornament" - issettjah għal 5 minuti , għaliex u t-tagħmir huwa wkoll irreġistrat fuq is-server darba kull ħames minuti.
Ukoll, ejja żid graff. Nirrakkomanda li tagħżel "Imla" bħala l-istil tar-rendi.
L-output huwa xi ħaġa lakonika ħafna, pereżempju bħal din:
Għall-mistoqsija raġonevoli: "kien worth it?", Se nwieġeb: ukoll, ovvjament, ara "raġunijiet għall-ħolqien ta 'rota" fil-bidu tal-artikolu.
Jekk l-ewwel esperjenza graphomaniac tiegħi tqajjem l-interess tal-qarrejja, allura fl-artikoli li ġejjin irrid niddeskrivi kif tibgħat kmandi lil tagħmir remot. Irnexxielna wkoll nimplimentaw l-iskema kollha għal apparati bbażati fuq RouterOS (Mikrotik).
Sors: www.habr.com