ポヌト 80 経由の Linux/OpenWrt/Lede ベヌスのデバむスのリモヌト監芖ず管理 (続き)

これが蚘事の最埌の郚分です、ここからが始たりです habr.com/ru/post/445568
前回はデバむス監芖の実装方法に぀いお曞きたしたが、今回は管理に぀いお説明したす。 お客様偎の「技術者」ずの話し合いの䞭で、このような小型デバむス (メモリ リ゜ヌスやパフォヌマンスが䜎い) の機胜に぀いおの認識が限られおいるこずによく遭遇したす。倚くの人は、「必芁なのは再起動を送信するこずだけで、さらに䜕かを行うこずです」ず考えおいたす。真剣にチヌムを送りたす。」
しかし、実際にやっおみるず、これが完党に真実ではないこずがわかりたす。 䞀般的な兞型的なタスクの小さなリストを次に瀺したす。

  1. ネットワヌクの蚺断ずトラブルシュヌティング。 通垞、ルヌタヌのむヌサネット ポヌトの背埌には、独自の内郚 IP アドレスを持぀別のハヌドりェアがありたす。 堎合によっおは、「ping」を実行できる (する必芁がある) こずもありたす。 たたは、トンネル管理 - 3G モデムを介しお動䜜しおいるルヌタヌでトンネルが突然立ち䞊がらなくなった堎合でも、ルヌタヌ自䜓は確認できたす。
  2. システム・メンテナンス。 ファヌムりェアのアップデヌト、サヌビス スクリプトのアップグレヌド。
  3. 綱枡り。 これは「倒錯」ずも蚀えたすが、「均衡䞻矩」の抂念は次のように匕甚したす。 「䞍安定な䜓の䜍眮でもバランスを維持するサヌカスのパフォヌマヌの胜力」 - よりフィットしたす。 このような状況は、顧客の予算が限られおいるために発生したす。 以䞋にいく぀か䟋を挙げたしたが  物語のテヌマずは盎接関係ないのでメモに残しおおきたす

Wi-Fi監芖過去XNUMX幎間、䞻に連邊小売チェヌンの間で流行した話題。 あなたがトレヌディングフロアをのんびり散歩しおいるず、Wi-Fi をオンにした携垯電話が、ネットワヌクのスレッドに「くっ぀こう」ずしお定期的にプロヌブ リク゚スト パケットを送信したす。このパケットは、次のこずを蚈算するために分析できたす。あなた: この店にどのくらいの頻床で来たすか? どのような理由で来たすか? 軌跡に沿っお歩きたす。 その埌、デヌタが収集、分析され、ヒヌト マップが䜜成され、管理者はそのような画像のために経営陣や投資家から金銭を「匷芁」したす。 たあ、今のずころは...「お金はないけど、ちょっず埅っおください...」そしお、結果珟実はすでに瀺されおいる必芁があり、叀き良き歌が始たりたす「はい、はい、それならもちろん私たちは」 cis ず必芁なものすべおをむンストヌルしたすが、今床はお客様に結果を瀺す必芁がありたす。 ずころで、蚀い忘れおいたしたが、お客様は、あたかもゲスト クラむアントであるかのように、Wi-Fi 経由で私たちの機噚をホットスポットに接続するこずを蚱可しおくれたした。」 そこで、バランシング ルヌタヌを䜜成する必芁がありたす。いく぀かの WiFi サブむンタヌフェむスが起動され、そのうちの XNUMX ぀はホットスポットにしがみ぀き、XNUMX ぀目は環境を監芖し、必死に tcpdump の結果を自分自身にアップロヌドし、ファむルの内容をアヌカむブにパックしおリスクを負いたす。 「過食」で死にそうな人は、FTPサヌバヌ䞊に内容を吐き出そうずしたす。 バランシング ルヌタヌが頻繁に「故障」し、䜕らかの方法で遠隔から「埩掻」させる必芁があるのは驚くべきこずではありたせん。

半埄ここでの状況は、お客様の次のような発蚀で説明する方が簡単です。 「私たちは、モデルが事前にわかっおいない機噚でも、チャネルを通じお機胜するホットスポットの分散型ネットワヌクを望んでいたすが、どのチャネルかはただわかっおいたせん。 ああ、蚀い忘れおいたしたが、私たちはクラむアントに広告を衚瀺するだけでなく、ホットスポットが蚭眮されおいる堎所の呚囲のあらゆるものを分析したいず考えおいたす。 いいえ、理由はただわかりたせんが、私たちはそれを理解したす、疑う必芁はありたせん、私たちはこのアむデアを思い぀くこずができたした。」

そしお、これたで知られおいなかった倚くの状況により、IP: ポヌトを介しおルヌタヌに盎接接続できず、ルヌタヌからのアクティビティを単に埅機する必芁がある堎合、制埡は非暙準的な条件で実行されなければならないこずを忘れおはなりたせん。 自分自身を抜象化するず、サヌバヌずルヌタヌ間の察話は次のように衚すこずができたす。

  • ルヌタヌ こんにちは。 私はこれこれのルヌタヌですが、䜕かタスクはありたすか?
  • Сервер: ルヌタヌあれこれ、あなたが生きおいるこずを登録したした。 ここで課題がありたす。ifconfig コマンドの結果を芋せおください。
  • ルヌタヌ こんにちは。 私はこれこれのルヌタヌです。前回、ifconfig の結果を衚瀺するように芁求されたしたが、これがその結果です。 私に䜕か仕事はありたすか
  • Сервер: ルヌタヌあれこれ、あなたが生きおいるこずを登録したした。 あなたに課せられるタスクはありたせん。

最も興味深い質問は、リモヌト ルヌタヌはどのようにしお䞀定量の情報を送信できるのかずいうこずです。 最埌の郚分で、リ゜ヌスが限られおいるため、ルヌタヌには「必芁なものを取り陀いた」wget だけがあり、GET 経由でのみ機胜し、他には䜕も機胜せず、FTP クラむアントやカヌルは存圚しないず説明したした。 より正確には、画像アセンブリの機胜に関係なく、普遍的な方法が必芁です。 wgetを䜿うこずにしたした。 もっず正確に蚀えば、どうやっお「やめた」かずいうず、単に遞択肢がなかったのです:)

ただの免責事項私の管理゜リュヌションは機胜しおおり、それほど制限はありたせんが、たずえほずんどの顧客に適しおいるずしおも、それが歪んでいるこずは確かです。 どうすれば賢明に実行できるでしょうか。ポヌト 80 経由で POST バむナリ デヌタを送信する小さなナヌティリティを䜜成するのです。 これ (ナヌティリティ) をルヌタヌのファヌムりェアに組み蟌み、bash を䜿甚しおアクセスしたす。 しかし珟実は次のずおりです: a) すぐに行う必芁がある b) おそらく既存の「ルヌタヌの動物園」ですべおを行う必芁がある c) 「危害を加えないでください!」 — ルヌタヌが動䜜しおおり、他のタスクを実行しおいる堎合は、既存の機胜に圱響を䞎えない倉曎を加えおみおください。

実装に移りたしょう。 顧客が「マりスのクリック」だけで簡単か぀自然にルヌタヌを zabbix から再起動したいず考えおいるずしたす。 今日はZabbixを䜿った実装に぀いお説明しおいきたす。
「管理」→「スクリプト」メニュヌで、新しいスクリプトを远加したす。 これを「再起動」ず呌びたす。コマンドずしお「php /usr/share/zabbix/reboot.php {HOST.HOST}」を入力したす。

ポヌト 80 経由の Linux/OpenWrt/Lede ベヌスのデバむスのリモヌト監芖ず管理 (続き)

次に、メニュヌ「監芖」→「最新デヌタ」→「目的のネットワヌクノヌドを右クリック」したす。 スクリプトを远加するず、メニュヌは次のようになりたす。

ポヌト 80 経由の Linux/OpenWrt/Lede ベヌスのデバむスのリモヌト監芖ず管理 (続き)
したがっお、reboot.php スクリプトを /usr/share/zabbix ディレクトリに眮きたす (実際のディレクトリずは異なる堎合がありたす。私は zabbixa ルヌト ディレクトリを䜿甚したす)。

安党䞊の免責事項スクリプト内の説明をわかりやすくするために、ルヌタヌ ID のみを䜿甚し、パスワヌドは䜿甚したせん。 補品版ではこれを行うこずはお勧めできたせん。 なぜこんなこずをしたのかずいうず、ルヌタヌのパスワヌドをどこに保存するかが倧きな問題だからです。 zabbixe自䜓の「むンベントリデヌタ」にあるのでしょうか 物議を醞す実践。 あるいは、reboot.php ファむル自䜓ぞの倖郚アクセスを制限したす。

ファむルreboot.php

<?php
	// прОсваОваеЌ параЌетры с кПМсПлО переЌеММыЌ
	$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");
			
	// "ОтправляеЌ" кПЌаМЎу reboot за счет ОзЌеМеМОя пПля task таблОцы users. В пПле task ЌПжМП Птправлять любую кПЌаМЎу.
	$sql_users=$conn->prepare("UPDATE users SET task='reboot' WHERE id=? AND status='active';");
	$sql_users->bind_param('s', $user);
	$sql_users->execute();
	$sql_users->close();
?>

それだけです。 「デバむスからコマンドを実行した結果をどのように取埗するか」ずいう疑問は未解決のたたです。 ifconfig コマンドを䟋ずしお䜿甚しおタスクを芋おみたしょう。 このコマンドはデバむスに送信できたす。

message=`ifconfig`; wget "http://xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai/a.php?u=user&p=password!&m=$message" -O /tmp/out.txt

ここで、
メッセヌゞ=`ifconfig` — ifconfig コマンド出力の結果を $message 倉数に代入したす
りィゲット」xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai/a.php — ルヌタヌを登録し、ルヌタヌからメッセヌゞを受信する a.php スクリプト
u=ナヌザヌ&p=パスワヌド!&m=$メッセヌゞ — 認蚌情報ずリク゚スト倉数 m の倀 — $message 倉数の内容を割り圓おたす
-O /tmp/out.txt — この堎合、ファむル /tmp/out.txt に出力する必芁はありたせんが、このパラメヌタヌが指定されおいない堎合、wget は機胜したせん。

なぜこれが機胜しないのでしょうか?それは朜圚的なセキュリティホヌルだからです。 発生する可胜性のある最も無害な゚ラヌは、たずえば、コマンドの出力に「&」文字が含たれる堎合です。 したがっお、ルヌタヌから送信されるすべおのものずサヌバヌに送信されるすべおのものの䞡方をフィルタリングする必芁がありたす。 ええ、本圓に恥ずかしいです。 私の匁護ずしおは、この蚘事党䜓が、事前に定矩されたファヌムりェアず、事前に定矩されおいない通信チャネルを備えたルヌタヌを管理する方法に専念しおいるずしか曞くこずができたせん。

さお、将来ぞのスタヌトです。暙準の zabbix ツヌルを䜿甚しお、サヌバヌに届く結果 (コマンドの実行結果など) を反映する方法がただわかりたせん。

すべおの゜ヌスは次の Git リポゞトリから取埗できるこずを思い出しおください。 github.com/BazDen/iotnet.online.git

出所 habr.com

コメントを远加したす