تحتفظ واجهة رسومية لسطح المكتب باتصال الإدارة، لذا يحاول سكربت مراقبة فتح اتصال خاص به فلا يقرأ شيئاً، أو الأسوأ من ذلك تتوقف الواجهة عن الرد على المطالبات. الاستنتاج المعتاد هو أن الخادم غير مستقر. في خادم المجتمع هذا القيد مقصود: واجهة التحكم تخدم عميل إدارة واحداً متصلاً في كل مرة، وهذا العدد لا علاقة له بعدد المستخدمين الذين يمكن أن تحملهم الشبكة الخاصة الافتراضية.

مقبس واحد، مالك واحد

تقبل قناة الإدارة عميلاً واحداً متصلاً. وعندما يصل عميل ثانٍ بينما الأول نشط، فإنه ينتظر أو يُرفض، ولا يوجد وضع مشترك متوازٍ مخبأ خلف أي خيار. وفصل المالك الحالي يتيح للخادم قبول العميل التالي، وهذا تسليم وليس قناة ثانية.

وهذا يجعل كل أداة إضافية منافساً. فإذا كانت الواجهة الرسومية تملك الاتصال، فإن سكربت الاستطلاع إما يفشل في الارتباط أو ينجح فقط بعد أن تستسلم الواجهة، وتتكرر السلسلة عند إعادة الاتصال التالية. وإذا ارتبط السكربت أولاً، تفقد الواجهة مسار التحكم لديها وتتوقف مطالباتها عن العمل. ولا تبلغ أي من الأداتين عن التعارض، لأن كل واحدة منهما ترى فقط أمرها الفاشل.

What you needMechanism that fitsWhat it cannot do
Periodic list of connected clientsStatus file written on an intervalDeliver events as they happen
Interactive prompts and session controlThe single management connectionServe two controllers at once
Multiple consumers of eitherOne owner process that fans outExist without you writing it

حدد أي مكوّن يملك التحكم

اختر مالكاً واحداً للقناة التفاعلية واجعله الشيء الوحيد الذي يتصل. الواجهة الرسومية التي تدير الاتصال، والسكربت الذي يرد على مطالبات المصادقة، والوحدة التي تنهي الجلسات، كلها تُعدّ مالكة، وواحد فقط يمكنه تولي الدور.

عندما تملك واجهة رسومية الاتصال، استخدم التكامل الذي توفره تلك الواجهة بدلاً من مصارعتها. والتنافس مع المالك على المقبس ينتج أعطالاً متقطعة تبدو عشوائية للمستخدمين، والشخص الذي يقوم بالتنقيح عادة لا يرى إلا النصف الثاني من السباق. لاحظ أي عملية تتصل أولاً بعد إعادة التشغيل، لأن هذا الترتيب يحدد الفائز في كل مرة. والمراقب الذي يبدأ قبل الواجهة الرسومية سيبقي القناة حتى تستسلم الواجهة.

استخدم لقطات الحالة للجامعين

معظم المراقبة تحتاج إلى قائمة، لا إلى محادثة. وملف الحالة الدوري يلبي ذلك دون لمس قناة التحكم، ويظل يعمل بينما تبقى الواجهة الرسومية متصلة.

status /run/openvpn/server.status 10
management /run/openvpn/server.sock unix

الفاصل الزمني هو ميزانية الحداثة، لذا اضبطه على ما تحتاجه لوحة المعلومات فعلاً بدلاً من أصغر قيمة تبدو آمنة. اللقطة المكتوبة كل بضع ثوانٍ رخيصة؛ أما السكربت الذي يعيد الاتصال بمقبس التحكم كل بضع ثوانٍ فليس رخيصاً، لأن كل إعادة اتصال تنافس المالك.

اللقطة ليست سجلاً تاريخياً وليست تغذية أحداث. والاتصالات التي تصل وتغادر داخل فاصل واحد لا تظهر أبداً، لذا لا يمكن تلبية متطلب تدقيق عبر استطلاع ملف يكتب فوق نفسه. وإذا كنت تحتاج إلى معرفة أن مستخدماً اتصل أصلاً، فإن اللقطة أداة خاطئة.

التوزيع تصميم، وليس وضعاً

إذا كان عدة مستهلكين يحتاجون فعلاً إلى بيانات إدارة حية، فضع مكوّناً موثوقاً واحداً أمام المقبس ودعه ينشر ملاحظات مختارة بعناية إلى البقية. وهذا المكوّن يملك إعادة الاتصال ومطالبات المصادقة والقرار بشأن ما هو آمن للإفصاح عنه.

ابنِه عن قصد: حدد الاستعلامات المسموح بها، وسجّل من سأل، وتجنب تحويل طبقة التوزيع إلى لوحة تحكم عن بُعد عن غير قصد. فالخادم لا يملك وضعاً متعدد العملاء لتمكينه، ولا يوجد سطر إعداد ينشئ واحداً. واعتبر المالك جزءاً من حدود الأمان، لأنه يحمل واجهة يمكنها فصل الناس. ويجب أن تكون إعادة تشغيله عملية روتينية بمسار استرداد موثّق.

تعامل مع المقبس كامتياز، لا كمقاييس

واجهة الإدارة يمكنها فصل المستخدمين وتغيير الحالة وقراءة الأحداث التي تذكر أسماء أشخاص. وكلمة مرورها تصادق على العميل ولا تشفر النقل، لذا فإن مستمعاً على الشبكة يعرّض المحادثة لأي شخص يمكنه مراقبتها.

فضّل مقبساً محلياً أو مستمعاً مقيّداً بشدة، وتحقق من أي عملية يعالجها جامعك فعلاً، لأن منتجات الخادم تشحن واجهات إدارة خاصة بها تتصرف بشكل مختلف. والجامع الموجّه إلى خادم خاطئ ينتج استنتاجات واثقة وخاطئة. وتأكد من المسار والعملية المالكة قبل أن تنقح استعلاماً لا يعيد شيئاً.

مقالات ذات صلة