WireGuard ، إعداد عملاء متعددين لـ NAT ، وأين يذهب STUN؟

في الوقت الحالي ، نطلق الوصول إلى الخوادم القائمة على WireGuard ، واليوم أريد أن أتحدث عن كيفية تكوين العملاء الذين يتخلفون عن NAT ، على الرغم من أننا لن ننسى تكوين الخادم أيضًا.

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

من الواضح ، إذا كانت العقدتان والخادم وعميل واحد لهما عناوين IP بيضاء ، في هذه الحالة يجب ألا تكون هناك أي صعوبات في الإعداد. ولكن غالبًا ما يكون العملاء وراء NAT ، وفي هذه الحالة ، عند إعداد الخادم ، يجب عليك تحديد عنوان IP الخاطئ الذي تم إصداره / تسجيله على الجهاز. في هذا الصدد ، يمكن أن يساعد بروتوكول STUN. غالبًا ما يستخدم هذا البروتوكول عند العمل مع VoIP ، خاصةً عندما يكون كلا العميلين وراء NAT. ولكن في حالتنا ، وسوف يساعد أيضا. انطلاقًا من المعلومات الموجودة على Wikipedia ، لا يعمل STUN مع جميع أنواع NAT ؛ في أحد أنواع NATs الأربعة ، يمكن أن يكون للعميل (المتماثل) IP مختلف عن الذي يمكن تعريفه خارجيًا باستخدام عميل STUN.

يوجد عملاء STUN على جميع أنظمة التشغيل الشائعة باستثناء iOS. بموجب نظام التشغيل هذا ، لم أتمكن من العثور على عميل STUN. سأقدم مثالاً لنظام التشغيل MacOS. أولاً ، تحتاج إلى تثبيت عميل STUN نفسه.

$ brew install stunman 

هناك الكثير من خوادم STUN على الإنترنت وليس من الصعب العثور على أي خادم للاختبار. سأستخدم stun.ekiga.net . للاختبار ، ستحتاج إلى استخدام المنفذ المحلي ، وهو المنفذ الذي سنستخدمه لتكوين:

 $ stunclient --localport 51820 stun.ekiga.net 

مع اختبار ناجح ، نحصل على النتيجة التالية تقريبًا:

 Binding test: success Local address: 192.168.88.23:51820 Mapped address: 82.207.27.3:51820 

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

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

على نظام Linux ، يمكن القيام بذلك من سطر الأوامر ، على نظام macOS من خلال واجهة المستخدم الرسمية للعميل.

 $ wg genkey | tee privatekey | wg pubkey > publickey 

في هذه الحالة ، في مكان المكالمة ، سيتم إنشاء المفتاح الخاص في ملف المفتاح الخاص ، ويكون عامًا في publickey ، على التوالي.

أولاً ، ضع في الاعتبار تكوين العميل:

 #       [Interface] #       PrivateKey = YPuKo2QXndQ2Vc3S/y90oKT7AJ0Swhq/HWKiF7GwS04= #         ListenPort = 51820 #  IP   ,        #    Address = 10.8.0.2/24 # DNS   ,      DNS = 8.8.8.8 #     [Peer] #   ,     PublicKey = nFjDIkgsAh1RMZuaCJ+AKs7JmbMxxthhZ0POjUSTvkc= #     ,       # IP  ,          #     ,      #     WireGuard . IP   , #   . AllowedIPs = 0.0.0.0/0 #  IP    Endpoint = 46.101.122.130:51820 #  2 .  -    ,     , #    AllowedIPs         #   .  -     # ,    -  25 . PersistentKeepalive = 25 

حان الوقت لتهيئة الخادم:

 #       [Interface] # IP      Address = 10.8.0.1/24 #     ListenPort = 51820 #  ,      PrivateKey = MNnxOy79xtXtSQ3UySWtdlOMbG7ff9dXGjeSTPEByn8= #  2 ,      wg0  PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE #     [Peer] #   ,    PublicKey = TdRtYd6XXI+ynPDXU6FF5TT3L5t/YlQVZswr2xsou34= #   IP ,     , #     AllowedIPs = 10.8.0.2/32 #  IP ,   ,     STUN  EndPoint = 82.207.27.3:51820 

عند استخدام هذه التكوينات كأمثلة ، يوصى بحذف التعليقات باللغة الروسية ، ولا يضمن الخادم والعميل في حالة التعليقات.

لقد استخدمت الموارد التالية لتكوين: الموقع الرسمي ، ArchWiki ، وهذا البرنامج التعليمي .

في النهاية ، أود أيضًا توضيح بعض الأسئلة المحتملة:

1. هل من الممكن إنشاء عدة أقسام من نفس النظير على الخادم ، والتي ستختلف فقط في EndPoint ؟

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

2. ما IP الخارجي والمنفذ الذي سيتم تحديده بواسطة بروتوكول STUN لعدة عملاء لكل NAT؟

الشيء نفسه بالنسبة لجميع العملاء ، وسوف يكون هو نفسه. هل ستكون هذه مشكلة؟ كل هذا يتوقف على إعدادات الموفر / الموجه ، ولكن لا ينبغي أن تنشأ أي مشاكل في الأساس ، لأن الموجه يجب أن يبث حزم UDP داخل الشبكة بواسطة قناع الشبكة المحلية ، على التوالي ، على الأطراف المستقبلة التي يمكنها فك تشفير الحزم أن تستقبلها بنجاح. لقد أجرينا اختبارات على معداتنا ، وكانت الاختبارات ناجحة.

لم يكن الغرض من هذه المقالة كتابة برنامج تعليمي كامل حول كيفية تكوين WireGuard ، فليس من الصعب القيام به باستخدام الوثائق الرسمية. أردنا أن نوضح كيف يعمل WireGuard مع NAT.

إذا كنت ترغب في تجربة WireGuard في الأعمال التجارية ، فيمكنك الاتصال بنا ، حيث يمكننا الدخول في وضع الاختبار.

UPD:
كما أوضح من قبل المهتديين aborouhin ، IP واحد فقط أبيض يكفي لقناة البيانات للعمل دون مشاكل. وفقًا لذلك ، يمكن حذف EndPoint for Peer من تهيئة الخادم ، مما يجعل التكوين أسهل. ويمكن أن يكون الدليل الموصوف مفيدًا إذا كانت كلا العقدتين وراء NAT.

Source: https://habr.com/ru/post/ar481838/


All Articles