اختبار استعادة خادم VPN بعد إعادة التشغيل: ما الذي يجب فحصه أولًا
أعد التشغيل دون أن يكون أحد مسجّلًا للدخول، ثم اتصل من الخارج. افحص الوحدة والواجهة والمسارات وقواعد الجدار الناري التي يجب أن تعود من تلقاء نفسها.
أعد تشغيل الخادم دون أن يكون أحد مسجّلًا للدخول، ثم اتصل من شبكة لا تتحكّم بها. هذا الاختبار الواحد يجيب عمّا إذا كانت الاستعادة حقيقية، لأن النفق الذي لا يعمل إلا بعد أن يشغّل أحدهم أمرًا يدويًا ليس استعادة، بل إصلاح. معظم الفحوص تتوقف مبكرًا جدًا: الخدمة تظهر نشطة، والواجهة تظهر قائمة، ومع ذلك لا تُحمّل الصفحة. والفجوة تكون دائمًا تقريبًا في استمرارية الأجزاء المحيطة بالنفق، لا في أمر النفق نفسه.
أربعة مالكين، وأربعة اختبارات مختلفة
قبل إعادة التشغيل، حدّد ما المفترض أن يعيد النفق. الاختبار الذي تنفّذه والإصلاح الذي تطبّقه يعتمدان على تلك الإجابة، وهناك أربعة مالكين شائعين: وحدة systemd لخدمة VPN، أو وحدة نسخة wg-quick لواجهة WireGuard، أو بيئة تشغيل حاويات، أو ملف تعريف لمدير الشبكة. إن لم تستطع تسمية المالك، توقّف وابحث عنه، لأن اختبار إعادة تشغيل بلا مسار إقلاع متوقّع لا يخبرك إلا بأن شيئًا ما حدث.
كل مالك يحتفظ بإعداداته في مكان مختلف. خادم OpenVPN المُدار بواسطة systemd يقرأ إعداداته عند البدء، فما يوجد في الملف وقت الإقلاع هو ما يعمل. واجهة wg-quick تستمد عناوينها ومساراتها و DNS من الملف نفسه، ما يعني أن واجهة رُفعت يدويًا من صدفة ولم تُفعّل كوحدة لن تعود. والحاوية تعيد نقطة الدخول الخاصة بها لكنها لا تعيد تغييرات جدار الحماية على المضيف إلا إذا كانت تلك التغييرات خارج الحاوية.
الأساس أولًا، وإلا فلا معنى للنتيجة
سجّل الحالة العاملة بينما هي تعمل: العناوين على النفق، والمسارات لشبكة العميل الفرعية، وقواعد NAT أو التمرير، ومقبس الاستماع، و sysctl الخاص بالتمرير. ip addr show wg0 و ip route و nft list ruleset أو iptables-save و ss -lunp و sysctl net.ipv4.ip_forward تكفي على معظم المضيفين.
سجّل كيف أُعدّت الخدمة لتُقلع، لا مجرد أنها تعمل. systemctl is-enabled wg-quick@wg0 و systemctl is-active wg-quick@wg0 يجيبان عن سؤالين مختلفين، وحالة التفعيل هي التي تهم عند الإقلاع، كما هو موصوف في systemctl(1). وبالنسبة إلى OpenVPN، افحص أي قالب يستخدمه المضيف، لأن openvpn@server و openvpn-server@server وحدتان مختلفتان بقيم افتراضية مختلفة.
نفّذ إعادة التشغيل واقرأ أول فشل
أعد التشغيل عن قصد، خلال نافذة اخترتها، مع فتح طرفية أو مسار خارج النطاق. راقب ترتيب الأحداث لا الحالة النهائية: المضيف قابل للوصول، والوحدة مُنشّطة، والواجهة موجودة، والمسارات مثبّتة، وقواعد جدار الحماية موجودة، والمستمع مربوط، والعميل مقبول. أول خطوة لا تحدث هي النتيجة؛ وكل ما بعدها ضجيج.
قد تكون الخدمة نشطة بينما النفق غير قابل للاستخدام، وهذا هو أكثر نجاح زائف شيوعًا. قد يكتمل الإقلاع قبل أن تصبح الشبكة متاحة إذا كانت الوحدة تنتظر network.target فقط بدلًا من network-online.target. والملفات المشار إليها مثل الشهادات أو المفاتيح أو قائمة CRL قد تكون غير قابلة للقراءة في تلك اللحظة لأن نقطة التركيب أو مسار الأسرار ليس جاهزًا بعد. ولا يظهر أي من المشكلتين في systemctl status حتى تقرأ سجل الوحدة.
اختبر من خارج المضيف. عميل على الشبكة المحلية نفسها قد ينجح عبر مسار لا يستخدمه أي عميل بعيد، وجلسة SSH إلى الجهاز لا تثبت شيئًا عن النفق. اتصل، وحلّ اسمًا داخليًا، ووصل إلى المورد الخاص، ثم أعد الاتصال مرة واحدة للتأكد من أن حالة الإلغاء والمفاتيح ما زالت سارية.
الشروط الثلاثة التي تحدد إصلاحك
إن عاد النفق لكن العملاء لا يصلون إلى شيء، فالفشل في استمرارية التوجيه أو NAT. وإن لم يتمكن العملاء حتى من إتمام المصافحة، فالفشل في الواجهة أو مواد المصادقة. وإن لم تبدأ الخدمة أبدًا، فالفشل في ملف الوحدة أو تبعياته. وهذه الفروع الثلاثة تؤدي إلى إصلاحات مختلفة، ولهذا فإن إعادة تشغيل عمياء بلا أساس تكلّف وقتًا أكثر مما توفّر.
أجرِ الإصلاح حيث يملك الإعداد. ضع التمرير في ملف sysctl إضافي، وضع قواعد NAT في مجموعة القواعد التي تُحمّل عند الإقلاع، وفعّل الوحدة بدلًا من تشغيلها، واحفظ الأسرار في مسار موجود قبل أن تبدأ الوحدة. وإضافة انتظار إلى الوحدة تخفي تبعية بدلًا من الإعلان عنها.
سجّل النتيجة في دليل التشغيل
اكتب ما عاد من تلقاء نفسه، وما اضطررت إلى تشغيله، وكم استمرت الفجوة. وأدرج الأوامر الدقيقة التي استخدمتها للتحقق، كي يكرّر الشخص التالي الاختبار بدلًا من اختراع واحد. وإذا احتاجت أي خطوة أمرًا يدويًا، فذلك الأمر ينتمي إلى الإعداد، لا إلى دليل التشغيل كخطوة دائمة.
ثم جدول الاختبار التالي ليكون بعد التغيير التالي في حزمة شبكة المضيف، لا في تاريخ تقويمي بعد ستة أشهر. إن نمط الفشل الذي تحرس منه هو أمر مؤقت شعرت أنه دائم، وهذه تظهر بالضبط عندما يعدّل أحدهم قواعد جدار الحماية أو ينقل خدمة إلى وحدة جديدة.