إعادة توصيل عميل OpenVPN: ثلاث أدوات تحكم وثلاثة نطاقات
إسقاط جلسة واحدة أو إبلاغ كل عميل UDP أو إعادة تشغيل الخادم عمليات مختلفة. حدّد النطاق أولًا ثم تحقّق من الجلسة الجديدة.
يسأل أحدهم عن إعادة توصيل عميل VPN، ويمكن أن يعني الطلب ثلاثة أشياء مختلفة. قد يعني إسقاط جلسة موثّقة واحدة، أو إبلاغ كل عميل بأن خادم UDP سيختفي، أو إعادة تشغيل الخادم نفسه. لكل منها نطاق تأثير مختلف، واختيار الخيار الخاطئ يحوّل إصلاحًا لمستخدم واحد إلى انقطاع للخدمة. النطاق هو القرار، والأمر يأتي تبعًا له.
اسأل عمّن ينبغي أن يتأثر قبل أن تسأل عن أداة التحكم التي ستستخدمها.
حالة واحدة: واجهة الإدارة
يمكن لواجهة إدارة مُهيّأة أن تسرد الحالات المتصلة وأن تُسقط واحدة منها بالضبط. تحمل كل جلسة معرّف عميل، و client-kill CID يستهدف ذلك المعرّف بدلًا من اسم شائع. اقرأ المعرّف الحيّ من مخرجات الحالة الحالية، لأن القيمة المنسوخة من سجل أقدم تشير إلى جلسة لم تعد موجودة. إسقاط الحالة ينهي ذلك الاتصال ولا شيء غير ذلك.
وهو لا يضمن اتصالًا جديدًا. يعتمد عودة العميل على إعدادات إعادة المحاولة، ومدخلاته البعيدة المتبقية، ومتطلبات المصادقة، وعلى ما إذا كان التطبيق المُشرف لا يزال يعمل. العميل العائد يحصل على معرّف جديد، ولهذا فإن مقارنة المعرّفات هي الطريقة الوحيدة الموثوقة للتمييز بين القديم والجديد.
إشعار خروج UDP ليس أمرًا لكل عميل
explicit-exit-notify هو توجيه إعدادي يتعلق بأحداث الخروج وإعادة التشغيل. على عميل UDP يخبر الطرف الآخر بأن الجلسة تنتهي، وتتحكم الوسيطة الرقمية في عدد مرات إعادة محاولة الإشعار. عندما يعمل الخادم عبر UDP فإنه يرسل رسالة تحكم بإعادة التشغيل إلى عملائه المتصلين، والقيم الموثّقة تميّز إعادة التوصيل بالخادم نفسه عن الانتقال إلى مدخل بعيد آخر. تلك إشارة دورة حياة بجمهور واسع.
لا شيء فيه يختار عميلًا عشوائيًا في لحظة عشوائية. التعامل معه كزر إعادة توصيل يصل إلى كل جلسة متصلة دفعة واحدة.
الإشارات تعمل على العملية، لا على الجلسة
SIGUSR1 يطلب من عملية قيد التشغيل إعادة توصيل اتصالها دون إعادة قراءة الإعدادات، و خيارات الاستمرارية تحدّد ما يبقى بعد إعادة التشغيل تلك. SIGHUP يذهب أبعد: يعيد قراءة ملف الإعدادات ويعيد فتح موارده. SIGTERM و SIGINT يطلبان إيقافًا منظمًا. تلك عمليات على مستوى العملية: على خادم متعدد العملاء تؤثر في كل جلسة تحملها العملية، لا في الجلسة المذكورة في التذكرة.
عندما تعمل العملية تحت مدير خدمة، استخدم تحكم المدير نفسه بدلًا من إرسال إشارة إلى PID وجدته في قائمة العمليات. اقرأ الوحدة لتعرف الإشارة التي يرسلها المدير، لأن إعادة التشغيل وإعادة التحميل تفعلان أشياء مختلفة بالخادم نفسه.
حدّد النطاق قبل اختيار أداة التحكم
ثلاثة أسئلة تحسم الأمر. من ينبغي أن يتأثر: مستخدم واحد، أم كل عملاء خادم واحد، أم الخادم وكل ما يحمله. وما ينبغي أن يبقى: الإعدادات، أم حالة النفق، أم لا هذا ولا ذاك. ومن المصرّح له بذلك: تكامل الإدارة، أم مالك الخدمة، أم مشغّل الشبكة الذي يتحكم في إشعار الخروج. أجب عن هذه الأسئلة فلن تناسبك إلا أداة تحكم واحدة.
إضافة مستمع تحكم غير موثّق للحصول على زر إعادة توصيل تسلّم لمن يستطيع الوصول إلى المنفذ أكثر بكثير من ذلك الزر.
تحقّق من الجلسة الجديدة، لا من الانقطاع
يُثبت حدث الانقطاع أن الجلسة القديمة انتهت. لكنه لا يقول شيئًا عن جلسة جديدة تُوثّق أو تتلقى عنوانًا أو تثبّت المسارات أو تصل إلى المورد الذي احتاجه المستخدم. تحقّق من المعرّف الجديد، ثم من حالة النفق، ثم من مورد حقيقي واحد. تلك الخطوات الثلاث هي الفرق بين إعادة توصيل واتصال عامل.
اكتب النطاق في سجل التغيير. عبارة 'أعدت توصيل العميل' ليست وصفًا عندما كان العميل واحدًا من أربعين على خادم مشترك.