In-kernel WireGuard في طريقه إلى FreeBSD وجهاز توجيه pfSense

5

رفقاء غريبون –

ربما لن يتمكن WireGuard من إصدار 13.0-RELEASE ، ولكن يبدو أن 13.1 محتمل جدًا .

. –

 

Screenshot of WireGuard's fearsome logo.

تكبير / ستحصل FreeBSD على وحدة داخل النواة WireGuard في المستقبل القريب ، بفضل مساهمة برمجية برعاية من Netgate ، متبوعًا برمز إضافي ومراجعة من Jason Donenfeld والعديد من مطوري FreeBSD و OpenBSD.

هذا الصباح ، أعلن المطور المؤسس لشركة WireGuard ، جيسون دوننفيلد ، عن تنفيذ عملي داخل النواة لبروتوكول WireGuard VPN الخاص به لنواة FreeBSD 13. هذه أخبار رائعة لأفراد BSD – ومستخدمي أجهزة التوجيه القائمة على BSD والتوزيعات مثل pfSense و opnSense.

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

بعد

كتابة نصوص مراقبة لمحاولة اكتشافها وإعادة إنشائها تلقائيًا – تمزيقها بالكامل واستبدالها شبكة المراقبة هذه التي تتكون من عدة مئات من الآلات مع البنية التحتية القائمة على WireGuard قللت ذلك إلى “صفر ساعة في الشهر”. بالإضافة إلى الأداء والموثوقية ، يجلب WireGuard الحديث البروتوكولات ، والتشفير ذو الإصدار الذي لا يمكن إعداده بشكل غير صحيح حرفيًا ، وقاعدة كود برمجية أنظف وأخف بكثير من معظم المنافسين – أعلن Linus Torvalds ذات مرة أنه “عمل فني” بالمقارنة مع OpenVPN و IPSec.

السياسة في النواة

على الرغم من أن WireGuard قد هبطت في نواة Linux أولاً ، إلا أن إدراجها في نواة FreeBSD كان منذ فترة طويلة في خارطة الطريق العامة. في فبراير 2020 ، دفع Matt Macy مطور FreeBSD أول التزام متعلق بـ WireGuard لـ FreeBSD. تم تكليف عمل Macy بشكل مباشر من قبل Netgate ، الشركة التي تقف وراء توزيع جهاز التوجيه pfSense القائم على BSD.

بعد ما يقرب من عام من العمل ، تم استيراد ميناء ميسي إلى النواة المجدولة لـ FreeBSD 13.0-RELEASE ، والتي من المتوقع إطلاقها في غضون 15 يومًا. لسوء الحظ ، كانت هناك مشكلة – بعد أن استعرضها Jason Donenfeld من WireGuard جنبًا إلى جنب مع العديد من مطوري FreeBSD و OpenBSD ، تم الحكم عليها بأنها غير جاهزة لوقت الذروة:

تخيلت أصواتًا غريبة على الإنترنت تسخر ، “هذا ما يعطي C اسمًا سيئًا!” تمت إضافة فترات نوم عشوائية إلى “إصلاح” ظروف السباق ، ووظائف التحقق من الصحة التي عادت للتو ، ونقاط ضعف التشفير الكارثية ، وأجزاء كاملة من البروتوكول غير مُنفَّذ ، ونوبات ذعر النواة ، وتجاوزات الأمان ، والتدفقات ، وعبارات printf العشوائية العميقة في كود التشفير ، والمخزن المؤقت الأكثر إثارة الفائض ، وسلسلة كاملة من الأشياء الفظيعة التي تسوء عندما لا يكون الناس حذرين عندما يكتبون C.

هذا ، مفهوم ، قدم مشكلة رئيسية بالنسبة إلى Donenfeld – على الرغم من أن بروتوكول WireGuard نفسه مفتوح المصدر ، إلا أن هناك ما هو أكثر من المشروع أكثر من الكود الخاص به. إن الكثير مما دفع الارتفاع النيزكي لـ WireGuard في المقام الأول هو اختصارها وصحتها ، كما تم تقييمها من قبل مؤسس Linux Linus Torvalds والتي انعكست في موثوقية المشروع وعدم وجود عيوب كبيرة منذ أن أصبحت شائعة. قد يؤدي تطبيق أقل من ممتاز في FreeBSD إلى إتلاف العلامة التجارية لـ WireGuard – وربما بشكل لا رجعة فيه. ترك هذا منفذ FreeBSD عالقًا بين المطرقة والسندان – اعتقد دونينفيلد أن الكود الذي ترعاه Netgate لم يكن جاهزًا للاستهلاك العام ، لكن Netgate أعلنت بالفعل عن دعم WireGuard في pfSense القادم. مدركًا لموقف Netgate المكشوف ، توصل Donenfeld إلى FreeBSD الأساسي المطورون كايل إيفانز ومات دنوودي ، والثلاثة انخرطوا في رحلة مجنونة لمدة أسبوع لجعل الشفرة الإشكالية على قدم المساواة. يصف دونينفيلد جزءًا واحدًا من العملية:

… كان هناك 40000 سطر من تطبيقات التشفير المحسّنة التي تم سحبها من وحدة Linux kernel المتوافقة ولكن ليس تم توصيله بشكل صحيح بالفعل ، ومشوه بشكل لا يمكن إصلاحه مع متاهات Linux → FreeBSD ifdefs. انتهيت من استبدال هذا بملف 1800 سطر ، crypto.c ، يحتوي على جميع أساسيات التشفير اللازمة لتطبيق WireGuard.

هذا هو يتماشى كثيرًا مع طريقة عمل الترميز المعتادة في دوننفيلد – السبب في أن WireGuard على Linux هو 4000 سطر من التعليمات البرمجية لـ OpenVPN’s 400000 له علاقة كبيرة بتجريد cruft الموروثة واستبدالها بما يكفي من التعليمات البرمجية المركزة بإحكام للقيام بالمهمة.

لسوء الحظ بالنسبة لـ Netgate ، لا يبدو أن الكود الذي ترعاه ولا سباق الجري لمدة أسبوع بواسطة Donenfeld و Dunwoodie و Evans من المحتمل أن يصلوا إلى FreeBSD 13.0. تم تقديمه بمنفذ معيب للغاية وإصلاح شامل آخر سريع للغاية ، ومن المرجح أن يقوم فريق FreeBSD بتعطيل وحدة WireGuard بالكامل لـ 13.0-RELEASE وإعادة النظر في 13.1-RELEASE.
الجدل الماضي والحاضر التنمية

من الواضح أن هذا التعاون لم يكن كل شيء سلسًا. أعرب دونينفيلد عن بعض الإحباط فيما يتعلق بفشل Netgate في التواصل معه بشكل مباشر ، و- بمجرد اكتشافه للميناء الذي تم تكليفه به- عدم اهتمام واضح بالعمل معه:

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

هذا إلى حد ما تضارب مصالح مفتوح المصدر نموذجي – يستعين المشروع أ بالمطور “ب” لإنجاز x من ساعات العمل ، لكن المشروع ذي الصلة “ج” يقول إن الأمر يستغرق × ساعتين من العمل للقيام بذلك بشكل صحيح. مع وجود خطوط اتصال جيدة وحد أدنى من الأنا ، عادة ما تكون هناك طريقة لحل هذا النوع من الصراع – لكن التاريخ الإشكالي مثل تاريخ Netgate يمكن أن يضر بسهولة خطوط الاتصال هذه. على الرغم من ذهاب وإياب ، يجب اعتبار هذا المنفذ قصة نجاح كلاسيكية لتطوير البرمجيات مفتوحة المصدر. حصلت لجنة مطوري Netgate الأولية على الكرة للحصول على إضافة قيمة للغاية إلى نواة FreeBSD. جذبت هذه اللجنة بدورها الاهتمام وأعمال المتابعة الرئيسية من كل من مطوري WireGuard و FreeBSD الأساسيين ، وستؤدي في النهاية إلى منفذ WireGuard عالي الجودة وموثوق لمستخدمي FreeBSD – بالإضافة إلى Netgate.