موقعان خلويان بلا منافذ واردة: ابنِ محورًا يعمل
حين لا يقبل أي من الموقعين اتصال IPv4 واردًا، دع كليهما يبدأ الاتصال بمحور يمكن الوصول إليه. نفّذ خطوات التوجيه والتمرير والرجوع بهذا الترتيب.
موقعان يعملان عبر وصلات خلوية يواجهان المشكلة نفسها في الاتجاهين: لا يستطيع أي منهما قبول اتصال IPv4 غير مطلوب، لذا لا يمكن لأي منهما أن يؤدي دور الخادم في نفق مباشر. المعمارية التي تنجح تضع طرفًا ثالثًا يمكن الوصول إليه في الوسط، حيث يتصل كل موقع إلى الخارج ولا يمرّر الوسط إلا الحركة التي توافق عليها. ذلك الوسط قد يكون موجّهًا تديره أنت أو منتجًا يعرّف الأقران ببعضهم، وهذان ليسا الشيء نفسه. الخطوات أدناه مرتبة بحيث ينتج كل منها دليلًا قبل أن يعتمد التالي عليه.
لا يمكن الاتصال بأي من الموقعين، لذا يجب أن يتصل الاثنان إلى الخارج
أكّد القيد قبل التصميم حوله. إذا منح المشغّل واجهة WAN عنوانًا خاصًا، فلن تجعله أي إعادة توجيه للمنفذ على موجّه الموقع نفسه قابلًا للوصول، لأن الترجمة تحدث في المنبع. قد يوجد عنوان IPv6 عام على الوصلة نفسها ويغيّر التصميم كليًا، ولهذا يشمل الفحص العائلتين. اكتب الإجابة لكل موقع، لأن الاثنين نادرًا ما يكون لهما القيود نفسها حتى عندما يشتركان في مشغّل واحد.
الحالة الخلوية العادية تبدو كعنوان من نطاق المشغّل المترجَم مع مسار افتراضي يمر عبره. هذا ليس عيبًا يُصلَح؛ بل هو سبب وجود المحور. ما تبحث عنه هو أي عنوان يمكن لطرف ثالث الوصول إليه دون أن يتحدث الموقع أولًا.
أمران يجيبان عن سؤال العنونة للموقع الذي تقف أمامه. شغّلهما على موجّه الموقع، لا على حاسوب محمول خلفه:
ip -4 addr show scope global
ip -6 addr show scope globalمن يعرّف الأقران، ومن يحمل الحزم
التعريف والنقل مهمتان منفصلتان غالبًا ما تحزمهما المنتجات دون إظهار الحد الفاصل. آلية اللقاء تساعد قرينين على إيجاد مسار مرشح؛ والمرحّل يحمل حزمهما عندما لا يوجد مسار مباشر. شراء خدمة تعرّف الأقران لا يمنحك موجّهًا، وهذا الفرق يحدد ما إذا كان التصميم يحتاج محورًا أصلًا.
للاختراق مفرداته الخاصة، والكلمات تصف أدوارًا لا ضمانات. مواصفة ICE تصف المرشحات وفحوص الاتصال، ويصف STUN طريقة واحدة للتعرّف على ترجمة العناوين، ويصف TURN النقل المُمرَّر للتطبيقات التي تطبقه. لا تظهر أي من تلك الآليات في بوابة تقليدية لأنك وجّهتها إلى عنوان اكتشاف. تحقق من الاختراق كقدرة منتج، وافترض التمرير حتى يُظهر اختبار خلاف ذلك.
مسار واحد لكل موقع، يملكه قرين
يحتاج المحور إلى نفق واحد لكل موقع، وبادئة LAN مميزة خلف كل منهما، ومسار لكل بادئة يسمّي مالكها. في المثال المحور هو 10.61.0.1، والموقع A هو 10.61.0.11 مع LAN 10.60.10.0/24، والموقع B هو 10.61.0.12 مع LAN 10.60.20.0/24. كل مسار أدناه يشير إلى القرين الذي يملك البادئة لا إلى واجهة النفق:
ip route add 10.60.10.0/24 via 10.61.0.11 dev wg0
ip route add 10.60.20.0/24 via 10.61.0.12 dev wg0
sysctl net.ipv4.ip_forward
ip route get 10.60.20.55 from 10.60.10.77يجب تمكين التمرير، وإلا توقف الحزم عند المحور دون خطأ يدل على السبب. الأمر الأخير يجيب عن السؤال الحقيقي، لأنه يسأل عن المسار الذي ستسلكه حزمة من LAN الموقع A إلى LAN الموقع B مع تضمين المصدر في البحث. اعتبر البحث الذي يسمّي واجهة النفق دليلًا، والبحث الذي يعود إلى المسار الافتراضي مسارًا ناقصًا لا لغزًا. ثم قيّد العبور عمدًا، لأن محورًا يمرّر بين كل قرين يحوّل موقعين إلى شبكة مسطحة وتتوقف سياسة الوصول التي ظننت أنك تملكها.
حدّد أيضًا أين ينتهي التشفير. عندما يحمل المحور طرفي النفق، ينضم مشغّل ذلك الجهاز وحمله إلى نموذج الثقة والتوافر، ويصبح عرض نطاقه جزءًا من المسار.
أبقِ كل تعيين حيًا عبر المشغّل
كل موقع يبدأ نفقته، وعلى كل منهما إبقاء تعيين الترجمة حيًا وإلا نسيه المشغّل. تحافظ رسالة الإبقاء على الجانب المبادر على ذلك التعيين بين المصافحات. حصر البادئات المسموحة في عنوان المحور وشبكة LAN البعيدة، حتى لا يستطيع قرين مخترق المطالبة ببادئة لا يملكها:
[Peer]
PublicKey = <hub public key>
Endpoint = 192.0.2.10:51820
AllowedIPs = 10.61.0.1/32, 10.60.20.0/24
PersistentKeepalive = 25كرّر الكتلة على الموقع الآخر ببادئته البعيدة، وقاوم الرغبة في السماح بنطاق النفق كله. المصافحة التي تتوقف ثم تستأنف من منفذ مصدر جديد هي بصمة تعيين منتهٍ، وطوابع وقت المصافحة هي الدليل على حدوثه. الفاصل الأقصر من مهلة المشغّل يمنع الانتهاء بدل إصلاحه لاحقًا. وعندما يغيّر المشغّل سلوك الترجمة، توقّع أن تتغير تلك التوقيتات معه.
أثبت الاتجاهين، ثم أثبت الاستعادة
التحقق اتجاهي، لذا ping من A إلى B يثبت نصف التصميم ولا شيء عن مسار العودة. افحص مسار الرد بالبحث نفسه الواعي بالمصدر على المحور، ثم أعد الاختبار من الجانب الآخر. المصافحات الطازجة تنتمي إلى الدليل أيضًا، لأن نفقًا خاملًا ساعة قد يختبر تعيينًا قديمًا:
wg show wg0 latest-handshakes
ping -c 3 10.60.20.55
traceroute -n 10.60.20.55ثم اختبر الفشل الذي تتوقعه لا النجاح الذي تريده. أعد تشغيل وصلة أحد الموقعين وتأكد من عودة النفق دون أن يلمس إنسان أي طرف، لأن تصميمًا يحتاج مشغّلًا بعد كل تغيير من المشغّل غير مكتمل. سجّل المسار الأساسي، وبديل IPv6 عندما يوجد، والسلوك عندما يكون المحور غير متاح. المحور الآن جزء من نموذج التوافر لديك، فاكتب ذلك بدل اكتشافه أثناء انقطاع.