لقد حان الوقت عندما لم تعد 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 شخصي لنفسك وأصدقائك دون حتى فهم أي شيء عن ذلك.