كيف تتحقق مما إذا كان نفق VPN على لينكس يعمل فعلاً
أعلام الواجهة واستعلامات المسار والجدول 220 وطوابع وقت المصافحة تجيب على أسئلة مختلفة. اجعل كل خطوة في السكربت مشروطة بالفحص الذي يثبت فرضيتها.
يعيد Cron تشغيل VPN سليم تماماً كل عشر دقائق، بينما تترك الوظيفة نفسها واحداً ميتاً يعمل أسبوعاً كاملاً. كلتا المشكلتين تنبعان من التعامل مع «الرفع» كحقيقة واحدة بينما هي أربع حقائق على الأقل. يمكن أن يكون الجهاز ممكّناً إدارياً وموجّهاً بشكل صحيح ومشفّراً بالكامل ومع ذلك لا يحمل شيئاً مفيداً. افصل الملاحظات أولاً، وسيكتب الفحص نفسه تقريباً.
أعلام الوصلة تصف الجهاز لا المسار
الفحص الذي ينسخه الجميع يبحث عن عنوان عتاد مكوّن من أصفار. تفصل هذه الحيلة واجهة حقيقية عن عنصر نائب في بعض المشغّلات، ولا تثبت شيئاً في الباقي، لأن جهاز tun لا يملك عنوان MAC ليرفعه أصلاً. ip -brief link show tun0 يقدّم الأعلام بدلاً من ذلك: UP يعني أن مديراً مكّن الجهاز، وLOWER_UP يعني أن المشغّل يعتبر الوصلة قابلة للاستخدام. وقراءتهما معاً تخبرك أن الجهاز موجود وغير معطّل إدارياً. ولا يخبرك أي منهما أن للحزمة مكاناً تذهب إليه.
OpenVPN ينشئ جهاز tun الخاص به قبل تثبيت المسارات، لذا قد تبدو الأعلام مثالية بينما لا شيء موجّه. عاملها كشرط مسبق، لا كجواب أبداً.
اسأل إلى أين ستذهب الحزمة
استعلام المسار يجيب على السؤال الذي لا تستطيع الأعلام الإجابة عليه. ip route get 10.8.0.1 from 10.8.0.2 يسمّي الواجهة وعنوان المصدر والجدول الذي سيستخدمه النواة، وهو بالضبط ما يحتاج النفق المنقسم إلى التحقق منه. بدون عنوان المصدر فأنت تسأل شيئاً آخر، ومع التوجيه المعتمد على السياسات قد يختلف الجواب باختلاف المصدر. هذا أرخص اختبار صادق، لأنه يستشير القواعد نفسها التي سيستشيرها مرورك.
أما WireGuard فأضف المصافحة. wg show يطبع طابع وقت لآخر مصافحة لكل نظير، وطابع وقت توقف عن التقدم يعني أن النظير ذهب مهما قالت أعلام الواجهة. الواجهة المهيّأة دون مصافحة حديثة من أكثر الإيجابيات الكاذبة شيوعاً في المراقبة محلية الصنع.
الجدول 220 يحكي قصة IPsec
يثبّت strongSwan المسارات للمحددات المتفاوض عليها في الجدول 220 عندما يكون تثبيت المسارات ممكّناً. ip route list table 220 لذلك يفصل بين المتفاوض عليه والموجّه: جدول فارغ بجانب اتصال محمّل يعني أن جمعيات IKE وCHILD الأمنية قامت بينما لا يُوجَّه أي مرور إليها. تحقق من ip xfrm state بجانبه، لأنه يسرد جمعيات الأمان المثبتة ونقاط نهاياتها.
سياسة الفخ هي الحالة التي يجب الحذر منها. إنها تنتظر مروراً مثيراً للاهتمام بدلاً من توجيهه، فيبقى الجدول فارغاً حتى يفعّل شيء ما النفق.
حالة المدير وحالة الخدمة قائمتان مختلفتان
يسرد NetworkManager فقط الاتصالات التي يملكها. nmcli -t -f NAME,TYPE connection show --active لا يعيد شيئاً لنفق بدأ مباشرة بواسطة wg-quick أو بواسطة خدمة OpenVPN.
هذا التمييز مهم عندما يتعين على سكربت أن يقرر أي المديرين يستعلم منه. اختر الذي يملك النفق فعلاً على هذا المضيف وتجاهل صمت الآخر. إن وُجد الاثنان، فقرّر أيهما المرجع وأوقف الثاني، لأن مديرين يعيدان كتابة المسارات على واجهة واحدة ينتجان أعطالاً لا يستطيع أحد إعادة إنتاجها. المدخل الغائب معلومة عن المدير لا عن النفق.
اشترط الخطوة التالية بالفحص الذي تحتاجه
لا يثبت استطلاع منفذ UDP شيئاً عن الجهوزية، لأن UDP ليست لديها مصافحة وnc -u ينجح بمجرد أن تخرج الحزمة. افحص ما تستهلكه الخطوة التالية فعلاً: اتصال TCP بالمنفذ المُوجّه، وطلب إلى مضيف داخل النفق، واسم لا يُحلّ إلا هناك. حُدّ الانتظار بمهلة وعدد محاولات، وافشل بصوت عالٍ عندما ينتهي.
تتفوق الخطافات على الاستطلاع عندما يوفّرها العميل. خطافات OpenVPN الخاصة بـ --up و--down تعمل بعد أن تغيّر الواجهة حالتها، وهو ما يزيل السباق تماماً، لكنها تعمل بالامتيازات التي احتفظت بها الخدمة. إذا هبط OpenVPN إلى حساب غير مميز عبر user وgroup، فإن الخطاف يعمل بذلك الحساب. إعادة تشغيل خدمة نظام تتطلب حينها sudo للسماح بذلك الأمر تحديداً. سلّم إعادة المحاولة إلى مدير الخدمات بدلاً من حلقة cron: سياسة إعادة تشغيل محدودة بحد بداية تكشف نفقاً معطلاً، بينما تخفيه حلقة غير محدودة إلى ما لا نهاية.