Halo semuanya, ini adalah pengalaman pertama saya di Habré. Saya ingin menulis tentang cara mengelola peralatan jaringan non-standar di jaringan eksternal. Apa artinya non-standar: dalam kebanyakan kasus, untuk mengontrol peralatan di jaringan eksternal Anda perlu:
- Alamat IP publik. Nah, atau jika peralatan tersebut berada di belakang NAT seseorang, maka IP publik dan port "diteruskan".
- Terowongan (PPTP / OpenVPN / L2TP + IPSec, dll.) Ke simpul pusat di mana ia akan dapat diakses.
Karena itu, Anda akan membutuhkan sepeda saya ketika metode standar tidak cocok untuk Anda, misalnya:
- Peralatan tersebut terletak di belakang NAT dan, terlepas dari http (port 80) yang biasa, semuanya ditutup. Situasinya cukup normal untuk jaringan perusahaan besar federal. Daftarkan port - mereka dapat, tetapi tidak dengan segera, tidak dengan cepat dan tidak untuk Anda.
- Saluran komunikasi tidak stabil dan / atau "sempit". Kecepatan rendah, kehilangan konstan. Rasa sakit dan frustrasi ketika mencoba mengatur sebuah terowongan.
- Saluran komunikasi yang mahal, di mana secara harfiah setiap megabyte berarti Misalnya komunikasi satelit. Ditambah penundaan besar dan strip "sempit".
- Situasi ketika Anda perlu "menyulap" sejumlah besar router kecil, di mana, di satu sisi, OpenWrt / Lede diinstal untuk memperluas kemampuan, dan di sisi lain, sumber daya (memori) router jauh dari cukup.
Catat jumlah waktuDan apa yang mencegah USB stick dari router dipasang dan memperluas memori router?
Paling sering, persyaratan untuk biaya solusi secara keseluruhan, tetapi kadang-kadang faktor bentuk juga memainkan peran kunci. Sebagai contoh, TP-Link ML3020 ada pada objek, satu-satunya port USB yang digunakan untuk modem 2G / 3G, semua ini dibungkus dengan benang dengan wadah plastik kecil dan ditempatkan di tempat yang tinggi, tinggi (pada tiang), jauh, jauh (di lapangan, 30 km dari stasiun pangkalan terdekat dari operator seluler). Ya, Anda dapat mencolokkan hub USB dan menambah jumlah port, tetapi pengalaman menunjukkan bahwa ini rumit dan tidak dapat diandalkan.
Jadi, saya mencoba menggambarkan kepada Anda situasi khas saya: “di suatu tempat yang jauh, jauh, ada router yang sangat penting, kesepian dan kecil yang menjalankan Linux. Penting untuk mengetahui setidaknya sekali sehari bahwa dia "hidup" dan, jika perlu, perintah dikirimkan kepadanya, misalnya, "matahari, nyalakan kembali!"
Mari beralih ke implementasi:
1) Di sisi router, cron setiap 5/10/1440 menit, atau setiap kali Anda perlu mengirim permintaan http ke server menggunakan wget, simpan hasil permintaan ke file, buat file tersebut dapat dieksekusi, dan jalankan.
Baris saya di cron terlihat seperti ini:
File / etc / crontab / 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
dimana:
xn - 80abgfbdwanb2akugdrd3a2e5gsbj.xn - p1ai - domain server saya. Saya akan segera mencatat: ya, Anda juga dapat menentukan alamat IP server tertentu, kami melakukan ini sebelumnya, sementara negara kami, dalam ledakan perjuangan yang benar, bagi saya tampaknya tidak lagi - tidak menghalangi akses ke bagian terbesar dari "awan" DigitalOcean dan Amazon. Dalam hal menggunakan domain simbolis, ketika insiden seperti itu terjadi, Anda dapat dengan tenang menaikkan cloud cadangan, mengarahkan domain ke sana dan mengembalikan pemantauan perangkat.
a.php - nama skrip di sisi server. Ya, saya tahu bahwa nama variabel dan nama file salah dengan satu huruf ... Saya sarankan kita menyimpan beberapa byte saat mengirim permintaan :)
u - nama pengguna, login perangkat keras
p - kata sandi
"-O /tmp/wa.sh" adalah file pada router jarak jauh di mana respons server akan disimpan, misalnya, perintah reboot.
Catatan nomor dua:Ahhh, mengapa kita menggunakan wget, bukan curl, karena melalui curl Anda dapat mengirim permintaan https dan bukan GET, tetapi POST? Ahhh, karena seperti dalam lelucon lama "NE merayap ke pondok!". Curl menyertakan pustaka enkripsi berukuran sekitar 2MB, dan berdasarkan ini, Anda akan dapat menyusun gambar untuk TP-LINK ML3020 kecil misalnya. Dan dengan wget, kumohon.
2) Di sisi server (saya punya Ubuntu) kita akan menggunakan Zabbix. Mengapa: Saya ingin menjadi cantik (dengan grafik) dan nyaman (mengirim perintah melalui menu konteks). Zabbix memiliki hal yang indah sebagai agen zabbix. Melalui agen, kami akan memanggil skrip php di server, yang akan mengembalikan informasi tentang apakah router kami terdaftar dalam periode waktu yang diperlukan. Untuk menyimpan informasi tentang waktu pendaftaran, perintah untuk perangkat, saya menggunakan MySQL, tabel pengguna terpisah dengan kira-kira bidang berikut:
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;
Semua sumber dapat diambil dari repositori Git di:
https://github.com/BazDen/iotnet.online.gitSekarang skrip PHP di-host di sisi server (untuk kenyamanan, Anda dapat meletakkannya di folder / usr / share / zabbix /):
File A.php:
<?php
File Agent.php (ini adalah skrip dari agen yang disebut zabbix):
<?php
Nah, tahap terakhir: meresepkan agen dan menambah jadwal.
Jika Anda belum menginstal agen zabbix, maka:
apt-get install zabbix-agent
Mengedit file /etc/zabbix/zabbix_agentd.conf.
Tambahkan baris:
UserParameter=test,php /usr/share/zabbix/agent.php user password
dimana:
test adalah nama agen kami
"Php /usr/share/zabbix/agent.php kata sandi pengguna" - skrip yang dipanggil dengan data registrasi perangkat.
Menambahkan grafik: buka antarmuka web zabbix, pilih dari menu:
Pengaturan -> Hosts -> Buat host. Cukup menentukan nama host, grupnya, antarmuka agen default:

Sekarang kita perlu menambahkan elemen data untuk host ini. Perhatikan dua bidang: "kunci" persis parameter yang kami tentukan dalam file /etc/zabbix/zabbix_agentd.conf (dalam kasus kami ini adalah tes), dan "interval pembaruan" - Saya menetapkan 5 menit, karena dan peralatan terdaftar di server setiap lima menit sekali.

Nah, tambahkan jadwalnya. Saya sarankan memilih "Isi" sebagai gaya gambar.

Outputnya adalah sesuatu yang sangat ringkas, misalnya seperti ini:

Untuk pertanyaan yang masuk akal: "Apakah itu sepadan?", Saya akan menjawab: baik, tentu saja, lihat "alasan untuk membuat sepeda" di awal artikel.
Jika pengalaman graphomaniac pertama saya akan membangkitkan minat pembaca, maka dalam artikel berikut ini saya ingin menjelaskan cara mengirim perintah ke peralatan jarak jauh. Dimungkinkan juga untuk mengimplementasikan keseluruhan skema untuk perangkat berbasis RouterOS (Mikrotiks).