VPN خلف NAT لا يمكنك تهيئته: ما الذي يظل يعمل
من دون تحويل منفذ، لا مكان تذهب إليه الحزمة الواردة. ثقب UDP وUPnP والمرحّلات تغيّر ذلك، لكن فقط في ظل سلوك NAT محدد.
كل نقطة نهاية للنفق تحتاج إلى عنوان ومنفذ يستطيع الطرف الآخر الوصول إليهما، والموجّه الذي لا تديره هو السبب المعتاد في فشل هذا الشرط. الجزء المثير للاهتمام ليس وجود الحيل، بل أن كل حيلة تعتمد على خاصية في جدول تعيين لا تراه من جهة العميل. خاصيتان من تلك الخصائص تحكمان في كل شيء تقريبًا: كيف يُنشأ التعيين، وهل يقبل حزمًا من عنوان لم يتصل به الداخل قط. صنّف البيئة بحسب هاتين الخاصيتين، وتكفّ الحلول الالتفافية عن أن تكون حكايات شعبية.
جدول التعيين يحكم كل شيء
يحتفظ ترجمة عنوان الشبكة بجدول يُسجَّل فيه عنوان داخلي ومنفذ مقابل عنوان عام ومنفذ. الردود المطابقة لسجل تُترجم عكسيًا، والحزمة القادمة من الخارج بلا سجل مطابق ليست لها وجهة على الإطلاق. هذا السلوك الواحد يفسّر لماذا يكون مستمع خلف الموجّه غير قابل للوصول من الإنترنت. ويفسّر أيضًا لماذا يجب أن تنشأ الحزمة الأولى في كل اتجاه من الداخل.
انظر إلى الجدول من جهة الموجّه تصبح الحلول واضحة: إما أن شيئًا ينشئ سجلًا دائمًا، أو ينشئ سجلًا مؤقتًا ويبقيه طازجًا، أو أن الحركة لا تسلك ذلك المسار أصلًا. بقية هذا المقال هي تلك الحالات الثلاث بالترتيب. لا شيء هنا يعتمد على ميزة من مورّد تتجاوز ما يسجله الجدول.
ما تستطيعه خدمة اللقاء وما لا تستطيعه
يستخدم ثقب UDP السجل الصادر كفتحة مؤقتة بدلًا من إبطال المرشّح. يتصل النظيران بخدمة لقاء، تتعلم عنوان كل نقطة نهاية عامة وتُبلغ كل طرف بعنوان الطرف الآخر. ثم يرسل الاثنان أحدهما نحو الآخر، وكل حزمة صادرة تنشئ السجل الذي يسمح بدخول الرد أو تحدّثه. الترتيب هو ما يجعله يعمل، والترتيب نفسه هو ما يجعله هشًا: النظير الذي يرسل قبل أن ينشئ الطرف الآخر سجله يُسقَط ببساطة، بينما تنجح إعادة المحاولة بعد لحظة. الخدمة نفسها لا تحمل حركة VPN، لذا فإن نفوذها الوحيد هو التوقيت الذي تنسّقه.
سلوك التعيين يحدد الباقي، و RFC 4787 يسمّي الأشكال الثلاثة: مستقل عن نقطة النهاية، ومعتمد على العنوان، ومعتمد على العنوان والمنفذ. في الأخير منها يتغير المنفذ الذي يجب أن يستهدفه النظير مع كل وجهة، فيتوقف التنبؤ عن أن يكون موثوقًا. هنا تصل التقنية إلى طرق مسدودة، لأن NAT من فئة المشغّل وجدار حماية مؤسسي صارم يزيلان معًا القدرة على التنبؤ التي يحتاجها المخطط، ولا تعيدها أي كمية من إعادة المحاولة.
إشارات الإبقاء وإعادة التشغيل ونقطة النهاية التي تتحرك
المسار المثقوب تدفق لا مستمع، لذا ما يجري فوقه يجب أن يصمد أمام التغيير. عليه أن يبقي التعيين حيًا بحركة دورية، ويلاحظ متى تتحرك نقطة النهاية العامة، ويعيد التأسيس بعد إعادة تشغيل الموجّه أو إعادة تعيين العنوان. منتجات VPN الشبكية تضع ذلك المنطق في مستوى التحكم الخاص بها، أما الخادم العادي فيتركه لك. إشارات الإبقاء تساعد فقط ما دام التعيين نفسه صامدًا، وهي تستهلك البطارية على عميل محمول، ولهذا فإن الفاصل العدواني ليس مجانيًا.
الحاسوب المحمول الذي ينام ساعة يعود عادة على نقطة نهاية عامة مختلفة. وما يعيد تأسيس المسار عليه أن يعمل مجددًا من الداخل، وهو ما يعيد الشرط نفسه على العميل.
ثلاث طرق حول تحويل مفقود
الطريقة الأولى تطلب من الموجّه إنشاء السجل بنفسه، عبر UPnP IGD أو NAT-PMP أو PCP، عندما تكون الميزة موجودة ومشغّلة. الثانية تسلّم الحركة إلى مرحّل بعنوان عام، وهذا يعمل دائمًا ويكلّف دائمًا عرض النطاق بالإضافة إلى حدود ثقة مختلفة. الثالثة تعكس الاتجاه: يفتح المضيف الداخلي نفقًا صادرًا إلى خادم عام وكل شيء آخر يركب داخله.
[Peer]
PublicKey = 6yGj3kQ2wVb8sTn1pLx4dRc7hZa9mKf2uYe5oNq0iXw=
Endpoint = relay.corp.internal:51820
PersistentKeepalive = 25
AllowedIPs = 10.44.0.0/24
نقطة نهاية المرحّل تجعل تلك المقايضة مرئية في تهيئة العميل، حيث تكون نقطة النهاية مرحّلًا لا عنوان النظير نفسه. الإبقاء الدائم يبقي التعيين دافئًا، والبادئات المسموح بها تحدد ما يجوز للعميل إرساله عبرها. نفق عكسي من المضيف الداخلي هو الفكرة نفسها بمالك مختلف، ولا يحتاج إلى أي تغيير في NAT. كل واحدة من الثلاث تزيل شرط الدخول من دون إبطال جدار حماية يحجب الحركة غير المطلوبة بالتصميم، لأن الحركة ما زالت تبدأ من الداخل.
طابق الحل الالتفافي مع من يملك الموجّه
إن كنت تدير الموجّه، فإن تحويل UDP ساكن أسهل في التدقيق من أي مخطط ثقب ويفشل بطرق تراها. وإن لم تكن، فاعرف هل يقدم المورّد مرحّلًا أو مستوى تحكم مستضافًا، وهل تسمح السياسة باستخدامه. وإن لم يتوفر أي منهما، فالخيارات المتبقية نفق عكسي أو قبول أن نقطة النهاية غير قابلة للوصول من الخارج. تسجيل أي خيار استخدمت أهم مما يبدو، لأن الخيارات تختلف في من يستطيع مراقبة الحركة وما يحدث عندما يغيّر طرف ثالث شيئًا.
لاحظ هل كان المسار الذي انتهيت إليه مباشرًا أم عبر مرحّل، لأن هذه الحقيقة الواحدة تتنبأ بكل من زمن الوصول وسلوك الفشل. يبقى RFC 4787 المرجع لسلوك التعيين تحت كل ذلك، وقراءة قسم التعيين فيه أسرع من اختبار ثلاثة حلول بالترتيب. الجدول لا يبالي أي خيار اخترت؛ إنه يسجل فقط ما يُسمح للحزمة التالية بفعله.