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

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

ما كان العميل يطلبه فعلاً

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

journalctl -u openvpn-client@office -b --no-pager | grep -nE 'route|File exists'
openvpn --config /etc/openvpn/client/office.ovpn --verb 4 --log /tmp/ovpn.log

حالة خروج غير صفرية من مساعد المسارات أقل إفادة من النص الذي تحتها، لأن استجابات مختلفة من النواة تُنتج حالة غير صفرية. احتفظ بالرسالة الدقيقة؛ فالتمييز بين إدخال موجود وبوابة غير قابلة للوصول هو ما يحدد أي الأقسام التالية ينطبق.

اقرأ المسار الموجود، لا العنوان فقط

البحث في الجدول عن العنوان الرباعي نفسه لا يكفي. يُعرَّف كائن المسار بعائلة عنوانه وجدوله وبادئة وجهته ومتريكه وبروتوكوله وجهاز الخروج، والإدخالات التي تشترك في بادئة يمكن أن تتعايش بشكل مشروع عندما تختلف تلك السمات. ما يتصادم هو الكائن كله، لا النص.

ip -4 route show table all | grep -F '10.40.'
ip -4 route show match 10.40.0.0/16
ip -4 route get 10.40.0.5

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

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

أربعة مالكين يمكن أن تكون البادئة لهم

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

كل مالك يحتاج تصحيحاً مختلفاً. المسار المتصل ليس ملكك لتحذفه؛ فحذفه قد يقطع الوصول المحلي قبل أن يصبح النفق صالحاً، وستعيده النواة. والمسار الذي يملكه مدير اتصال ينبغي تغييره عبر ذلك المدير، لا بـ ip route del يدوي يبطله إعادة الاتصال التالية.

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

block-local يجيب عن سؤال آخر

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

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

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

أغلق الحلقة: أزل التكرار من مصدره

بعد أن تعرف أي مالك يحمل الإدخال، أزل التعليمة المكررة حيث تُعرَّف. قد يكون سطر route في ملف التعريف، أو دفعاً من الخادم، أو خطافاً لم يعد بحاجة إلى العمل.

ip -4 route show match 10.40.0.0/16
ip -4 route get 10.40.0.5
journalctl -u openvpn-client@office -b --no-pager | tail -n 15

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

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

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