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

ping واحد، مسارات محتملة عدة

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

لهذا السبب لا يثبت تشخيص من البوابة إلا القليل. لفحص البوابة عنواناه ومنافذه، وبالتالي تجزئته الخاصة. قد يهبط على النفق السليم بينما يظل المستخدم يهبط على النفق المعطوب.

كيف تختار المنصة القفزة التالية

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

ip route get 10.20.5.7 from 10.20.0.14

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

ObservationLikely causeFirst check
Ping works, application failsA different flow hash selects another tunnelPer-flow lookup from the client's address
Some users fail, others do notOne tunnel lacks a prefix or selectorCompare both tunnels' installed routes
Fails only at larger sizesTunnels have different effective MTUProbe the same size over each path
Fails after a reconnectStateful asymmetry between pathsSession state on both gateways

تتبّع التدفق الفاشل، لا جدول المسارات

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

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

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

قارن مساراً واحداً في كل مرة

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

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

أخيراً، دوّن سبب اعتبار المسارات متكافئة وكيف يُفترض أن يزيل عطلٌ أحدها من الخدمة. التعددية آمنة فقط عندما تكون المسارات قابلة للتبادل فعلاً، وهذا تصريح تصميمي يستحق التحقق لا الافتراض.

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