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

التحميل ليس اتصالًا

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

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

الخطأ المعاكس شائع بالقدر نفسه. غياب الملف يدفع الناس للبحث عن خلل في الشبكة بينما لم يُحمَّل الإعداد قط. سمِّ الكائن ثم نفّذ الأمر الذي يراقبه.

ثلاثة كائنات، ثلاث ملاحظات

يحتفظ strongSwan بتعريف محمّل، وSA خاصة بـ IKE، وSA خاصة بـ CHILD. الأول إعداد، والثاني علاقة تحكم موثَّقة، والثالث حماية متفاوض عليها لحركة المرور المختارة. بل إن لها أسماء منفصلة، فيمكن لملف باسم hq أن يملك child باسم hq-lan.

يربط الجدول كل طبقة بالأمر الذي يعرضها. اقرأ الصف قبل قراءة السجل.

LayerWhat it containsCommand
DefinitionPeer addresses, credentials, proposals, and traffic selectorsswanctl --list-conns
IKE SAOne authenticated control channel to the peerswanctl --list-sas
CHILD SAKeys and selectors for the traffic being protectedChild rows under the IKE SA

طلب الـ child يبني أولًا SA الأب الخاصة بـ IKE عندما لا توجد أي منها. طلب SA الخاصة بـ IKE وحدها نداء مختلف. قناة تحكم تُوثّق بشكل صحيح لا تضمن الـ child الذي طلبته.

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

اختر إجراء البدء بوعي

في swanctl.conf، يحدد start_action الخاص بـ child السلوك بعد التحميل. القيمة الافتراضية none تترك التعريف للبدء اليدوي أو للاستخدام كـ responder. يبدأ start الاتصال، بينما يترك trap سياسة تتفاوض بمجرد ظهور حركة مرور مطابقة.

لذا فإن «التحميل لا يبدأ نفقًا أبدًا» و«التحميل يبدأ نفقًا دائمًا» كلاهما خطأ. الإجراء جزء من الملف وينبغي أن يطابق دور النظير. بوابتان تنتظران كلتاهما الطرف الآخر تنتجان صمتًا لا نفقًا.

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

الاستعادة سياسة منفصلة

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

نفق يرتفع عند الإقلاع ويموت بعد ساعة هو مسألة استعادة. أدت سياسة البدء عملها ثم لم تعد تهم. انظر إلى إعدادات DPD وتجديد المفاتيح قبل إلقاء اللوم على التفاوض الأولي.

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

تحقق مما هو موجود قبل تصحيح التوجيه

نفّذ الملاحظات الثلاث بالترتيب: التعريفات المحمّلة، وSA النشطة الخاصة بـ IKE، ومدخلات الـ child. كل جواب يضيّق السؤال التالي. تخطَّ خطوة وستنتهي بتصحيح طبقة لم تُبنَ قط.

ابدأ بما هو محمّل وبما هو قائم فعليًا:

swanctl --list-conns
swanctl --list-sas

إذا غاب الـ child بينما الملف صحيح، فابدأه باسمه وراقب ما يحدث. عادةً ما يخبر المخرجات هل صعد الأب أولًا.

swanctl --initiate --child hq-lan

SA النشطة الخاصة بـ CHILD ليست خط النهاية. لا تزال قواعد التمرير والمسارات وتفويض التطبيق نفسه بحاجة إلى التوافق. تجيب دورة الحياة عما فُوّض به؛ ولا يمكنها أن تقرر من يحق له استخدام الخدمة.

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