يبدو النفق وكأنه يعمل فقط بعد أن يرسل الخادم شيئًا أولًا. ابدأ من العميل فلا يحدث شيء، انتظر بضع ثوانٍ، ثم حاول مرة أخرى فينجح. التشخيص المعتاد هو NAT معطوب، والتشخيص المعتاد خاطئ. ما تغيّر هو أن أحد النظيرين عرف أين يقيم الآخر.

معرفة نقطة النهاية، لا إمكانية الوصول

لا يبدأ نظير WireGuard أي مصافحة قبل أن يعرف أين يرسلها. توفر الإعدادات ذلك على هيئة نقطة نهاية من عنوان ومنفذ، وتتابع الحالة الجارية نقطة النهاية التي يعتقدها حاليًا.

يعرض wg show كلا الجانبين من تلك الصورة، والنظير الذي لا تظهر له نقطة نهاية في المخرجات لا يستطيع بدء أي شيء، مهما كان مفتاحه العام والبادئات المسموح بها صحيحة. قارن رؤية العميل برؤية الخادم قبل تغيير أي قاعدة، لأن الاثنين كثيرًا ما يختلفان حول من يعرف ماذا.

كيف يتعلم النظير نقطة النهاية

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

تصف وثائق الأدوات الخاصة بـ wg ذلك التحديث، ويستحق قراءتها مرة إذا كنت ستضع تصميمًا حولها.

الترجمة ذات الحالة تضيف اتجاهها الخاص

حين يمر UDP عبر بوابة تقوم بالترجمة، تنشئ البوابة حالة لأول حزمة تراها. تصف RFC 4787 ذلك السلوك والمهلات التي تزيل التعيين في النهاية. ينتهي التعيين الخامل، فتُسقط البوابة عندها حزمة واردة من الجانب الآخر قبل أن تصل إلى المضيف. ولنفق عمل طوال الصباح يتوقف عن الاستجابة بعد الظهر لهذا السبب تحديدًا.

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

اضبط الاتجاه الذي تريده فعلًا

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

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

قارن الحالة قبل المحفّز وبعده

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

wg show
conntrack -L -p udp 2>/dev/null | grep 51820
tcpdump -ni any -c 20 'udp port 51820'
ip route get 198.51.100.7

سجّل عمود نقطة النهاية وإدخال الترجمة معًا. النظير الذي لا نقطة نهاية له والبوابة التي لا تعيين لها عطلان مختلفان. واحد فقط منهما يُصلحه الإبقاء الحي.

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