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

الحالة الجزئية هي الفشل المعتاد

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

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

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

حدّد أول خطوة فاشلة

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

هذه الأوامر تطبع حالة الوحدة وسجل الإقلاع لتلك الوحدة وحالة النفق الحيّة:

systemctl status wg-quick@wg0
journalctl -u wg-quick@wg0 -b --no-pager | tail -40
wg show
ip -4 addr show dev wg0

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

ثلاث حالات تحدّد الإصلاح

قرّر هل تنظّف، أم تصلح في المكان، أم تزيل الوحدة من مسار الإقلاع، وقرّر ذلك قبل أن تكتب أي شيء.

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

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

نظّف قبل أن تعيد المحاولة

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

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

أثبت النفق لا الوحدة

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

أرسل طلبًا عبر النفق واقرأ الحالة التي أنتجته:

systemctl is-active wg-quick@wg0
wg show wg0 latest-handshakes
ping -c 3 10.63.0.1
resolvectl query internal.example.net

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

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