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

لماذا يكون الشرط الفاشل شكلًا خاطئًا

يعامل ExecStartPre الخروج بقيمة غير صفرية كفشل في بدء التشغيل، وهذا صحيح بالنسبة لأمر يهيّئ الخدمة. أما استخدامه كشرط فيجعل قرار السياسة غير قابل للتمييز عن اعتماد معطوب. وُجد ExecCondition كي تستطيع الوحدة رفض البدء دون أن تُعلَّم كفاشلة.

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

اكتب عقد أكواد الخروج أولًا

اكتب العقد قبل السكربت. الخروج بصفر يعني المتابعة، والخروج بواحد يعني تخطّي أوامر البدء المتبقية، والخروج بـ 255 يعني أن الشرط نفسه لم يستطع العمل. والأكواد بين اثنين و254 تعني عادة التخطّي أيضًا، وهو أمر يسهل نسيانه حين يعيد المساعد كود خطأ عشوائيًا. ملف drop-in أدناه يربط المساعد باسم الوحدة الحقيقي.

[Service]
ExecCondition=/usr/local/libexec/should-start-home-vpn

افحص الوحدة الفعّالة بحثًا عن إعدادات SuccessExitStatus أو stop-post الموروثة قبل افتراض الدلالات الافتراضية. ثم اختبر كل نتيجة من النتائج الثلاث عمدًا.

إشارة الشبكة ليست دليلًا على الموقع

قد يشير عنوان موجّه يمكن الوصول إليه أو عنوان MAC معروف إلى الشبكة الصحيحة، ولا يثبت أيٌّ منهما ذلك. فشبكة أخرى قد تعيد استخدام العنوان نفسه، وقد تكون بيانات ARP قديمة، ويمكن تزوير المعرّفات. تعامل مع الفحص كتحسين يتوافق مع السياسة، لا كنتيجة مصادقة.

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

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

تعامل مع الانتقال بين الشبكات

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

systemctl cat home-vpn.service

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

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