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

ملاحظتان، وحكمان منفصلان

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

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

ابنِ مسباراً قابلاً للتوقيت

استخدم طلباً غير ضار ورخيص ومستقل عن قناة التحكم الخاصة بالنفق. تُطبع الحلقة أدناه طابعاً زمنياً وحالة HTTP والزمن المنقضي مرة كل ثانية، وتفشل بصوت عالٍ بدل أن تتعطل:

while true; do
  printf '%s ' "$(date +%H:%M:%S)"
  curl -sS -o /dev/null -w '%{http_code} %{time_total}\n' --max-time 2 https://example.com || echo "curl-exit-$?"
  sleep 1
done

اقرأ رموز خروج curl لا الحالة وحدها. الرمز 28 يعني أن الطلب انتهت مهلته، وهذا ما يبدو عليه مسار محظور. والرمز 6 يعني فشل تحليل الأسماء، وهو نتيجة مختلفة وغالباً الأكثر إثارة للاهتمام. أما 200 مع زمن منقضٍ صغير خلال الفجوة فيعني أن الحركة سُمح لها بالخروج.

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

أحدث فشلاً حقيقياً لا فشلاً مرتباً

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

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

اقرأ السجل لتعرف شكل الحركة غير المحجوبة

استجابة 200 أو فشل اتصال سريع خلال الفجوة تسرّب، أياً كان اتجاهه. أما انتهاء المهل طوال الفجوة فهو الشكل المتوقع لسياسة حظر. ونجاح تحليل الأسماء مع فشل الاتصالات يوحي بأن المُحلِّل لا يزال قابلاً للوصول، وهو تسرّب من نوع آخر.

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

ss -tunp | grep -E 'ESTAB|SYN-SENT'
ip route get 198.51.100.7
resolvectl status | sed -n '1,20p'

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

سجّل النتيجة بشكل يصمد أمام تحديث

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

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

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