تغيّر عنوان النظير في منتصف الجلسة: ما الذي يفعله خيار float في OpenVPN
يسمح float للنظير الموثَّق بتغيير عنوانه الخارجي في منتصف الجلسة. وهو لا يكتشف نقاط النهاية، ولا يعيد فتح رابط ميت، ولا يتخطى فحوص الهوية.
ينتقل الحاسوب المحمول من شبكة Wi-Fi المكتبية إلى نقطة اتصال هاتفية، فيبقى النفق قائماً بضع ثوانٍ أخرى، ثم يتوقف المرور بينما تظل الواجهة تدّعي أنها متصلة. وعلى الخادم، تظل قائمة الحالة تعرض العنوان العام القديم. هذه هي الحالة التي وُجد float من أجلها، وهي أيضاً الحالة التي يتوقع فيها الناس منه أن يفعل أكثر بكثير مما يفعل. وضبط الحدود بدقة يحوّل تعطلاً محيراً إما إلى تغيير إعداد من سطر واحد أو إلى تحقيق مختلف تماماً.
ما الذي يخففه float، وما الذي لا يخففه أبداً
عادةً تستمر الجلسة في التحدث إلى العنوان الخارجي والمنفذ اللذين بدأت بهما، وتُهمل الحزم القادمة من أي مكان آخر. ويُزيل خيار float ذلك الارتباط الصارم بمجرد أن يثبت النظير نفسه، بحيث يمكن لتخطيط مصدر متغير أن يواصل الجلسة نفسها بدل أن تُسقط. ولا شيء في الفحوص التشفيرية يتغير: المفاتيح والشهادات وأي حماية HMAC تبقى كما ضُبطت تماماً.
هذا قرار لكل حزمة، وليس سياسة بشأن من يحق له الاتصال. فالآلة المجهولة التي ترسل حزمة من عنوان جديد لم تثبت شيئاً، وتُهمل حزمتها كأي مرور غير موثق آخر. ولا يمكن إلا للمرور الذي يجتاز مصادقة الجلسة نفسها أن يحرّك عنوان النظير المسجَّل، ولهذا من الآمن إبقاء float مفعلاً في البيئات التي يتنقل فيها العملاء.
وهو لا يقول شيئاً عن النفق الداخلي أيضاً. فعنوان خارجي منتقل لا يعيد تعيين عنوان نفق، ولا يغيّر التجمع، ولا يمنح النظير وصولاً إلى شيء جديد. وداخل النفق تسري الهوية نفسها والمسارات المدفوعة نفسها قبل الانتقال وبعده. كما أن التجوال لا يعيد التفاوض على قناة البيانات، فالتشفير والمفاتيح المتفاوض عليهما يستمران.
الحزمة التي تحرّك الجلسة يجب أن تُوثَّق
ابدأ جلسة بالطريقة المعتادة تجاه الطرف البعيد المضبوط، وسيتولى float ما يحدث عندما يتغير التخطيط. فمشغل الهاتف الذي يعيد ترقيم التدفق، أو بوابة NAT التي تعيد كتابة تخطيط منفذها، أو حاسوب محمول يبدّل وصلة الرفع، كلها تنتج الشكل نفسه: حزم موثقة من مجموعة جديدة، تصل إلى جلسة ما زالت تؤمن بالقديمة.
وحين يُسأل عما إذا كان float يعمل، فالدليل المفيد هو مصافحة مكتملة يتبعها تغيّر مصدر قُبل، وليس سطر سجل عن العنوان وحده. اربط العنوانين الخارجيين القديم والجديد بالجلسة التي بقيت حية، ثم أكّد أن المرور استمر فعلاً عبر النفق.
وإذا ماتت الجلسة بدل أن تنتقل، فالحزمة التي وصلت من العنوان الجديد على الأرجح فشلت في المصادقة أو لم تصل إطلاقاً. والحالتان تبدوان متطابقتين من جهة العميل. وعلى الخادم، يخبرك التقاط على الواجهة العامة أيهما لديك قبل أن تمس أي إعداد.
الاكتشاف آلية منفصلة تماماً
لا يحل float الأسماء على مؤقت ولا يتتبع سجل DNS ديناميكي. فإذا بدأ اسم مضيف الخادم في التحلل إلى عنوان جديد، فلا سبب لدى عميل خامل ليلاحظ ذلك، ولا حزمة من نقطة النهاية الجديدة ليصادقها. وتلك المشكلة تنتمي إلى منطق إعادة الاتصال، وإلى سلوك إعادة المحاولة لدى العميل، وإلى DNS، لا إلى float.
وإضافة الخيار مرة أخرى لا تعوّض غياب مسار إلى العنوان الجديد. ولا تساعد عندما يكون النظير صامتاً، لأن النظير الصامت لا يرسل أبداً الحزمة الموثقة التي قد تحرّك شيئاً.
ولجدار الحماية التحتي صوت أيضاً. فالقاعدة التي تسمح بنقطة النهاية الخارجية القديمة فقط تحجب العنوان المتغيّر قبل أن تراه OpenVPN، ولا يصلح ذلك أي قدر من إعداد العميل. راجع دورة حياة العناوين المسموح بها كمهمة مستقلة؛ وتوسيع القاعدة لتشمل أي مصدر يقايض مشكلة صغيرة بمشكلة كبيرة.
عندما يملك NetworkManager الملف الشخصي
الملف الشخصي على سطر الأوامر والاتصال المستورد إعدادان منفصلان، وتحرير أحدهما لا يمس الآخر. وقبل أن تفترض أن الخيار غير مدعوم، حدّد نوع الملحق الذي يستخدمه الملف المحفوظ فعلاً وأين تعيش قيمه. ومعرّف الملف الشخصي UUID هو المعرّف المهم عندما تفحص أو تعدّل أي شيء.
افحص الاتصال المحفوظ لا ملف الاستيراد الأصلي. فسطر يبقى في ملف .ovpn لا يثبت شيئاً إذا لم يطبقه المدير النشط قط، ومحرر بلا مربع اختيار لخيار معين لا يثبت شيئاً عن قدرات البروتوكول أيضاً.
لا ترقّع ملحقاً معبأً لإضافة السلوك، وخصوصاً لا بترقيع كُتب لإصدار تاريخي من مكوّن لا علاقة له. وإذا كان التكامل المثبت لا يستطيع فعلاً التعبير عن الإعداد، فالخطوة الصحيحة هي ملف شخصي مدعوم أو مسار عميل آخر يوافق عليه من يملك النشر.
أثبت الانتقال بدل أن تفترضه
شغّل الاختبار بالطريقة التي يحدث بها الفشل. اتصل، وتحقّق من المرور عبر النفق، وافرض تغيّر العنوان الخارجي، ثم افحص ثلاثة أمور: أن الجلسة ما زالت موجودة، وأن عنوان النظير المسجل قد تحرّك، وأن طلباً حقيقياً ما زال يصل إلى وجهته. وأي شيء أقل من الثلاثة هو جواب جزئي.
أبقِ وصول الاسترداد متاحاً أثناء الاختبار، لأن تجارب التجوال اعتادت أن تترك الجهاز الذي تعمل منه عالقاً. فوحدة تحكم تسلسلية أو مسار خارج النطاق يحوّل اختباراً فاشلاً إلى استرداد في خمس دقائق بدل زيارة للموقع.
وأخيراً، صِف الحالة التي مارستها فقط. فتغيّر عنوان ناجح أثناء جلسة ليس دليلاً على أن ترحيلات DNS، أو تنفيذ عميل مختلف، أو ملفاً شخصياً أعيد بناؤه ستتصرف بالطريقة نفسها. و وثائق link-options تحدد نطاق الخيار بدقة؛ ويجب أن يحدد سجل اختبارك أي جزء من ذلك النطاق غطيته فعلاً.