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

رقمان، كائنان

ينتمي MTU إلى وصلة أو واجهة: فهو أكبر حزمة يمكن تمريرها دون تجزئة. وينتمي MSS إلى TCP: فهو أكبر قدر من حمولة TCP يمكن أن يحمله مقطع، وهو يستثني ترويستي TCP وIP معاً. على وصلة Ethernet عادية تعمل بـIPv4، يعطي MTU بحجم 1500 بايت قيمة MSS المعروفة 1460 بايت. يصف هذان الرقمان طبقتين مختلفتين ويُتبادلان بآليتين مختلفتين. والخلط بينهما سهل لأن كليهما يُقاس بالبايت وكليهما قريب من 1500.

يصل أحدهما كإعداد واجهة. ويصل الآخر كخيار داخل مقطع SYN، يُتفاوض عليه بين طرفين لا يريان واجهتك أبداً.

أين تقع الحمولة الإضافية الخارجية

يضع VPN الحزمة الداخلية داخل حزمة أخرى، ويجب أن تناسب الحزمة الخارجية المسار الفيزيائي. ترويسات التغليف، وترويسة IP الخارجية، وترويسة النقل، وأي وسم توثيق، كلها تستهلك بايتات لا تستطيع الحزمة الداخلية استخدامها. اترك واجهة النفق على 1500 وستتجاوز الحزمة الخارجية بانتظام ما يمكن للمسار حمله. مع تعيين بت 'عدم التجزئة'، يُسقطها الموجّه ويُفترض أن يرسل خطأ ICMP؛ وإذا تمت تصفية ذلك الخطأ، فلن يعلم المرسل أبداً.

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

ضبط MSS، وأين ينطبق

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

التأثير يقتصر على TCP. تطبيق UDP وجلسة QUIC وأي بروتوكول يبني مخططات بياناته الخاصة لا يتأثر به.

شخّص بمسار ثابت

احتفظ بمتغير واحد في كل مرة. اختبر بحزمة تختار حجمها بنفسك، وعيّن علامة 'عدم التجزئة' حتى تُبلّغ النواة بالنتيجة بدلاً من إخفائها.

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

ما لا يصلحه كل تغيير

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

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

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