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

الملف يصف لحظة، لا عقدًا

ملف الإعداد هو مجموعة من التأكيدات: اسم المضيف هذا يستمع على هذا المنفذ بهذا البروتوكول، ويقدّم شهادة تطابق هذا الاسم، ويقبل بيانات الاعتماد هذه. وعندما يتوقف أيٌّ منها عن الصحة يصبح الملف قديمًا، ويكون الإصلاح في جانب المشغّل من الحدود، لا في إعداداتك.

قوائم العُقد العامة تُظهر ذلك صراحةً بطبيعتها. فالعُقد يديرها متطوعون، تظهر وتختفي، وتُعاد العناوين إلى الاستخدام، وتُحجب المنافذ من قِبل الشبكة التي تقف خلفها. والقائمة لقطة يُعاد توليدها، والنسخة الموجودة على قرصك صورة فوتوغرافية للقطة أقدم.

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

اقرأ مرحلة الفشل قبل أن تلمس أيّ إعداد

تخبرك رسالة الخطأ أيّ تأكيد فشل، ولكل تأكيد إصلاح مختلف تمامًا. وتعديل التشفير عندما لا يُحلّ اسم المضيف يضيع بعد الظهر ولا يعلّم أحدًا شيئًا.

What happensThe assertion that brokeSupported response
Name never resolvesThe host still exists under that nameGet a current endpoint from the operator
TCP connect times outThe listener is on that port and reachableCheck the current published port, then the local network
TLS or key exchange failsThe peer presents the expected identityCompare the certificate, not the cipher list
Authentication rejectedThe account is still validGet credentials reissued or stop using the service
dig +short vpn.example.net
curl -sS -o /dev/null -w 'connect=%{time_connect} tls=%{time_appconnect}\n' --max-time 8 https://vpn.example.net:443/
openssl s_client -connect vpn.example.net:443 -servername vpn.example.net -brief </dev/null

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

تغييرات الشهادة والهوية هي الهادئة

معظم الأعطال تعلن عن نفسها. أما تغييرات الهوية فلا، لأن العميل الذي يثبّت اسم شهادة سيرفض شهادة جديدة سليمة تمامًا برسالة يقرأها كثيرون على أنها خطأ برمجي. النفق سليم. والتثبيت قديم.

ابحث عن خيارات الهوية قبل أن تستنتج أيّ شيء:

grep -nE '^(remote|proto|auth|verify-x509-name|tls-crypt|key-direction|ca) ' profile.ovpn
openssl x509 -in profile-ca.crt -noout -subject -dates

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

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

المشغّل وحده يستطيع نشر بديل صالح

عندما تختفي عقدة، يجب أن يأتي البديل من المصدر نفسه الذي نشر الأصل. والملف الذي يصل في رسالة مباشرة لأنه «يستخدم اسم الخادم نفسه» إعداد غير مُتحقَّق منه من طرف مجهول، واستيراده يمنح ذلك الطرف التحكم في توجيهك.

الفحص رخيص. اجلب الملف الحالي من الموقع المنشور، وقارن نقطة الطرف والبروتوكول بالقائمة، وتأكد من بصمة مادة CA بدلًا من الوثوق باسم الملف:

curl -sS -o current.ovpn https://example.org/nodes/current.ovpn
sha256sum current.ovpn profile.ovpn
grep -nE '^(remote|proto) ' current.ovpn

إذا اختلف التجزئان في المسافات فقط، فلديك تغيير في التنسيق. وإذا اختلفا في نقاط الطرف، فقد نقل المشغّل شيئًا والملف المنشور هو المرجع. وإذا كان الملف المنشور أقدم من الذي بحوزتك، فأنت على الأرجح تنظر إلى ذاكرة مؤقتة، والجواب القديم سيرسل في الاتجاه الخاطئ.

اسحب الإدخال القديم وسجّل ما حدث

بعد التحقق من بديل عامل، احذف الملف القديم بدلًا من إبقائه احتياطًا. فالإدخال القديم الذي يتصل نصف اتصال فخّ: سيُختار أثناء انقطاع، وسيفشل ببطء، وسيقضي من يحقق في أول عشر دقائق على الملف الخطأ.

احتفظ بسجل قصير خارج الإعداد: التاريخ، ونقطة الطرف القديمة، ومرحلة الفشل، وما حلّ محلها. العُقد العامة تتغيّر، وبعد ستة أسابيع يصل السؤال نفسه بشخص آخر. وسطر واحد في ملف ملاحظات يجيبه في ثوانٍ.

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

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