OpenVPN 3 Linux: اقرأ خطأ D-Bus قبل أن تعيد الإصدار السابق
خمس خدمات وواجهة أمامية واحدة. انسب خطأ D-Bus إلى المكوّن الذي رفض، وتحقّق من وجود جلسة، ثم صحّح عند ذلك الحدّ.
تصل أعطال OpenVPN 3 Linux على شكل خطأ في أسلوب D-Bus مصحوب باسم غير مألوف، والإغراء هو إرجاع حزمة إلى إصدار أقدم ثم الأمل. العميل ليس برنامجًا واحدًا: واجهة سطر الأوامر تتحدث عبر الناقل مع خدمات تملك الملفات الشخصية والجلسات ومحرك VPN والتغييرات الشبكية ذات الامتياز. تحديد أيّ من هذه الخمس يملك النداء الفاشل هو معظم التشخيص، ويكلّف أمرًا واحدًا بدل إرجاع الإصدار. ما يلي هو ذلك القرار، بالترتيب الذي تظهر به الأعطال عادة.
خمسة مالكين خلف أمر واحد
خمس عمليات مهمة، ولكل واحدة اسم ناقل خاص بها: الواجهة الأمامية التي تقبل أمرك، ومدير التهيئة الذي يخزّن الملفات الشخصية وسياستها للوصول، ومدير الجلسات الذي يملك عمر الجلسة، والجزء الخلفي الذي يقود الاتصال عبر OpenVPN 3 Core Engine، وخدمة تهيئة الشبكة التي تثبّت الواجهة والمسارات وإعدادات DNS. لذلك فإن خطأً يسمّي كائن تهيئة ليس خطأ في الجزء الخلفي، وجزءًا خلفيًا لا يبدأ ليس فشل مصادقة. تصنيف الرسالة في أحد تلك الصفوف يجب أن يحدث قبل تغيير أي شيء، لأن كل خطوة لاحقة تعتمد على أي صف هو الصحيح. تخمين الصف هو الطريق الذي يتحول فيه إصلاح قصير إلى فترة بعد الظهر من العمل على الحزم.
اسأل ناقل النظام عن الخدمات الموجودة قبل أن تسأل عن أي شيء آخر، ثم أكّد أن الأجزاء المثبّتة متفقة على إصدار. يسجّل OpenVPN 3 Linux هذه الخدمات كوحدات نظام، لذا فالناقل الذي يجب سؤاله هو ناقل النظام، واستعلام الإصدار يحتاج سلطة إدارية، وقائمة تُجرى بـ --user تقرأ جلسة دخولك، حيث لا تظهر الوحدات أبدًا. تُنشَّط الخدمات عند الطلب وبعضها ينتهي عند الخمول، لذا فخدمة مفقودة قبل طلبك الأول لم تُسأل عن أي شيء بعد. الأوامر الثلاثة أدناه تجيب عن الوجود والإصدار وحالة الوحدة دون فتح جلسة VPN.
sudo busctl list | grep -i openvpn
sudo openvpn3-admin version --services
systemctl list-units 'openvpn3*'ما تثبته كل قائمة في الحقيقة
رؤى العميل نفسه هي أرخص دليل متاح، وكل واحدة منها تثبت أقل مما يبدو. ملف شخصي في قائمة التهيئة يُظهر أن ملفًا شخصيًا مستورد ولا شيء عن إمكانية اتصال أي أحد به. جلسة في قائمة الجلسات تُظهر وجود كائن جلسة ولا شيء عن انتهاء المصادقة البعيدة.
openvpn3 configs-list
openvpn3 sessions-listمسارات الكائنات في تلك المخارج تشير إلى كائنات مُدارة على الناقل لا إلى ملفات، لذا لا يمكن تحريرها، ومسار سُجّل سابقًا يصبح قديمًا في اللحظة التي تنقطع فيها تلك الجلسة. إعادة استعمال مسار من ملاحظاتك تُنتج أخطاء "no such object" لا علاقة لها بـ VPN. جدول المراحل أدناه يفصل ما يُرسيه كل خطوة من الاتصال عمّا يتركه مفتوحًا، وعلى ذلك الفرق تحديدًا يقوم قرار إرجاع الإصدار. اقرأ الصف المطابق لدليلك، ثم اقرأ نص الخطأ مرة أخرى.
| Stage | What exists | What proves it | What it does not prove |
|---|---|---|---|
| Profile imported | A configuration object held by the configuration manager | The profile is listed by the client | That the profile owner permits a connection |
| Session requested | A session object held by the session manager | The session appears in the session list | That the remote side accepted the credentials |
| Connect dispatched | An asynchronous attempt on the VPN backend | Status changes arrive for that session | That an interface was configured |
| Tunnel configured | An interface, routes and DNS settings | The network service reports success and routes appear | That traffic reaches the peer |
نداء الاتصال يعود قبل أن يوجد النفق
نداء الاتصال يمنحك جلسة لمراقبتها ثم يعود، ولهذا فإن نداءً يبدو ناجحًا يعقبه صمت هو حالة وسيطة طبيعية وليس تناقضًا. على الواجهة الأمامية أن تتابع تغيّرات الحالة وأن تجيب عن أي طلب تفاعل. الملف الشخصي الذي يحتاج اعتمادًا ولا يتلقى جوابًا ينتظر في حالة تشبه تمامًا جزءًا خلفيًا معلّقًا. تلك الحالة المنتظرة تستحق التعرّف عليها، لأنها ترسل الناس إلى المكوّن الخطأ.
بينما تجري محاولة، راقب قائمة الجلسات وسجل الواجهة الأمامية نفسه لذلك الملف الشخصي. الجلسة التي لا تغادر حالتها الابتدائية أبدًا تسمّي المكوّن الذي توقف، والسجل يسمّيه عادة في الأسطر الأولى. أبقِ اسم الملف الشخصي في متناول اليد، لأن أمر السجل يأخذ ملفًا شخصيًا لا مسار جلسة، وهذا سبب آخر لإعادة قراءة القائمة بدل إعادة استعمال مسار.
openvpn3 sessions-list
openvpn3 log --config <profile> --level 6قراءة سجل مكوّن واحد دون فتح جلسة
حين لا تُبلغ الواجهة الأمامية بشيء مفيد، اذهب إلى المكوّن الذي سجّل العطل بدل بدء اتصال آخر. مع مسجّل systemd-journald مهيأ، تقرأ رؤية السجل المحدودة للمدير أحداث مكوّن واحد دون لمس سياسة الناقل ودون فتح جلسة، وهذا مهم لأن تشخيصًا يغيّر النظام الذي يقيسه يثبت قليلًا جدًا. رشّح حسب الوحدة لا حسب وسم syslog: وحدات الخدمة المنفردة لا تضمن معرّفًا مشتركًا، لذا قد يعيد استعلام بالوسم صفحة فارغة بينما سجّلت الوحدة نفسها العطل.
سجّل أربعة حقول قبل أن تطلب المساعدة من أي أحد: الاسم الكامل للخطأ، والخدمة والكائن المعنيين، وطابع الوقت، وإصدارات الحزم المثبّتة. هذه هي ما يحتاجه المشرف، ولا شيء منها يقتضي لصق ملف شخصي أو اعتماد في تذكرة. توسيع سياسة الوصول إلى الناقل لإسكات الخطأ ليس تشخيصًا، بل يمحو الحدّ الذي كان يسمّي المكوّن نيابة عنك. يبقى المحتوى الخاص للملفات الشخصية خارج التقارير المشتركة للسبب نفسه الذي يُبقي الاعتمادات خارجها.
journalctl -u 'openvpn3-service-*' -n 50 --no-pager
openvpn3-admin journal --service <name>تصحيح الحدّ الذي رفض
لكل صف في الخريطة تصحيحه الخاص، والصفوف لا تحل محل بعضها. العملية المرفوضة على ملف شخصي سؤال عن السياسة والملكية، بينما الجزء الخلفي الذي لا يُنشَّط سؤال عن الخدمات والتغليف. الخادم الذي يرفض المصادقة ليس أيًّا منهما، لذا لا تستطيع تغييرات كلمة المرور المتكررة إصلاح مشكلة تنشيط محلية. اختيار التصحيح الخطأ هو الطريق الذي تتحول فيه مشكلة سياسة إلى إعادة تثبيت.
بعد تغيير الحزم، تحقّق من تثبيت متماسك ومدعوم بدل نسخ ملف ثنائي قديم إلى موضعه. إرجاع الإصدار المضبوط جواب مشروع لارتداد مؤكد، بشرط أن تبقى الحزم متوافقة وأن يوجد مسار عودة إلى صيانة مدعومة. أنشئ ذلك المسار قبل أن تتوقف الخدمة عن البدء، لا بعده.
يمكن لمنصة أخرى أن تشترك في مكتبة VPN الأساسية نفسها دون أن تشترك في خدمات ناقل لينكس، لذا فالعطل المشابه في Windows لا يقول شيئًا عن هذا. يوثّق نظرة عامة على D-Bus مسارات الكائنات المعروضة للتهيئات والجلسات، وهذا هو الجزء من البنية الذي يعتمد عليه هذا التشخيص. اقرأه مرة واحدة، وسيصل الخطأ التالي وقد صار مكوّن ما مرتبطًا به.