هل WireGuard شبكة VPN رائعة للمستقبل؟


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


تكمن مشكلة حلول VPN الحالية في صعوبة تكوينها بشكل صحيح ومكلفة في الصيانة ، كما أنها تحتوي على الكثير من التعليمات البرمجية القديمة ذات الجودة المشكوك فيها.


قبل بضع سنوات ، قرر أخصائي أمن المعلومات الكندي جيسون أ. دونينفيلد أن يتحمل هذا الأمر وبدأ العمل على WireGuard . الآن تستعد WireGuard لتضمينها في نواة Linux ؛ حتى أنها تلقت إشادة من Linus Torvalds ومجلس الشيوخ الأمريكي .


المزايا المعلنة لـ WireGuard على حلول VPN الأخرى:


  • سهل الاستخدام
  • يستخدم التشفير الحديث: إطار بروتوكول الضوضاء ، Curve25519 ، ChaCha20 ، Poly1305 ، BLAKE2 ، SipHash24 ، HKDF ، إلخ.
  • رمز قابل للقراءة مدمج ، وأسهل للتحري عن الثغرات الأمنية.
  • عالية الأداء.
  • مواصفات واضحة ومفصلة.

هل وجدت رصاصة فضية؟ هل حان الوقت للحفر في OpenVPN و IPSec؟ قررت التعامل مع هذا ، وفي الوقت نفسه قمت بعمل برنامج نصي لتثبيت خادم VPN شخصي تلقائيًا .


مبادئ العمل


يمكن وصف مبادئ التشغيل على النحو التالي:


  • يتم إنشاء واجهة WireGuard ، يتم تعيين مفتاح خاص وعنوان IP. يتم تحميل إعدادات أقرانهم الآخرين: مفاتيحهم العامة ، عناوين بروتوكول الإنترنت IP ، إلخ.
  • يتم تغليف جميع حزم IP التي تصل إلى واجهة WireGuard في UDP وتسليمها بأمان إلى أقرانها الآخرين.
  • يقوم العملاء بتعيين عنوان IP العام للخادم في الإعدادات. يتعرف الخادم تلقائيًا على العناوين الخارجية للعملاء عندما تأتي البيانات المصادقة بشكل صحيح منها.
  • يمكن للخادم تغيير عنوان IP العام دون مقاطعة العمل. في الوقت نفسه ، سوف يرسل تنبيهًا للعملاء المتصلين ويقومون بتحديث التكوين الخاص بهم على الفور.
  • يتم استخدام مفهوم Cryptokey Routing . يستقبل WireGuard الحزم ويرسلها بناءً على المفتاح العام للنظير. عندما يقوم الخادم بفك تشفير حزمة مصادقة بشكل صحيح ، يتم التحقق من حقل src الخاص به. إذا كان يطابق allowed-ips المصادق ، فسيتم استلام الحزمة من خلال واجهة WireGuard. عند إرسال حزمة صادرة ، يحدث الإجراء المقابل: يتم أخذ الحقل dst الخاص بالحزمة واختيار النظير المقابل بناءً على ذلك ، يتم توقيع الحزمة بمفتاحها الخاص ، وتشفيرها باستخدام مفتاح النظير وإرسالها إلى نقطة النهاية البعيدة.

يستغرق المنطق الأساسي لـ WireGuard أقل من 4 آلاف سطر من التعليمات البرمجية ، بينما يحتوي OpenVPN و IPSec على مئات الآلاف من الخطوط. لدعم خوارزميات التشفير الحديثة ، يُقترح تضمين واجهة برمجة تطبيقات تشفير Zinc الجديدة في نواة Linux. في الوقت الحالي ، هناك نقاش حول مدى جودة هذه الفكرة.


الأداء


ستكون ميزة الأداء القصوى (مقارنةً بـ OpenVPN و IPSec) ملحوظة في أنظمة Linux ، حيث يتم تطبيق WireGuard كوحدة kernel. بالإضافة إلى ذلك ، يتم دعم macOS و Android و iOS و FreeBSD و OpenBSD ، لكن WireGuard تعمل على مساحة المستخدمين مع جميع الآثار المترتبة على الأداء. يعد Windows بإضافة دعم في المستقبل القريب.


نتائج المعيار من الموقع الرسمي :



تجربتي الاستخدام


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


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


تم وصف عملية التثبيت بالتفصيل على الموقع الرسمي ، وأود أن أذكر دعمًا ممتازًا لـ OpenWRT .


يتم إنشاء مفاتيح التشفير بواسطة الأداة المساعدة wg :


 SERVER_PRIVKEY=$( wg genkey ) SERVER_PUBKEY=$( echo $SERVER_PRIVKEY | wg pubkey ) CLIENT_PRIVKEY=$( wg genkey ) CLIENT_PUBKEY=$( echo $CLIENT_PRIVKEY | wg pubkey ) 

بعد ذلك ، تحتاج إلى إنشاء config server /etc/wireguard/wg0.conf بالمحتويات التالية:


 [Interface] Address = 10.9.0.1/24 PrivateKey = $SERVER_PRIVKEY [Peer] PublicKey = $CLIENT_PUBKEY AllowedIPs = 10.9.0.2/32 

ورفع النفق مع النصي wg-quick :


 sudo wg-quick up /etc/wireguard/wg0.conf 

في الأنظمة ذات systemd ، يمكنك استخدام sudo systemctl start wg-quick@wg0.service .


على جهاز العميل ، قم بتكوين /etc/wireguard/wg0.conf config:


 [Interface] PrivateKey = $CLIENT_PRIVKEY Address = 10.9.0.2/24 [Peer] PublicKey = $SERVER_PUBKEY AllowedIPs = 0.0.0.0/0 Endpoint = 1.2.3.4:51820 #  IP  PersistentKeepalive = 25 

ورفع النفق بنفس الطريقة:


 sudo wg-quick up /etc/wireguard/wg0.conf 

يبقى تكوين NAT على الخادم بحيث يمكن للعملاء الوصول إلى الإنترنت ، وقد انتهيت!


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


من بين أوجه القصور ، تجدر الإشارة إلى أن WireGuard لن تعمل من خلال وكيل HTTP ، حيث يوجد بروتوكول UDP فقط كوسيلة نقل. السؤال هو ، هل من الممكن تشويش البروتوكول؟ بالطبع ، هذه ليست مهمة VPN مباشرة ، ولكن بالنسبة لـ OpenVPN ، على سبيل المثال ، هناك طرق للتخفي عن نفسها على أنها HTTPS ، والتي تساعد سكان البلدان الشمولية على استخدام الإنترنت بالكامل.


الاستنتاجات


خلاصة القول ، هذا مشروع مثير للاهتمام وواعٍ للغاية ، يمكنك استخدامه الآن على الخوادم الشخصية. ما هو الربح؟ أداء عالي على أنظمة Linux ، سهولة الإعداد والدعم ، قاعدة الشفرة المدمجة والقابلة للقراءة. ومع ذلك ، من السابق لأوانه التسرع في نقل البنية التحتية المعقدة إلى WireGuard ، يجدر انتظار التضمين في نواة Linux.


لتوفير وقتي (و) ، قمت بتطوير برنامج التثبيت التلقائي WireGuard . مع ذلك ، يمكنك رفع VPN شخصي لنفسك وأصدقائك دون حتى فهم أي شيء عن ذلك.

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


All Articles