ارتباط IPsec التابع قائم لكن عدّادات الحزم تبقى صفرًا
بقاء عدّادات الحزم على الصفر في ارتباط تابع مثبَّت يعني عادةً أن شيئًا لم يطابقه. تتبَّع تدفقًا واحدًا مثبَّت المصدر عبر العدّادات والمسار والمحدِّدات والأصل.
رفعت النفق، ومؤقّت إعادة توليد المفاتيح يعدّ تنازليًا، وما زال الاتجاهان يقرآن صفر حزم. لا شيء في هذين الرقمين يقول إن الطرف الآخر رفض نفقك: ارتباط تابع مثبَّت بعدّادات خاملة هو الحالة الطبيعية لارتباط لم يطابقه شيء بعد. المطلوب إثبات أن حزمة كان يجب أن تطابق، ثم العثور على النقطة التي غادرت فيها المسار الذي تصفه المحدِّدات. افعل ذلك مرة واحدة بالترتيب، وأبقِ الطلب متطابقًا بين التشغيلات.
ما يثبته العدّاد الصفري فعلًا
ارتباط تابع هو زوج محدِّدات إضافة إلى المفاتيح وSPI التي تشفّر الحركة الواقعة داخل تلك النطاقات. تثبيت ارتباط يعني فقط أن الطرفين اتفقا على تلك النطاقات وعلى مفاتيح مشتقّة؛ وسيبقيه النواة ساعات دون أن تصل حزمة واحدة. لذا فالسؤال ليس أبدًا هل النفق موجود، بل هل وقعت أي حزمة أرسلها اختبارك داخل النطاقات التي تفاوض عليها الطرفان. إن لم يحدث ذلك، تبقى العدّادات صفرًا وينتهي الارتباط غير مستخدم عند نهاية عمره.
هذا التمييز يغيّر ما تفحصه أولًا. العرض المرفوض وفشل المصادقة وارتباط IKE المحتضر تظهر كلها في السجل أو في قائمة الارتباطات، لا كصفر صامت. أما النفق الذي يتفاوض بنظافة ثم يبقى خاملًا فيشير بدلًا من ذلك إلى المطابقة أو التوجيه أو أصل حركة الاختبار.
أرسل تدفقًا تستطيع وصفه قبل إرساله
اختر وجهة داخل الشبكة الفرعية المحمية وافتح اتصالًا جديدًا إليها؛ فصفحة حمّلتها قبل ساعة قد تُقدَّم من الذاكرة المؤقتة، والرد المخزَّن مؤقتًا لا يلمس النفق أبدًا. ثم اكتب أربع قيم بينما الطلب ما زال افتراضيًا: عنوان المصدر الذي سيربطه التطبيق، والوجهة، وعائلة العناوين، واسم الارتباط التابع الذي تراقبه أو زوج محدِّداته. هذا السجل هو ما يحوّل عدّادًا مسطّحًا إلى ادعاء قابل للاختبار.
عنوان المصدر هو القيمة التي يتخطاها الناس، وهو أكثر ما يُفسد الاختبار. فحاسوب محمول بعنوان سلكي وعنوان Wi-Fi وعنوان نفق يمكنه ربط أي منها بحسب بحث المسار، وربما واحد فقط منها يقع داخل النطاق المتفاوض عليه. استخدم أداة تتيح لك تثبيت المصدر، مثل ping -I 10.1.0.5 10.2.0.9 أو curl --interface 10.1.0.5، حتى لا تختار الحزمة عنوانًا آخر بهدوء. وعندما يحرّك التشغيل المثبَّت العدّادات بينما لا يفعل التشغيل غير المثبَّت، تكون قد وجدت مشكلة توجيه لا مشكلة IPsec.
أي الأرقام تقرأ، وأين تعيش
على Linux يطبع ip -s xfrm state كل ارتباط مع سطر lifetime current: يعود إجمالي بايتاته وإجمالي حزمه إلى ذلك الارتباط وحده، يتبعه سطر stats: لعدّادات الإعادة والأخطاء. وعلى طرف strongSwan يسرد swanctl --list-sas سطر in واحدًا وسطر out واحدًا لكل ارتباط تابع مثبَّت، وينتهي كل منهما بعدد بايتات وعدد حزم؛ وتسمّي أدوات stroke الأقدم الزوج نفسه bytes_i، وكذلك bytes_o. اقرأ الاتجاهين منفصلين، لأن الاتجاه الذي بقي مسطّحًا هو النتيجة. وجمعهما معًا يخفي بالضبط عدم التماثل الذي تبحث عنه.
المنظران خاصان بكل ارتباط، لذا تثبيت إعادة التوليد يثبّت زوج SPI جديدًا وتعود خط أساسك إلى الصفر دون أن يتعطل شيء. سجّل SPI الذي تراقبه قبل أن ينطلق مؤقّت إعادة التوليد، وإلا فستقارن ارتباطًا جديدًا برقم قديم. إن ارتفع الصادر بينما بقي الوارد مسطّحًا، فقد طابق المحدِّد ولم يعد الرد أبدًا، وهذا ينقل التحقيق إلى تمرير الطرف الآخر وسياسته الخاصة. وتغطي وثائق إعداد IKEv2 من strongSwan دورة حياة الارتباط التابع وتوقيت إعادة التوليد وراء هذه الأرقام.
نقطة المراقبة متغيّر منفصل عن أصل الحزمة. فإفراغ العتاد يمكن أن يزيد عدّادات الارتباط بينما لا يُظهر التقاط برمجي على الواجهة شيئًا، لأن الحزم المُفرَّغة تتجاوز الخطاف الذي يجلس عليه الالتقاط، وقد يختلف الوارد بالطريقة نفسها. وعندما يختلف الاثنان، استخدم العدّادات للإجابة عمّا إذا طابق شيء ما، والالتقاط للإجابة عن شكل الحزمة.
المسار والمحدِّدات وأين وُلدت الحزمة
قارن ثلاثة أشياء جنبًا إلى جنب: المسار الذي تختاره النواة لوجهتك، والسياسة التي توجّه الحركة إلى النفق، وزوج المحدِّدات الذي تفاوض عليه الارتباط التابع. يسمّي ip route get 10.2.0.9 from 10.1.0.5 الواجهة والمصدر اللذين ستستخدمهما النواة، وهما غالبًا ليسا الزوج الذي افترضته. ويُظهر ip xfrm policy القوالب والمحدِّدات المثبَّتة محليًا، بينما يُظهر swanctl --list-sas ما اتفق عليه الطرف الآخر. والبحث الذي يرسل الحزمة خارج الواجهة الفعلية لا يصل إلى السياسة إطلاقًا، لذا لا تستطيع العدّادات أن تتحرك.
تأتي حالات عدم التطابق بأشكال عدة تبدو متطابقة من منظور العدّاد. فوجهة IPv6 خارج محدِّد IPv4، وعنوان مصدر من شبكة فرعية خاطئة، وسياسة أضيق من الارتباط التابع، كلها تنتج الصفر نفسه. أصلح أضيق سبب أولًا، لأن توسيع محدِّد فقط لتحريك رقم يغيّر ما يحميه النفق.
ثم هناك أصل الحزمة، وهو الفخ الذي تنصبه البوابة لمشغّلها. فالحركة التي تولّدها البوابة نفسها تُطابَق بسياسة الخروج، بينما تُطابَق الحزمة التي تمرّرها لعميل بسياسة التمرير، لذا قد ينجح ping من الجهاز على مسار لا يسلكه أي عميل.
تغيير واحد قابل للتراجع وتقرير يصمد أمام المراجعة
غيّر عنصرًا واحدًا، وأعد الطلب المطابق نفسه، واقرأ العدّادات نفسها. فمسح كل قاعدة جدار حماية أو استبدال كل المحدِّدات دفعة واحدة سيحرّك رقمًا ويدمّر الدليل الذي أخبرك بالسبب. وإن أظهر التشغيل الثاني صفرًا أيضًا، فأنت قد استبعدت فرضية بدلًا من إهدار العصر.
اكتب النتيجة بصيغة يستطيع شخص آخر إعادة إنتاجها: اسم الارتباط التابع، والنطاقات المقبولة، والمصدر الذي ثبّتته، والوجهة التي اختبرتها، والاتجاه الذي بقي على الصفر، وSPI الذي كنت تقرأه. تلك الجملة تفصل بين ارتباط لم يستخدمه أحد وتطبيق بعيد استقبل الحركة ورفضها. أرجِع التغيير عندما لم يحرّك العدّادات، واحفظ السجل؛ فالشخص التالي يبدأ حيث توقفت. لم يحتج شيء في النفق إلى إعادة بناء لأي من ذلك، وهذا هو المقصود من فحص المطابقة قبل لمس الإعدادات.