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

ما الذي يحمله التدفق الخارجي، وما الذي يخفيه

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

لذلك يُظهر التقاط على واجهة WAN محادثة واحدة، لا ثلاثًا. ولا تظهر المنافذ الداخلية إلا بعد إزالة التغليف. ولهذا يمكن لفتحة جدار ناري واحدة أن تحمل SSH وHTTPS وDNS في الوقت نفسه.

# WAN side: one outer tuple, whatever the inner services are
tcpdump -ni wan0 'udp port 443'
# tunnel side: the inner tuples appear after decapsulation
tcpdump -ni tun0

تشرح توثيق TUN/TAP عملية التسليم حيث يمرر جهاز TUN الموجّه حزم IP بين النواة وعملية في مساحة المستخدم. وهذه العملية هي ما يجعل الترويسة الداخلية مرئية لشيفرة التوجيه والجدار الناري في البوابة. كما تشرح لماذا لا يقول المنفذ الخارجي شيئًا عن الخدمات المسموح بها.

إعادة توجيه NAT ملك للمستمع، لا للتطبيقات

تحتاج بوابة مستضافة ذاتيًا خلف NAT بقيمة IPv4 إلى ترجمة واردة واحدة: العنوان العام والمنفذ المعيّنان إلى مستمع VPN. ولا تُطلب أي قاعدة لـ SSH أو HTTPS أو DNS لمجرد أن مستخدمي النفق يصلون إليها. فنشر تلك المنافذ سيكشف خدمات يحميها النفق بالفعل. وقاعدة إعادة التوجيه تصف إمكانية الوصول إلى المستمع، لا إذنًا لأي شيء في الداخل.

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

السياسة الداخلية هي حيث يُحسم الوصول فعليًا

التشفير يحمي المسار؛ لكنه لا يصرّح بوجهة. اختيار مسارات العميل يحدد البادئات التي تدخل النفق، وسياسة إعادة التوجيه في البوابة تقرر ما إذا كان يمكن للحزم مغادرته، وجدار الحماية عند الوجهة مع تسجيل الدخول يقرران ما إذا كانت الخدمة تجيب. وDNS أوضح حالة: حمل الاستعلامات لا يجعل المُحلِّل يقبلها من مجموعة عملائك. كل طبقة تستطيع أن تقول لا باستقلال.

اختبر كل خدمة على حدة عبر النفق. البحث الناجح لا يقول شيئًا عن منفذ الويب، وطلب الويب الناجح لا يقول شيئًا عن SSH.

dig @10.40.0.53 app.corp.example
nc -vz 10.40.0.10 8443
ssh -p 2222 [email protected]

حين يكون النفق قائمًا ويفشل كل شيء، اقرأ جدول توجيه العميل أولًا. وحين تفشل خدمة واحدة بينما تعمل الأخريات، يكون الخلل عند تلك الوجهة. وهاتان الملاحظتان تشيران إلى جهات مختلفة، وخلط بينهما يهدر الوقت.

WireGuard يرسم الخط نفسه

يسمّي WireGuard مستمعه الخارجي بـ ListenPort ، ولا يزال التطبيق الداخلي يستخدم أي منفذ خدمة يحتاجه. AllowedIPs هو مجموعة من البادئات الموجّهة، لا قائمة بمنافذ الخدمات المسموح بها. وقراءته كقائمة سماح للمنافذ تنتج قواعد لا تطابق ما يفعله النفق. التسمية مختلفة؛ أما الطبقات فليست كذلك.

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

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

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