متطلبات منافذ VPN: ثلاثة أسطر تكتبها قبل المقارنة
حدد سؤال المنفذ الذي لديك فعلاً: وجهة صادرة، أو نشر وارد، أو نقل النفق نفسه. ثم اسأل المزوّد عن ذلك فقط.
تُنسخ قوائم المنافذ الخاصة بخدمات VPN بين صفحات المقارنة من دون التفصيل الذي يحدد ما إذا كانت تهم: من يبدأ الاتصال. قاعدة تسمح بحركة TCP 443 الصادرة لا تقول شيئًا عن إمكان وصول مضيف آخر إلى مستمع على جهازك. اكتب ثلاثة متطلبات منفصلة قبل أن تقارن خطة واحدة، وحدد أيها تحتاجه مهمتك فعلاً. معظم المقارنات تنطوي في سؤال قصير واحد بمجرد أن توجد تلك الورقة.
افصل المتطلب قبل أن تقرأ أي قائمة منافذ
ثلاثة أسطر تغطي كل الحالات تقريبًا: الوصول إلى وجهة خارج النفق، ونشر شيء ليتمكن الآخرون من الاتصال به، وحمل النفق نفسه. كل سطر يفشل لسبب مختلف، وسياسة مزوّد تفي بأحدها قد تترك الآخرين بلا مساس. تصنيف مهمتك في السطر الصحيح يستغرق خمس دقائق ويوفر عليك جدالاً لاحقًا.
| Line | Who starts it | What can block it | Question for the provider |
|---|---|---|---|
| Outbound destination | Your application | Egress filter on the exit node | Is this protocol and port allowed to that destination? |
| Inbound publishing | A remote peer | No mapping, no public address, short lifetime | Which protocol, which external port, and how long does the mapping last? |
| Tunnel transport | Your client to the gateway | The access network drops that protocol | Does the client offer a fallback the local network permits? |
العبارات التسويقية تخلط الأسطر الثلاثة عن قصد. سماح P2P يصف سياسة وجهة، والعنوان المخصص يصف عنوانًا، والادعاء بعدم وجود قيود على المنافذ يعني عادةً أن الخطة لا تعددها. لا واحدة من هذه العبارات تجيب عن الأخرى.
اختر تدفقًا واحدًا محددًا واكتبه كجملة: البادئ، النقل، المنفذ، عائلة العناوين، الاتجاه. عميل نسخ احتياطي ليلي يرفع إلى مضيف بعيد هو صادر فقط. خادم لعبة على مكتبك ينضم إليه أصدقاؤك هو وارد. تشغيل الاثنين عبر نفق واحد يعني أن الورقة تحتاج السطرين، لا حلاً وسطًا بينهما.
الوصول الصادر يفشل بسبب سياسة الوجهة، لا بسبب النفق
حركة المرور الصادرة عبر بوابة تُترجم تُنشئ حالة. أول حزمة من عنوان ومنفذ داخليين تبني مدخلاً للترجمة، والردود تطابقه، وهذا هو سلوك التعيين الموصوف في RFC 3022. تلك الآلية هي سبب عمل علامة تبويب في المتصفح عادةً من دون أي طلب منفذ إطلاقًا.
شيئان ما زالا يكسران ذلك. قد تصفي عقدة الخروج وجهات أو أرقام منافذ تعتبرها قابلة للإساءة، وقد يستمع التطبيق على منفذ لم تتوقعه سياسة الخروج قط. اسأل عن زوج الوجهة بدلاً من قواعد الواردة، وتوقع إجابات مختلفة لـ TCP وUDP.
قِس قبل أن تجادل. شغّل هذه على الجهاز الذي سيجلس خلف النفق، مرة والنفق مغلق ومرة وهو مفتوح:
ss -lntup | sort
nc -vz -w 3 203.0.113.10 443
curl -sS -o /dev/null -w '%{http_code}\n' --max-time 5 https://example.com
الأوامر نفسها، والوجهة نفسها، وحالتان للنفق، تمنح المشغّل مقارنة قبل وبعد يمكنه التصرف بناءً عليها. استبدل عنوان التوثيق بالمضيف الذي تحتاجه فعلاً؛ المهم أن تتكرر المقارنة، لا أن يبدو أي رقم مثيرًا للإعجاب.
النشر الوارد يحتاج تعيينًا وعنوانًا ومدة صلاحية
لا شيء في الخارج يستطيع بدء اتصال بمستمعك ما لم يعرف شيء ما في الجانب العام أين يوصله. حجز منفذ ثابت يتولاه المشغّل، وتعيين يطلبه العميل عبر UPnP أو NAT-PMP أو PCP، وعنوان عام موجَّه، هي ثلاثة منتجات مختلفة بثلاثة حدود مختلفة.
اسأل خمسة أسئلة عن أيٍّ منها: أي بروتوكول، وأي منفذ خارجي، وهل يجوز أن يختلف المنفذ الخارجي عن المحلي، وأي عائلة عناوين يغطي، وكم تدوم التعيينات بعد إعادة الاتصال. الحجز المرتبط بجلسة نشطة يختفي عند انتهاء تلك الجلسة، مهما قال صفحة الخطة.
أكّد النصف المحلي أولاً، لأن مستمعًا ميتًا ومسارًا واردًا محجوبًا يبدوان من الخارج متطابقين:
ss -lntup | grep -E ':(8080|51820)\b'
python3 -m http.server 8080 --bind 0.0.0.0
curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8080
عندما يعيد الطلب المحلي 200 ويظل طلب من شبكة لا تتحكم بها ينتهي بالمهلة، فالفجوة في الجانب العام. تلك هي اللحظة لذكر البروتوكول والمنفذ الخارجي للمشغّل بدلًا من وصف التطبيق باسمه.
نقل النفق نفسه سؤال منفصل
منافذ الناقل هي أصغر جزء من المشكلة وأسهل ما يمكن البحث عنه. الافتراضيات تختلف بحسب البروتوكول، وما يستطيع العميل التفاوض عليه يهم أكثر من أي وصف للخطة.
| Client | Outer transport | Default port | When it helps |
|---|---|---|---|
| OpenVPN | UDP | 1194 | Default mode; needs outbound UDP to pass |
| OpenVPN | TCP | 443 | UDP is dropped and TCP 443 is not |
| WireGuard | UDP | 51820 | Short handshake; there is no TCP mode |
| IKEv2/IPsec | UDP | 500 and 4500 | Mobile clients; 4500 carries NAT traversal |
الشبكة التي تُسقط UDP الصادر ستقبل نفق TCP 443 وترفض نفق UDP، لذا ينتمي وضع احتياطي إلى ورقة المتطلبات. تغيير الناقل لا ينقل منفذ تطبيق داخل النفق، ولا يوسّع سياسة وجهة؛ تلك تبقى في أسطرها.
التجزئة تستحق فحصًا واحدًا وأنت هناك، لأن نفقًا يتصل ثم يتوقف في النقل الكبير عادةً ما يكون MTU خاطئًا لا منفذًا مغلقًا:
ping -M do -s 1400 203.0.113.10 ping -M do -s 1372 203.0.113.10
على Windows الفحص نفسه هو ping -f -l 1400 203.0.113.10. اضبط MTU النفق تحت أكبر حجم يمر، ثم أعد اختبار النقل الذي فشل.
تحقّق من الأسطر الثلاثة قبل أن تدفع مقابل خطة
ضع الأسطر الثلاثة على صفحة واحدة واملأ كل خلية بنتيجة مقيسة بدلًا من وعد. هذه الأوامر تنتج النصف المحلي من تلك الصفحة في نحو دقيقة:
ss -lntup | sort
nc -vz -w 3 203.0.113.10 443
python3 -m http.server 8080 --bind 0.0.0.0
curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8080
ping -M do -s 1400 203.0.113.10
اقرأ المخرجات كقائمة تحقق. الصادر يعمل عندما تجيب الوجهة والنفق مفتوح. الوارد يعمل فقط عندما يصل مضيف خارج شبكتك إلى المستمع على المنفذ الخارجي. الناقل يعمل عندما تكتمل المصافحة على بروتوكول تسمح به شبكة وصولك.
عاداتان تُبقين الورقة صادقة. سجّل التاريخ وإصدار العميل بجانب كل نتيجة، لأن سياسات المزوّد وافتراضيات العميل تتحرك كلتاهما. ثم اطلب أضيق تعيين يخدم التدفق، لأن طلب فتح كل شيء يميل إلى جلب رفض أو عرض ترقية بدلًا من إجابة تقنية.