مرحباً بالجميع ، هذه هي تجربتي الأولى في حبري. أريد أن أكتب عن كيفية إدارة معدات الشبكات غير القياسية في شبكة خارجية. ماذا يعني غير قياسي: في معظم الحالات ، للتحكم في المعدات في شبكة خارجية تحتاج إلى:
- عنوان IP العام. حسنًا ، أو إذا كانت المعدات موجودة خلف NAT لشخص ما ، فعندئذٍ عنوان IP العام والمنفذ "المعاد توجيهه".
- النفق (PPTP / OpenVPN / L2TP + IPSec ، إلخ) إلى العقدة المركزية التي يمكن الوصول إليها من خلالها.
لذلك ، ستحتاج إلى دراجتي عندما لا تكون الطرق القياسية مناسبة لك ، على سبيل المثال:
- توجد المعدات خلف NAT ، وبصرف النظر عن http المعتاد (المنفذ 80) ، يتم إغلاق كل شيء. الوضع طبيعي تمامًا لشبكات الشركات الفيدرالية الكبيرة. سجل المنافذ - يمكنهم ذلك ، ولكن ليس على الفور ، وليس بسرعة وليس لك.
- قناة اتصال غير مستقرة و / أو "ضيقة". سرعة منخفضة ، وفقدان مستمر. الألم والإحباط عند محاولة تنظيم نفق.
- قناة اتصال باهظة الثمن ، حيث يتم حساب كل ميغابايت حرفيًا. على سبيل المثال الاتصالات الساتلية. بالإضافة إلى تأخير كبير وشريط "ضيق".
- الموقف عندما تحتاج إلى "تزييف" عدد كبير من أجهزة التوجيه الصغيرة ، حيث يتم تثبيت OpenWrt / Lede ، من ناحية ، لتوسيع القدرات ، ومن ناحية أخرى ، فإن موارد جهاز التوجيه (الذاكرة) بعيدة عن أن تكون كافية.
ملاحظة عدد مراتوما الذي يمنع تثبيت عصا USB من جهاز التوجيه وتوسيع ذاكرة جهاز التوجيه؟
في أغلب الأحيان ، تلعب متطلبات تكلفة الحل ككل ، ولكن في بعض الأحيان ، عامل الشكل أيضًا دورًا رئيسيًا. على سبيل المثال ، يوجد TP-Link ML3020 على الكائن ، ويتم استخدام منفذ USB الوحيد الخاص به لمودم 2G / 3G ، كل هذا يتم لفه في خيط بحقيبة بلاستيكية صغيرة ويوضع في مكان مرتفع ، مرتفع (على الصاري) ، بعيد ، بعيد (في الحقل ، 30 كم من أقرب محطة قاعدة لمشغل المحمول). نعم ، يمكنك توصيل لوحة وصل USB وتوسيع عدد المنافذ ، لكن التجربة أظهرت أن هذا الأمر مرهق وغير موثوق به.
لذا ، حاولت أن أصف لك موقفي المعتاد: "في مكان بعيد ، بعيد ، هناك جهاز توجيه مهم للغاية ، وحيد وصغير ، يعمل بنظام Linux. من المهم معرفة مرة واحدة على الأقل يوميًا أنه "حي" ، وإذا لزم الأمر ، فقد تم إرسال الأوامر إليه ، على سبيل المثال ، "شمس ، أعد تشغيل!"
دعنا ننتقل إلى التنفيذ:
1) على جانب جهاز التوجيه ، قم بإجراء cron كل 5/10/1440 دقيقة ، أو كلما احتجت إلى إرسال طلب http إلى الخادم باستخدام wget ، احفظ نتيجة الطلب إلى ملف ، وجعل الملف قابل للتنفيذ ، وقم بتنفيذه.
يبدو خطي في cron شيئًا مثل هذا:
ملف / الخ / كرونتاب / الجذر:
*/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
حيث:
XN - 80abgfbdwanb2akugdrd3a2e5gsbj.xn - p1ai - مجال الخادم الخاص بي. سألاحظ على الفور: نعم ، يمكنك أيضًا تحديد عنوان IP لخادم معين ، لقد فعلنا ذلك من قبل ، في حين أن حالتنا ، في فورة النضال الصالحة ، لم تعد تبدو لي - لم تمنع الوصول إلى نصيب الأسد من "السحب" الخاصة بـ DigitalOcean و Amazon. في حالة استخدام مجال رمزي ، عند حدوث مثل هذا الحادث ، يمكنك رفع سحابة النسخ الاحتياطي بهدوء وإعادة توجيه المجال إليه واستعادة مراقبة الجهاز.
a.php - اسم البرنامج النصي على جانب الخادم. نعم ، أعلم أنه من الخطأ تسمية المتغيرات وأسماء الملفات بحرف واحد ... أقترح أن نحفظ بضع بايت عند إرسال طلب :)
ش - اسم المستخدم ، تسجيل الدخول إلى الأجهزة
ع - كلمة المرور
"-O /tmp/wa.sh" هو الملف الموجود على جهاز التوجيه البعيد حيث سيتم حفظ استجابة الخادم ، على سبيل المثال ، أمر إعادة التشغيل.
ملاحظة رقم اثنين:آه ، لماذا نستخدم wget ، وليس curl ، لأنه من خلال curl يمكنك إرسال طلبات https وليس الحصول عليها ، ولكن POST؟ آه ، لأنه كما في النكتة القديمة "تزحف NE إلى الكوخ!". يحتوي Curl على مكتبات تشفير بحجم 2 ميغابايت تقريبًا ، وبهذا ، ستتمكن من تجميع صورة لطراز TP-LINK ML3020 صغير ، على سبيل المثال. ومع wget ، من فضلك.
2) على جانب الخادم (لدي Ubuntu) سوف نستخدم Zabbix. لماذا: أريد أن تكون جميلة (مع الرسوم البيانية) ومريحة (إرسال الأوامر من خلال قائمة السياق). Zabbix لديه شيء جميل مثل وكيل zabbix. من خلال الوكيل ، سنتصل ببرنامج php النصي على الخادم ، والذي سيعود بمعلومات حول ما إذا كان جهاز التوجيه الخاص بنا قد تم تسجيله في الفترة الزمنية المطلوبة. لتخزين معلومات حول وقت التسجيل ، أوامر للأجهزة ، أستخدم MySQL ، جدول مستخدمين منفصلين مع الحقول التالية تقريبًا:
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;
يمكن الحصول على جميع المصادر من مستودع Git على:
https://github.com/BazDen/iotnet.online.gitالآن البرامج النصية لـ PHP المستضافة على جانب الخادم (للراحة ، يمكنك وضعها في المجلد / usr / share / zabbix /):
ملف A.php:
<?php
ملف Agent.php (هذا هو البرنامج النصي للعامل zabbix المسمى):
<?php
حسنا ، المرحلة النهائية: وصف وكيل وإضافة الجداول.
إذا لم تقم بتثبيت عميل zabbix بعد ، فقم بما يلي:
apt-get install zabbix-agent
تحرير الملف /etc/zabbix/zabbix_agentd.conf.
أضف السطر:
UserParameter=test,php /usr/share/zabbix/agent.php user password
حيث:
الاختبار هو اسم وكيلنا
"Php /usr/share/zabbix/agent.php كلمة مرور المستخدم" - البرنامج النصي الذي تم الاتصال به مع بيانات تسجيل الجهاز.
إضافة الرسوم البيانية: افتح واجهة الويب zabbix ، حدد من القائمة:
الإعدادات -> المضيفين -> إنشاء مضيف. يكفي تحديد اسم المضيف ، مجموعته ، واجهة الوكيل الافتراضية:

نحتاج الآن إلى إضافة عنصر بيانات لهذا المضيف. انتبه إلى حقلين: "المفتاح" هو بالضبط المعلمة التي حددناها في ملف /etc/zabbix/zabbix_agentd.conf (في حالتنا إنه اختبار) ، و "الفاصل الزمني للتحديث" - لقد قمت بتعيين 5 دقائق ، لأن ويتم تسجيل الجهاز على الخادم مرة واحدة كل خمس دقائق.

حسنا ، أضف الجدول. أوصي باختيار "Fill" كنمط الرسم.

الإخراج شيء موجز للغاية ، على سبيل المثال مثل هذا:

بالنسبة للسؤال المعقول: "هل كان يستحق كل هذا العناء؟" ، سأجيب: حسنًا ، بالطبع ، راجع "أسباب إنشاء دراجة" في بداية المقال.
إذا كانت تجربتي الأولى في الرسم البياني ستثير اهتمام القراء ، فأريد في المقالات التالية وصف كيفية إرسال الأوامر إلى المعدات عن بُعد. كان من الممكن أيضًا تنفيذ المخطط بالكامل للأجهزة القائمة على RouterOS (Mikrotiks).