أدلة ذات صلة
WireGuard بالتفصيل: كيف يعمل وكيف تطوّر
آخر تحديث
WireGuard بروتوكول VPN مفتوح المصدر صمّمه Jason A. Donenfeld، وظهر للعلن نحو عام 2015، ودخل نواة لينكس رسميًا عام 2020. ويمكن تلخيص طابعه بكلمة واحدة: القلّة. كود قليل: فتنفيذه الأساسي بضعة آلاف من الأسطر، بينما OpenVPN وIPsec مئات الآلاف؛ وخيارات قليلة: مجموعة واحدة ثابتة من خوارزميات التشفير لا يُسمح لك بالاختيار منها؛ وحالات قليلة: لا توجد مفاهيم مثل «جارٍ الاتصال» و«مقطوع»، فإن وُجدت بيانات أُرسلت، وإلا ساد الصمت. هذه القلّة تمنحه السرعة وتوفير البطارية وسهولة التدقيق، لكنها تفرض أيضًا حدوده: UDP فقط، وبلا تمويه، ولا شأن له بتوزيع المفاتيح. نشرح أولًا كيف يعمل، ثم كيف صار خطوة بعد خطوة أساس الجيل الجديد من الـ VPN.
فكرة التصميم: VPN يتصرف كبطاقة شبكة
قبل WireGuard كان الخياران الرئيسيان IPsec وOpenVPN. IPsec عائلة كاملة من المعايير بخيارات إعداد لا تُحصى، والربط بين أجهزة الشركات المختلفة به مشهور بصعوبته؛ وOpenVPN يعمل في مساحة المستخدم ويعتمد على مكتبة TLS ضخمة، فهو مرن لكنه بطيء. وكلاهما كبير الكود إلى حد يصعب معه أن يدققه أحد كاملًا.
أما فكرة WireGuard فمعاكسة: أن يفعل شيئًا واحدًا ويتقنه. يظهر في النظام كبطاقة شبكة افتراضية (مثل wg0)، تعطيها مفتاحك الخاص والمفاتيح العامة لبضعة أطراف، فما ترسله إليها من حزم يُشفَّر ويُرسَل، وما يصلها يُفك تشفيره ويخرج منها. وكل ما عدا ذلك من توجيه وجدار ناري وتوزيع عناوين يُترك للأدوات الموجودة أصلًا في النظام.
وما يتعمّد ألا يفعله واضح أيضًا: لا يتفاوض على الخوارزميات، ولا يدير أسماء المستخدمين وكلمات المرور، ولا يوزّع العناوين، ولا يموّه الحركة. فهذه إما تُعدّ مصدرًا للثغرات، وإما تُترك لأدوات الطبقات الأعلى.
التوجيه بالمفاتيح: المفتاح العام هو الهوية
لكل جهاز في WireGuard زوج مفاتيح، ومفتاحه العام هو هويته، على طريقة SSH: يكتب كل طرف المفتاح العام للآخر في إعداداته فتقوم الثقة بينهما، دون شهادات ودون اسم مستخدم وكلمة مرور.
وفي الإعدادات يُكتب لكل طرف سطر «العناوين المسموح بها» (AllowedIPs)، وهو يحكم الاتجاهين معًا: عند الإرسال، يُشفَّر الحزمة بالمفتاح العام للطرف الذي يقع عنوان الوجهة ضمن نطاقه المسموح وتُرسل إليه؛ وعند الاستقبال، يُفحص بعد فك التشفير هل عنوان المصدر ضمن نطاق ذلك الطرف، وإلا أُسقطت الحزمة. ويسمى هذا الأسلوب «التوجيه بمفاتيح التشفير» (cryptokey routing)، إذ يندمج جدول التوجيه والتحكم في الوصول في جدول واحد.
لذلك فإن كتابة 0.0.0.0/0 كعناوين مسموح بها لطرف ما تعني «سلّمه كل الحركة»، وهو ما يُسمى عادة VPN الشامل؛ أما كتابة نطاق شبكة داخلية واحد فقط فتعني أن النفق لا يُستخدم إلا للوصول إلى ذلك النطاق.
المصافحة والتشفير: مجموعة خوارزميات ثابتة
قبل أن يتواصل جهازان أول مرة يجب أن يتصافحا: يرسل البادئ حزمة ويرد المستجيب بحزمة، ذهاب وإياب فقط، فيحصل الطرفان على مفاتيح جلسة لا تُستخدم إلا لهذه الفترة. وتعتمد المصافحة على إطار بروتوكولات Noise، فيتحقق كل طرف من الآخر بالمفاتيح طويلة الأمد، ويضمن في الوقت نفسه بمفاتيح مؤقتة «السرية الأمامية»، أي أنه حتى لو تسرّب المفتاح الخاص طويل الأمد لاحقًا، فلن يمكن فك تشفير الحركة المسجّلة سابقًا.
وتتغير مفاتيح الجلسة تلقائيًا كل بضع دقائق، ولا يرى المستخدم شيئًا من ذلك، ولا يوجد شيء اسمه «إعادة الاتصال».
وخوارزميات التشفير ثابتة: Curve25519 لتبادل المفاتيح، وChaCha20-Poly1305 لتشفير البيانات، وBLAKE2s للتجزئة. لا تفاوض، وبالتالي لا هجمات خفض المستوى، إذ لا يستطيع المهاجم دفع الطرفين إلى خوارزمية أضعف. وإن كُسرت إحدى هذه الخوارزميات مستقبلًا، فالحل إصدار جديد من البروتوكول يستبدلها كلها، لا إضافة خيار.
ويمكن أيضًا إضافة مفتاح مشترك مسبقًا فوق آلية المفاتيح العامة، احتياطًا من تهديد الحواسيب الكمومية المستقبلية لخوارزميات المفاتيح العامة.
UDP فقط، لا رد على الغرباء، ولا انقطاع عند تغيير الشبكة
- UDP فقط: يشفّر WireGuard كل حزمة على حدة ثم يضعها في حزمة UDP ويرسلها. وعدم استخدام TCP مقصود: فتشغيل TCP داخل TCP يعني أن الطبقتين تعيدان الإرسال معًا، فتجرّ كل منهما الأخرى إلى الأسفل عند فقدان الحزم.
- لا رد على الغرباء: أي حزمة لم تجتز التحقق لا يُرد عليها إطلاقًا. فمن يفحص المنافذ يرى هذا المنفذ كأنه مغلق، ولا سبيل له لمعرفة أن WireGuard يعمل عليه.
- التنقّل: WireGuard لا يعرف «الاتصال»، بل يعرف المفتاح العام فقط. فإن غيّر الطرف الآخر عنوانه، كهاتف ينتقل من Wi‑Fi إلى بيانات الجوال، فما إن تجتاز حزمته التالية التحقق حتى يُرسَل الرد تلقائيًا إلى العنوان الجديد. لذلك لا ينقطع النفق عند تغيير الشبكة.
- الهدوء: حين لا توجد بيانات للإرسال لا يولّد النفق أي حركة، ولهذا يوفّر البطارية على الهاتف. ولا تحتاج إلى تشغيل الإبقاء الدوري على الاتصال (PersistentKeepalive) إلا إذا كان الجهاز خلف راوتر ويجب أن يظل الطرف الآخر قادرًا على الوصول إليه دائمًا، فيرسل حزمة صغيرة كل بضع عشرات من الثواني ليحافظ على الربط في الراوتر.
لماذا هو سريع
- يعمل داخل النواة: WireGuard على لينكس وحدة في النواة، فلا تُنسخ الحزم ذهابًا وإيابًا بين النواة وبرامج المستخدم؛ أما OpenVPN فيعمل تقليديًا في مساحة المستخدم، فتمر كل حزمة بدورة إضافية.
- خوارزميات تناسب كل المعالجات: لا يعتمد ChaCha20 على تعليمات تسريع عتادية خاصة، فيتفوّق خصوصًا على شرائح الهواتف والراوترات التي تفتقر إلى تعليمات AES.
- مصافحة قصيرة: ذهاب وإياب ثم تبدأ البيانات، فلا يكاد يوجد انتظار لإنشاء الاتصال.
- كود قليل: المسار قصير، وكل تحسين ممكن مركّز في الخطوات الحاسمة القليلة.
- لكن انتبه: هذا كله يخص عبء البروتوكول وتنفيذه فقط. أما السرعة الفعلية على الخطوط العابرة للحدود فتتوقف أكثر على فقدان الحزم في الخط وموقف شركة الاتصالات من UDP.
التطوّر: من مشروع فردي إلى نواة لينكس
- نحو 2015: بدأ Jason A. Donenfeld تطوير WireGuard ونشره، وكان في البداية وحدة نواة مستقلة على لينكس.
- 2017: نُشرت الورقة التي تصف تصميمه في مؤتمر أمن الشبكات NDSS، ثم خضع البروتوكول لعدة عمليات تحقق رسمي مستقلة. وفي العام نفسه تقريبًا بدأ مزوّدو VPN مثل Mullvad تقديم الاتصال عبر WireGuard.
- 2018: أشاد Linus Torvalds، مؤسس لينكس، بكوده في القائمة البريدية، وقال إنه مقارنة بـ OpenVPN وIPsec عمل فني حقيقي، فانتشر اسمه بين المطوّرين.
- 2019: أصدرت Cloudflare تنفيذ BoringTun لمساحة المستخدم المكتوب بلغة Rust، واستخدمت WireGuard في WARP؛ وأطلقت NordVPN بروتوكول NordLynx المبني على WireGuard؛ وبدأت Tailscale في الفترة نفسها مستخدمة WireGuard لنقل البيانات.
- مارس 2020: دُمج WireGuard رسميًا في الفرع الرئيسي للنواة مع لينكس 5.6، وصدر الإصدار 1.0 في الوقت نفسه. ومنذ ذلك الحين تأتي توزيعات لينكس الرئيسية مزودة به دون تثبيت وحدة إضافية. وفي العام نفسه أضافته OpenBSD إلى نواتها.
- 2021: صدر WireGuardNT، التنفيذ داخل النواة على ويندوز، بأداء أعلى بوضوح من تنفيذ مساحة المستخدم السابق؛ ثم حصلت FreeBSD أيضًا على تنفيذ داخل النواة.
- اليوم: توجد تطبيقات رسمية لويندوز وmacOS ولينكس وiOS وأندرويد، وأنظمة الراوترات وأجهزة التخزين الشبكي مثل OpenWrt وSynology تدعمه مدمجًا على نطاق واسع، ومعظم خدمات VPN التجارية تدرجه بروتوكولًا افتراضيًا أو اختياريًا.
ما لا يفعله، والحدود الناتجة عن ذلك
- لا يتولى توزيع المفاتيح: كل جهاز جديد يجب كتابة مفتاحه العام في إعدادات الأجهزة الأخرى. ومع كثرة الأجهزة يصعب ضبط الأمر، وهذا بالضبط سبب وجود أدوات مثل Tailscale.
- لا يوزّع العناوين ديناميكيًا: العنوان الداخلي لكل طرف مكتوب ثابتًا في الإعدادات، ولا توجد آلية «اتصل فتحصل على عنوان» كما في OpenVPN. وخدمات VPN التجارية التي تستخدمه تبني طبقة إضافية خاصة بها لذلك.
- مخاوف الخصوصية: يحتاج الخادم إلى تذكّر آخر عنوان عام لكل طرف كي يرد عليه. ومزوّدو VPN الملتزمون بعدم الاحتفاظ بالسجلات يعالجون ذلك عادة بإجراءات إضافية (كالمسح الدوري أو ترجمة العناوين مرتين).
- UDP فقط: لا يعمل، أو يكون بطيئًا جدًا، على الشبكات التي تحجب UDP أو تخنقه. وإن أردت تشغيله عبر TCP أو المنفذ 443 فلا بد من لفّه بأداة أخرى من الخارج.
- بلا تمويه: صيغة حزم المصافحة والبيانات وأطوالها لها بصمة ثابتة يسهل التعرّف عليها. فهدف تصميمه الأمان والبساطة، لا مقاومة الرقابة.
- بلا نظام حسابات: لا يعرف البروتوكول اسم مستخدم ولا كلمة مرور ولا تاريخ انتهاء، بل المفتاح العام وحده.
مقارنة بـ OpenVPN وIPsec
- حجم الكود: نواة WireGuard بضعة آلاف من الأسطر؛ أما OpenVPN مع مكتبة TLS التي يعتمد عليها، وتنفيذات IPsec المختلفة، فبمئات الآلاف.
- النقل: WireGuard عبر UDP فقط؛ وOpenVPN يعمل بالاثنين، ويمكنه العمل على TCP 443 ليختلط بمنفذ حركة HTTPS؛ وIPsec يستخدم رقم بروتوكول خاصًا به وUDP 500 / 4500.
- الإعداد: في WireGuard بضعة أسطر لكل طرف؛ وملف إعداد OpenVPN كثير الخيارات لكنه مرن؛ وIPsec الأعقد.
- الأداء: على الشبكات النظيفة يكون WireGuard عادة الأسرع والأوفر للبطارية؛ وOpenVPN حصل في إصداراته الحديثة على تسريع داخل النواة (DCO)، فالفجوة تضيق.
- الميزات: المصادقة باسم المستخدم وكلمة المرور، وتوزيع العناوين والمسارات ديناميكيًا، والعمل عبر TCP، كلها مدمجة في OpenVPN، بينما يحتاج WireGuard إلى أنظمة خارجية لتعويضها.
- دعم الأجهزة: OpenVPN أقدم تاريخًا، فتعرفه تقريبًا كل الراوترات القديمة وأجهزة التخزين الشبكي والأجهزة المدمجة؛ وWireGuard صار منتشرًا في أنظمة السنوات الأخيرة، لكنه قد لا يتوفر على الأجهزة القديمة.
ما نشأ فوق WireGuard
- Tailscale: أضاف فوق WireGuard تسجيل الدخول وتوزيع المفاتيح واختراق NAT والترحيل، فصار شبكة تلقائية بين الأجهزة؛ راجع Tailscale بالتفصيل. وHeadscale تنفيذ مفتوح المصدر لخادم التحكم فيه.
- Netmaker وNetBird وFirezone وأمثالها: منتجات شبكات أو «انعدام ثقة» على المبدأ نفسه: WireGuard لنقل البيانات، وطبقة إدارة خاصة بها.
- Cloudflare WARP: تطبيق WireGuard للمستخدم العادي يرسل الحركة إلى شبكة Cloudflare.
- تغليفات خدمات VPN التجارية: مثل NordLynx، تضيف فوق WireGuard طبقة لتوزيع العناوين ومعالجة الخصوصية.
- نسخ معدّلة مثل AmneziaWG: تغيّر ترويسات الحزم والحشو لإخفاء بصمة WireGuard الثابتة، وتُستخدم على الشبكات ذات الفحص الصارم؛ لكنها لا تتوافق مع تطبيقات WireGuard القياسية.
على شبكات الصين
- هل يعمل؟ يتوقف أولًا على UDP: كثير من شبكات الإنترنت المنزلي والجوال تخنق حركة UDP الكبيرة، فيظهر الأمر سريعًا في البداية ثم يبطؤ بعد فترة، أو يتقطع بوضوح في ذروة المساء.
- الاتصال المباشر العابر للحدود سهل التعرّف عليه: حزم مصافحة WireGuard ذات بصمة ثابتة، فقد تُكتشف ويُشوَّش عليها على الروابط العابرة للحدود، فتفشل المصافحة أو تنقطع الحركة بعد فترة من الاستخدام. وهذه نتيجة مباشرة لافتقار البروتوكول إلى التمويه.
- أما الربط بين أجهزة داخل الصين (المكتب والمنزل، الهاتف وجهاز التخزين الشبكي) فلا يمر بالروابط العابرة للحدود، فلا يواجه عادة هذه المشكلة، ويتأثر فقط بخنق UDP ونسبة نجاح اختراق NAT.
- لذلك هو أنسب للشبكات بين الأجهزة والوصول عن بُعد؛ أما العبور الثابت الطويل الأمد للحدود فيحتاج إلى طريقة فيها تمويه أو تعمل عبر TCP / TLS إلى جانبه. مقارنة البروتوكولات في مقارنة بروتوكولات VPN.
أين يستخدم LeoTun بروتوكول WireGuard
طريقة «خاصة» في LeoTun تستخدم Tailscale، ونقل البيانات فيها هو WireGuard: الأنفاق بين أجهزتك، والأنفاق إلى سيرفرات الخروج في كل منطقة، كلها يشفّرها وينقلها WireGuard. ولا تحتاج إلى توليد مفاتيح أو كتابة إعدادات بنفسك، فالتطبيق يتولى ذلك بعد تسجيل الدخول بحسابك على الموقع. طريقة الاستخدام في ما هي «خاصة» (Tailscale)، والمدخل في صفحة «خاصة».
وإلى جانب «خاصة» يتيح الحساب نفسه طرقًا لا تعتمد على UDP: Cisco (AnyConnect) يعمل عبر TLS، وOpenVPN يمكن تشغيله عبر TCP، وHiddify (Hysteria2) مصمَّم لمواجهة فقدان الحزم. فإن كانت «خاصة» بطيئة وغير مستقرة على شبكتك فانتقل إلى طريقة أخرى؛ راجع أي طريقة اتصال تناسب أي حالة.
FAQ
WireGuard أم OpenVPN: أيهما أفضل؟
على الشبكات النظيفة التي لا تقيّد UDP يكون WireGuard أسرع وأوفر للبطارية ولا ينقطع عند تغيير الشبكة؛ وحين تحتاج إلى TCP، أو إلى تسجيل دخول باسم مستخدم وكلمة مرور، أو كان الجهاز قديمًا، فـ OpenVPN أنسب. وكلاهما مفتوح المصدر ومختبَر طويلًا، وكلاهما موثوق من ناحية الأمان.
هل WireGuard آمن؟
يستخدم مجموعة خوارزميات حديثة ومحافظة، وخضع البروتوكول لتحقق رسمي، وكوده صغير يسهل تدقيقه، ولا توجد حتى الآن طريقة عملية معروفة لكسره. لكن انتبه إلى أنه لا يتولى حفظ المفاتيح ولا توزيعها: فإن تسرّب مفتاحك الخاص، أو أعطيت المفتاح العام للطرف الخطأ، فلن يستطيع البروتوكول نفسه مساعدتك.
لماذا يدعم WireGuard بروتوكول UDP فقط؟
إنه خيار تصميمي. فتشغيل TCP داخل اتصال TCP يجعل الطبقتين تعيدان الإرسال معًا عند فقدان الحزم، فينهار الأداء؛ كما أن UDP يسهّل تنفيذ «عدم الرد على الغرباء» والتنقّل. والثمن أنه لا يعمل على الشبكات التي تحجب UDP.
هل يعمل WireGuard في الصين؟
الربط بين الأجهزة داخل الصين يعمل عادة. أما الاتصال المباشر العابر للحدود فغير مستقر: حركته بلا تمويه فيسهل التعرّف عليها والتشويش عليها، إضافة إلى خنق UDP على بعض الخطوط. وللعبور الثابت للحدود تحتاج إلى طريقة فيها تمويه أو تعمل عبر TLS إلى جانبه.
من طوّر WireGuard، ومتى دخل نواة لينكس؟
صمّمه وطوّره Jason A. Donenfeld، وظهر للعلن نحو عام 2015؛ ودُمج في الفرع الرئيسي للنواة مع لينكس 5.6 في مارس 2020، وصدر الإصدار 1.0 في الوقت نفسه.
هل Tailscale هو نفسه WireGuard؟
ليسا الشيء نفسه. WireGuard بروتوكول للأنفاق المشفّرة؛ وTailscale نظام لربط الأجهزة يستخدم WireGuard لنقل البيانات، ويحل فوقه تسجيل الدخول وتوزيع المفاتيح واختراق NAT والترحيل. التفاصيل في Tailscale بالتفصيل.
هل أحتاج إلى ضبط المفاتيح بنفسي لاستخدام WireGuard؟
إن استخدمت WireGuard مباشرة فنعم: تولّد مفتاحًا لكل جهاز، ثم تكتب المفتاح العام والعنوان وعنوان الطرف الآخر في الإعدادات. أما عبر Tailscale أو تطبيقات VPN التجارية فالبرنامج يتولى ذلك عنك. وفي طريقة «خاصة» لدى LeoTun يكفي تسجيل الدخول بحسابك.