L2TP/IPsec عبر NAT: ما الذي ينكسر فعلاً ولماذا
نقل NAT يضع ESP داخل UDP، وكل من التعيين والجدار الناري ومشغّل الشبكة يفشل بطريقة مختلفة. حدّد المرحلة قبل أن تلوم العميل.
الادعاء بأن NAT يكسر L2TP/IPsec نصف صحيح، ولذلك هو عديم الفائدة. ترجمة العناوين أمر طبيعي، واجتياز NAT موجود تحديداً للنجاة منها، وملايين العملاء يتصلون من خلف موجّه يومياً. الذي ينكسر هو مرحلة محددة من تبادل محدد: إما أن IKE لا يتلقى أي جواب، أو يُسقط النفق المغلف بسياسة لا تسمح إلا ببروتوكول واحد، أو ينتهي تعيين الترجمة بينما النفق خامل. بمجرد أن تعرف المرحلة التي أنت فيها، يكون الإصلاح عادةً قاعدة واحدة أو حزمة إبقاء بدلاً من تصميم VPN جديد.
الخرافة هي السؤال الخاطئ
السؤال المفيد ليس «هل يكسر NAT هذا» بل «أي جزء من التبادل تتم ترجمته، وماذا يفعل الجهاز الذي يقوم بالترجمة به». بروتوكول L2TP/IPsec طبقي: يتفاوض IKE، ويحمي ESP، و L2TP يحمل PPP داخل تلك الحماية. تتفاعل ترجمة العناوين مع كل طبقة بشكل مختلف، ويمكن تمييز بصمات الفشل إذا نظرت إلى مرحلة التفاوض بدلاً من مربع حوار الخطأ.
الموجّه الذي يتصفح الويب بنجاح يثبت فقط أن TCP مع ترجمة منفذ المصدر يعمل. لا يقول شيئاً عن UDP 500 أو UDP 4500 أو البروتوكول 50، وهذه هي الأشياء الثلاثة التي يعتمد عليها هذا النشر.
المرحلة 1: يجب أن يحصل IKE على جواب أصلاً
يذهب التبادل الأول إلى المستجيب على UDP 500. إذا لم يعد أي رد، فلا شيء آخر يهم: المفتاح المشترك مسبقاً والاقتراح وبيانات الاعتماد كلها تبقى بلا قراءة. راقب الطلب والاستجابة بدلاً من الاستنتاج من مهلة العميل:
sudo tcpdump -n -i any 'udp port 500 or udp port 4500 or proto 50'
swanctl --list-sas
الطلب بلا استجابة يعني عادة أن جدار حماية أو مشغّل الشبكة في المنبع يُسقط الحزمة، لا أن الخادم رفضها. الاستجابة التي تحمل حزمة إشعار تذكر اقتراحاً أو مشكلة شهادة تعني أن الحزم وصلت وأن التفاوض فشل بسبب المحتوى، وهذا إصلاح مختلف تماماً.
عندما يكون الطرفان خلف ترجمة، لا يحتاج المبادر إلا إلى الوصول إلى المستجيب، لذا تعمل معظم عمليات النشر من جانب العميل بدءاً من المرحلة 1. استضافة الخادم هي المكان الذي تبدأ فيه مشكلة الوارد، وهي السبب في أن الحالتين لا ينبغي مناقشتهما كحالة واحدة.
المرحلة 2: التغليف يغيّر ما يراه الجدار الناري
ESP بروتوكول IP وليس منفذ TCP أو UDP، وترجمة عناوين المنافذ العادية ليس فيها حقل منفذ لإعادة كتابته. لهذا ينقل اجتياز NAT الحمل المحمي إلى UDP 4500: التغليف يمنح الجهاز المترجم شيئاً يعرف كيف يترجمه. بمجرد حدوث ذلك، فإن قاعدة جدار ناري كُتبت لـ UDP 500 فقط تسمح بالتفاوض وتُسقط النفق، ما ينتج النتيجة المربكة حيث يُظهر السجل نجاح المرحلة 1 ولا يُظهر أي حركة.
يمكن لتبادل IKE نفسه أن ينتقل أيضاً إلى UDP 4500 بعد اكتشاف NAT، وهو ما يفاجئ من سمحوا بـ 500 فقط. اسمح بالمنفذين في الاتجاهين على المسار، وتذكّر أن جدار الحماية ذا الحالة قد يبقي التدفق فقط ما دام يرى حركة.
لا يزال البروتوكول 50 مهماً على المسارات بلا ترجمة، وعلى المسارات حيث يُكوَّن صندوق وسيط للسماح به. إذا كنت تشخّص بالإقصاء، فعطّل الفرضية بدلاً من إضافة قواعد بالجملة: اسمح بـ 500 و4500 وESP، وتأكد من صعود النفق، ثم أزل ما تبيّن أنه غير ضروري. القاعدة التي لا يستطيع أحد تفسيرها هي قاعدة لن يزيلها أحد عندما تصبح سبب الانقطاع التالي. اكتب التضييق في سجل التغيير مع المرحلة التي أصلحها، حتى يبدأ المهندس التالي من دليلك بدلاً من قاعدة الإبهام نفسها.
المرحلة 3: ينتهي التعيين ويموت النفق
يحتفظ الجهاز المترجم بحالة للتدفقات التي يمررها، ولهذه الحالة عمر. نفق L2TP/IPsec يحمل حركة قليلة عندما لا يستخدمه أحد، لذا يمكن لنفق خامل أن يعيش أطول من تعيينه ويتوقف عن تلقي حركة العودة. يبقى العميل مقتنعاً بأنه متصل، ولا يرى الخادم شيئاً، وأول عرض عادةً هو مهلة تطبيق لا خطأ VPN.
كشف الطرف الميت وحزم إبقاء NAT موجودة لهذا، ويجب أن يكون الطرفان مستعدين لإرسالها. إذا كان خادمك خلف ترجمة، فالمطلب على جانب Windows هو إعداد تسجيل موثّق يجعل الخادم يفترض تغليف UDP لحزمه الصادرة؛ وبدونه يرسل المستجيب ESP لا يستطيع الجهاز المترجم إعادة تعيينه. هذه مسألة تكوين خادم لا عميل.
تغيير عنوان WAN ينتج النتيجة نفسها من اتجاه مختلف: يُعاد بناء التعيين حول عنوان جديد، ويصبح اقتران الأمان القديم موجهاً إلى مجموعة لم تعد موجودة. سلوك إعادة الاتصال يخص تنفيذ العميل، ولهذا يعمل «أعد الاتصال بعد إعادة تشغيل الموجّه» على عميل ويحتاج إلى تبديل يدوي على آخر.
الاستضافة خلف NAT على مستوى المشغّل مشكلة مختلفة
إذا أردت استضافة خادم L2TP/IPsec في المنزل والوصول إليه من الخارج، فالمطلب هو قابلية وصول واردة غير مطلوبة، وهذا ليس ما يقدمه اجتياز NAT. وجود NAT على مستوى المشغّل أمام موجّهك يعني أنه لا يوجد منفذ يمكنك تمريره سيجعلك قابلاً للوصول، لأن العنوان العام مشترك والتعيين صادر فقط.
لا مربع اختيار لتمرير IPsec يغيّر ذلك، ولا أي قدر من تكوين العميل يعوّض عنه. الأجوبة المدعومة هي عنوان قابل للوصول فعلاً، أو نقطة نهاية مستضافة، أو هندسة يقوم فيها كل مشارك باتصال صادر. أما مواصفة تغليف UDP فتحل مشكلة الترجمة للتدفقات الموجودة؛ وهي لا تنشئ مساراً وارداً حيث لا يقدم المشغّل واحداً.
لذا قارن الشبكات بدلاً من التخمين. خذ الجهاز نفسه والملف نفسه إلى شبكة مسموحة أخرى وراقب أي مرحلة تفشل هناك. إذا عمل في مكان آخر، فالفرق في المسار، وهذا يضيّق البحث إلى المراحل الثلاث أعلاه بدلاً من التكوين بأكمله.