كيف تقيس مدة تشغيل عميل OpenVPN باستخدام خطافي up وdown
لا يوفّر OpenVPN عدّادًا لمدة التشغيل۔ خزّن طابعًا زمنيًا من خطاف up، وامحه عند down، واطرحه، وحافظ على دقّته عبر إعادة التشغيل والنسخ المتعددة۔
تطلب لوحة معلومات رقمًا لمدة الاتصال، و OpenVPN لا يوفّره۔ يعرف العميل متى صعد نفقُه، لكن فقط إذا سجّل شيء تلك اللحظة قبل أن تُفقد حالة الجلسة۔ المكان المدعوم هو خطاف up، والقيمة الجديرة بالتخزين هي ثانية خام من حقبة يونكس بدلًا من نص منسّق۔ كل ما بعد ذلك حساب، مع بضع قواعد ترتيب تحدّد ما إذا ظل الرقم صادقًا۔
تأكّد من أن الخطافين يعملان فعلًا
أثبت أن الخطاف يُطلَق قبل أن تبني أي شيء عليه۔ يحتاج إعداد عميل أدنى إلى script-security 2 مع مساري up و down صريحين؛ من دون سطر الأمان يرفض OpenVPN تنفيذ السكربت ويقول ذلك صراحة۔ أضف up-restart و down-pre في الوقت نفسه كي يتصرّف مسارا إعادة التشغيل والتشغيل العكسي بشكل متوقّع۔
اجعل الإصدار الأول من الخطاف يضيف بيئته إلى ملف ولا يفعل شيئًا آخر۔ يخبرك ذلك بأسماء المتغيّرات التي يُصدّرها بناؤك فعلًا، مثل dev و script_type، بدلًا من تلك التي تتذكّرها من إصدار آخر۔ شغّل اتصالًا واحدًا وقطعًا واحدًا، ثم اقرأ الملف۔ إن لم يظهر شيء فقف هنا، لأن تصميم طابع زمني فوق خطاف لا يعمل أبدًا سيبدو كعطل مراقبة لأسابيع۔
تحقّق من المستخدم الذي يعمل به الخطاف۔ مع ضبط user و group يتخلّى OpenVPN عن صلاحياته قبل تشغيل السكربتات، لذا قد يكون مجلد يستطيع root الكتابة فيه مغلقًا أمام الخطاف۔ اختر المسار من وجهة نظر الخدمة لا من وجهة نظر صدفتك۔
سجّل قيمة حقبة واحدة وامحها عن عمد
يحتاج خطاف up إلى سطر واحد، date +%s > /run/openvpn-client.started، مع تعديل المسار بحسب كل نسخة۔ تتجنّب قيمة الحقبة أسئلة اللغة والمنطقة الزمنية والتنسيق لاحقًا، وهي الرقم نفسه الذي يستطيع وكيل المراقبة مقارنته بساعته۔
المحو لا يقل أهمية عن الكتابة۔ ينبغي لخطاف down أن يفرّغ الملف أو يحذفه، و down-pre يجعل ذلك يحدث قبل إغلاق الواجهة، ما يزيل النافذة التي يصف فيها الملف نفقًا ذهب بالفعل۔ up-restart ثم يجدّد الطابع عند إعادة تشغيل داخلية بدلًا من ترك القيمة الأصلية مكانها۔ من دون هذا الزوج، إعادة تشغيل بسبب انتهاء مهلة ping تُنتج رقمًا يظل يتصاعد بينما يُعاد إنشاء النفق۔
اختر موضعًا بعمر مناسب۔ ملف تحت /run يختفي عند إعادة الإقلاع، وهو ما يوافق الواقع، بينما ملف تحت /tmp قد يُنظَّف بشكل غير متوقّع، وملف في مجلد الإعدادات يبقى بشكل يضلّل۔ اضبط الأذونات كي لا يقرأه إلا مستخدم الخدمة وقارئ المراقبة۔
احسب مدة التشغيل دون الثقة بأسطر السجل
اقرأ الثانية المخزّنة، واقرأ الثانية الحالية، واطرح۔ حين يكون الملف غائبًا أو فارغًا فالجواب الصادق أنه لا نفق نشط، لا أن مدة التشغيل صفر، لأن الحالتين ينبغي أن تُطلقا تنبيهين مختلفين۔ أبقِ الثواني الخام في حمولة المراقبة ونسّق الأيام والساعات في طبقة العرض۔ المنسّق الذي يقرّب داخل المصدّر يهدر دقة سيحتاجها أحدهم أثناء حادث۔
تحليل طوابع وقت السجل هو الاختصار المغري، وهو يفشل بثلاث طرق: التنسيق يتبع الخيارات المضبوطة، والتدوير يزيل التاريخ، وإعادة الاتصال تظهر كجلسات منفصلة لا كنفق متصل واحد۔ الخطاف يسجّل الحدث مرة واحدة، في لحظة وقوعه۔
حين يجري الفحص على مضيف آخر، أرسل الطابع الزمني لا المدة كي يطبّق القارئ ساعته۔ عندئذ تُقرأ نتيجة سلبية صغيرة كانحراف ساعة لا كخطاف معطّل۔
غطِّ إعادة الاتصال وإعادة التشغيل والنسخ المتعددة
نفقان على مضيف واحد يحتاجان ملفين، مفتاحهما اسم النسخة الذي تستخدمه الخدمة أصلًا۔ المسار المشترك يعني أن أحدث اتصال يكتب فوق وقت بدء كل ملف تعريف، والعرض هو رقم يقفز إلى الوراء حين يبدأ نفق ثانٍ۔
سلوك إعادة الاتصال يستحق اختبارًا خاصًا، لأنه الموضع الذي يبلّغ فيه تصميم معقول عن الشيء الخطأ بهدوء۔ افرض إعادة تشغيل بإسقاط النظير أو بإرسال إشارة إلى العملية، ثم قارن حالة الواجهة بالملف۔ ينبغي أن يتقدّم الطابع الزمني في اللحظة التي يعود فيها النفق۔
على جانب الخادم يحمل ملف الحالة قيمة connected-since لكل عميل، وهي تجيب عن سؤال مختلف: متى رأى الخادم ذلك النظير آخر مرة۔ استخدمها للتحقّق المتقاطع لا كبديل، لأنها تختفي مع الجلسة التي تصفها۔ لا يقول أي من القياسين شيئًا عن صحة التطبيق خلف النفق۔
شغّل الفحوص الثلاثة التي تكشف أخطاء الترتيب
اختبر اتصالًا عاديًا وإعادة اتصال مفروضة وتوقّفًا نظيفًا، واقرأ قائمة الواجهات والملف معًا بعد كل منها۔ طابع لا يزال موجودًا بعد توقّف نظيف، أو ملف يؤكّد نفقًا لا تحتويه قائمة الواجهات، يشير مباشرة إلى ترتيب الخطافات۔ شغّل الفحوص كمستخدم الخدمة وبمسارات الخدمة، لأن صدفة root قد ترى ملفًا آخر وتعطي جوابًا خاطئًا بثقة۔ ثم اترك مِستطلعًا بطيئًا يقرأ الملف وتأكّد أنه لا يكتب فيه أبدًا۔
استطلاع كل ستين ثانية يغطّي التنبيه، ولا ينبغي لأي خطاف أن يعتمد على بقاء ذلك المستطلع حيًّا۔ أبقِ المسؤوليتين منفصلتين يبقَ الرقم موثوقًا عند إعادة نشر أي من الجانبين۔