NAT المتماثل وشبكات VPN: اختبر التعيين لا التسمية
التعيين المعتمد على الطرف يؤثر في اكتشاف الأقران، لا في نفق عميل إلى خادم عادي. قِس المنفذ، ثم استخدم مُرحّلًا إذا فشل المسار المباشر.
ينتهي خيط دعم بالحكم «NAT متماثل، لن تعمل VPN هنا»، ثم يُعاد تثبيت العميل ثلاث مرات بلا سبب. التسمية تُلحق الضرر لأنها تجيب عن سؤال لم يطرحه أحد. العميل الذي يتصل خارجًا بخادم ثابت ينشئ تعيينًا في اللحظة التي يرسل فيها أول حزمة، ويُسمح بعودة الرد وفق قواعد تُطبقها كل شبكة تقريبًا. ما يعقّده التعيين المعتمد على الطرف فعلًا هو محاولة قرينين الوصول إلى بعضهما في الوقت نفسه، وذلك اختبار مختلف.
سؤالان يختبئان خلف تسمية واحدة
السؤال الأول هو هل يستطيع مضيف خلف هذه الشبكة فتح جلسة إلى عنوان عام ومنفذ معروفين. بالنسبة لعميل نفق هذه هي الحالة العادية، والجواب نعم في الغالب. يسجل الموجّه المصدر الداخلي، ويخصص منفذًا خارجيًا، ويسمح بمرور الرد لأنه ينتمي إلى جلسة بدأت من الداخل.
السؤال الثاني هو هل يستطيع مضيفان خلف شبكتين مختلفتين اكتشاف مسار مشترك والإرسال إلى بعضهما دون خادم في الوسط. يعتمد ذلك على كيفية تخصيص كل شبكة لتلك المنافذ الخارجية، وهو الموضع الوحيد الذي يهم فيه سلوك التعيين.
خلط السؤالين ينتج التشخيص الخاطئ الكلاسيكي: تفشل ميزة الند للند، فيجري أحدهم اختبار نوع NAT، ويرى أسوأ فئة، ويستنتج أن النفق العادي لا يمكن أن يعمل أيضًا. النفق لم يكن الشيء الذي فشل قط.
التعيين والتصفية خاصيتان منفصلتان
مصطلحات RFC أدق من الأسماء التي يستخدمها الموردون، ويستحق نقلها إلى التذكرة لأنها تحسم الجدل. التعيين هو كيفية تخصيص المنفذ الخارجي. التصفية هي أي الحزم الواردة يُسمح لها بالمرور. يمكن أن تكون الشبكة صارمة في إحداهما ومتسامحة في الأخرى، والمزيج هو ما يجب أن ينجو منه بروتوكول الند للند.
| Behaviour | What it means | Effect on a direct peer path |
|---|---|---|
| Endpoint-independent mapping | One external port for every destination | Discovery works if the port is advertised |
| Address-dependent mapping | New port per remote address | Works only if both sides probe the same pair |
| Address-and-port-dependent | New port per remote address and port | Usually needs a relay |
الصف الثالث هو ما تعنيه معظم موجّهات المستهلكين وشركات الاتصالات المتنقلة بكلمة متماثل. لاحظ أن التسمية تصف التخصيص فقط. الشبكة التي لديها ذلك التعيين وتصفية متسامحة يمكنها مع ذلك قبول حزم واردة إلى المنفذ الذي خصصته للتو، ولهذا ينجح ثقب الفجوات على بعضها ويفشل على غيرها.
للتصفية حالاتها الثلاث وأسماؤها الخاصة بكل حالة. كتابة «NAT متماثل» في تذكرة وأنت تعني «تصفية معتمدة على العنوان والمنفذ» ترسل الشخص التالي إلى الفصل الخطأ من الدليل. السلوكان مختلفان تحت الاختبار، فالخطأ ليس نظريًا.
قِس التعيين بدل تسميته
يمكنك مراقبة المنفذ المخصص مباشرة من جهة الخادم في أي خدمة UDP تتحكم بها. ابدأ التقاطًا على المضيف العام، وأرسل من العميل، واقرأ منفذ المصدر الذي وصلت به الحزمة:
sudo tcpdump -ni eth0 -c 10 'udp port 51820'
sudo wg show wg0 endpoints
sudo conntrack -L -p udp --dport 51820
سطر الطرف هو الأنفع بين الثلاثة، لأن WireGuard يسجل آخر عنوان ومنفذ تلقاه من كل قرين. قارن ذلك المنفذ بالمنفذ الذي يظن العميل أنه يستخدمه. سيختلفان كلما حدث أي ترجمة، و السؤال المهم هو هل تبقى القيمة مستقرة.
كرر المراقبة تجاه منفذ وجهة ثانٍ أو خادم ثانٍ وقارن مرة أخرى. إذا تغير المنفذ الخارجي حسب الوجهة فالتعيين معتمد على العنوان والمنفذ. وإذا بقي كما هو فالشبكة تعطيك تعيينًا واحدًا وللاكتشاف فرصة.
أدوات STUN تُبلّغ بالتصنيف نفسه في خطوة واحدة، ولا بأس باستخدامها حين تسمح الشبكة بحزم UDP صادرة إلى خادم STUN عام. وحين لا تسمح، تظل طريقة الالتقاط أعلاه صالحة ولا تتطلب شيئًا سوى مضيف تتحكم به أصلًا.
اختر إصلاحًا يطابق العطل
إذا كانت الميزة الفاشلة هي الند للند، فالأجوبة المدعومة هي مُرحّل، أو خدمة لقاء يستطيع القرينان الوصول إليها، أو طوبولوجيا مختلفة. TURN موجود لهذا بالضبط، والمنتج الذي يشحن مُرحّله الخاص يخبرك أنه يتوقع شبكات معادية.
إذا كانت الميزة الفاشلة نفقًا عاديًا، فسلوك التعيين ليس مشكلتك ولا ينطبق أي مما سبق. تحقق من أن العميل يرسل فعلًا، وأن الخادم يرى الحزمة، وأن الرد يعود. ذلك التسلسل ثلاث ملاحظات ولا يتطلب معرفة أي شيء عن فئة NAT لدى الموجّه.
ما لا ينجح هو نثر تغييرات المنفذ المحلي حتى يتصل شيء ما. تغيير منفذ المصدر لدى العميل لا يغيّر طريقة تخصيص الشبكة للتعيينات. النجاح العَرَضي في المحاولة الخامسة إيجابية كاذبة، وسيُقتبس كإصلاح لأشهر.
سجّل البنية لا الحكم
تقول ملاحظة مفيدة أي بروتوكول، وفي أي اتجاه تبدأ الجلسة، وهل يوجد مُرحّل في المسار، وما لوحظ على السلك. عبارة «NAT متماثل، لا يعمل» غير قابلة للاستخدام، لأنها خاطئة بشأن النفق وعديمة الفائدة بشأن مسار القرين في الوقت نفسه.
أدرج استقرار المنفذ المقيس وسلوك التصفية إذا اختبرتهما. هاتان الحقيقتان تتيحان لشخص آخر توقع ما إذا كانت ميزة جديدة ستعمل على تلك الشبكة دون تكرار التحقيق كله. وهما أيضًا تصمدان مع الزمن أفضل من فئة مورد تعني شيئًا مختلفًا قليلًا في كل صفحة مساعدة.
أخيرًا، أبقِ مصطلحات RFC 4787 في متناولك عند كتابة التقرير. استخدام المصطلحات الدقيقة يكلف جملة واحدة ويمنع القارئ التالي من تكرار التشخيص الخاطئ نفسه، وهذا هو المقصد كله من كتابة الملاحظة أصلًا.