VPN على الموجّه أم إعادة توجيه المنفذ: أيّهما يفوز؟
قد تسرق إعادة توجيه المنفذ المنفذَ من مستمع VPN على الموجّه. تحقّق من مالك الوجهة، واحذف التعيين المتعارض فقط، واختبر كل عائلة عنوانين على حدة.
ينهي الموجّه اتصال VPN بنفسه، وما تزال قاعدة إعادة توجيه قديمة ترسل منفذ UDP نفسه إلى جهاز على الشبكة المحلية. واحد فقط من هذين يمكن أن يكون نقطة النهاية الحقيقية، والنواة لا تفصل بينهما. تُعيد ترجمة الوجهة كتابة الحزمة قبل الرجوع إلى الخدمة المحلية، لذلك ينتظر عمل VPN حركةً أُرسلت إلى مكان آخر بالفعل. المهمة هي تحديد مَن يملك المنفذ، ثم جعل القواعد تتفق.
منفذ واحد، ومالكان مُدَّعيان
يحتاج خادم VPN الذي يعمل داخل الموجّه إلى إذن وارد يؤدّي إلى مقبسه الخاص. أما إدخال NAT للوجهة على المنفذ نفسه فيؤدّي إلى مكان آخر تماماً: عنوان محلي وقرار إعادة توجيه. هاتان نقطتا نهاية مختلفتان بسجلات مختلفة وأنماط فشل مختلفة. الدليل المعتاد هو أن عائلة عنوانين تعمل والأخرى لا تعمل، لأن الإدخال المتبقي كُتب لعائلة واحدة ولم يُراجَع أبداً.
دوّن الادعاء قبل التحرير: العائلة، والعنوان الخارجي، والنقل، والمنفذ، والهدف المترجَم.
ترجمة الوجهة تجري قبل الفحص المحلي
تغيّر NAT الوجهة هدف الحزمة في مرحلة ما قبل التوجيه، قبل أن تختار النواة بين التسليم المحلي وإعادة التوجيه. وبمجرّد أن يصبح الهدف مضيفاً محلياً، تسلك الحزمة مسار إعادة التوجيه. ولا يُرجَع أبداً إلى قواعد الإدخال الخاصة بمقبس الموجّه نفسه، ولهذا يبقى سجل VPN فارغاً بينما ينتهي وقت العميل.
Intended local entry:
WAN UDP 1194 -> router local socket -> input path
Conflicting old entry:
WAN UDP 1194 -> DNAT 192.168.50.10:1194 -> forward path
هذا الترتيب هو الآلية كلها، وتخفيه واجهات الأجهزة خلف مربّعات اختيار دون أن تغيّره. وما يزال مالك الوجهة هو من يقرّر المسار الذي تسلكه الحزمة.
إذا كان المضيف المحلي هو نقطة النهاية المقصودة، فإعادة التوجيه صحيحة، ولا ينبغي أن يستمع الموجّه إلى المنفذ نفسه أيضاً.
أبقِ تعييناً واحداً واحذف الآخر
اسرد إدخالات NAT لذلك المنفذ والعائلة واختر الناجي:
sudo iptables -t nat -S | grep 1194
sudo ss -lunp | grep :1194
إدخال TCP بالرقم نفسه لا علاقة له بفشل UDP، ومعاملتهما ككائن واحد تؤدّي إلى حذف القاعدة الخطأ. وعندما ينبغي أن يفوز المقبس المحلي، يحذف مالك التعيين المتعارض ذلك الإدخال الواحد أو يعيد كتابته، ويبقى الإذن الوارد لمنفذ الموجّه نفسه في مكانه. وينبغي أن تنجو من التغيير كل إعادات التوجيه غير ذات الصلة ومسار الإدارة ونسخة من مجموعة القواعد.
إذا كان VPN يقيم على مضيف منفصل، فإعادة التوجيه هي الكائن الصحيح. قد تحتاج خدمة في حاوية أو آلة افتراضية إلى منفذ منشور حتى لو كان الصندوق يُسمّى الموجّه، لذا تتبّع المقبس وفضاء أسمائه لا اللصاقة على العلبة.
تأكّد من المالك من الخارج
اختبر كل عائلة على حدة، لأن اتصال IPv6 ينتهي على الموجّه لا يقول شيئاً عن اتصال IPv4 تعيد قاعدة قديمة توجيهه. اقرأ سجل الخدمة المستقبِلة لتعرف أي نقطة نهاية أجابت، واعتبر رسالة نجاح العميل دليلاً ضعيفاً. يلزم تدفّق جديد لاختبار ذي معنى. أرسل مسباراً من مضيف خارجي باستخدام nc -zvu 203.0.113.7 1194 واقرأ سجل الفائز باستخدام journalctl -u openvpn@server -n 20. يسجّل مستمع الموجّه الاتصال بنفسه، بينما يسجّله مضيف محلي في خدمته الخاصة.
تُبقي تتبّع الاتصالات التدفقات القائمة على تعيينها الأصلي، لذا يمكن لجلسة قائمة أن تعيش أطول من القاعدة التي أصلحتها للتو.
بعد أن تجيب نقطة النهاية المقصودة بفحوص هويتها المعتادة، اختبر مورداً خاصاً خلف النفق. الوصول إلى المستمع الخارجي هو الخطوة الأولى فقط؛ والتوجيه الداخلي وتفويض التطبيق نتيجتان منفصلتان.