Headscale: احصل على كافة ميزات Tailscale بدون رسوم اشتراك!

BBetter Stack
AI/미래기술재택/원격 근무컴퓨터/소프트웨어

Transcript

00:00:00هذا هو Headscale، نسخة مجانية ومفتوحة المصدر من Tailscale يمكنك تثبيتها على أي خادم،
00:00:06مما يمنحك تحكماً كاملاً في شبكتك المشفرة في حال انقطع الإنترنت أو رفعت Tailscale أسعارها فجأة.
00:00:13لكن الغريب هو أن Headscale تم بناؤه بواسطة موظف في شركة Tailscale.
00:00:18لماذا يدفعون لشخص ما لبناء منافس لهم؟
00:00:22اضغط على زر الاشتراك ولنكتشف ذلك معاً.
00:00:25دعونا نرى Headscale وهو يعمل قبل الدخول في أي تفاصيل.
00:00:30حسناً، لدي حالياً ثلاثة خوادم من Hetzner، واحد لمنصة التحكم الرئيسية لـ Headscale، وعقدتان هنا أريد توصيلهما ببعضهما البعض.
00:00:40هاتان العقدتان تشكلان حالياً جزءاً من شبكتي المشفرة.
00:00:44إذا قمت بتشغيل هذا الأمر، وبما أن كل شيء يعمل على Docker، يمكنني رؤية العقد الحالية لدي، وهي Ubuntu Test و Ubuntu Test 2.
00:00:53وهذه هي عناوين الـ IP التي يمكنني استخدامها للاتصال بهما.
00:00:56الآن، لنقم بالاتصال بهاتين العقدتين من داخل بعضهما البعض.
00:00:59أولاً، سأنسخ عنوان الـ IP هذا.
00:01:02والآن داخل Ubuntu Test 2، سأقوم بالدخول عبر SSH كـ root.
00:01:07نعم، لا ينبغي لي استخدام حساب root، لكن هذا لأغراض الاختبار فقط.
00:01:09وهذا هو عنوان الـ IP الخاص بـ Headscale.
00:01:11وإذا ضغطت إدخال ومسحت الشاشة، كما ترون، أنا الآن داخل Ubuntu Test 1.
00:01:17لقد دخلت إلى Ubuntu Test 1 من Ubuntu Test 2، ويمكنني الخروج للعودة إلى Ubuntu Test 2.
00:01:24ويمكنني فعل الشيء نفسه في Ubuntu Test 1 إذا قمت بـ SSH root ولصقت عنوان IP الخاص بـ Ubuntu Test 2.
00:01:31وإذا مسحت الشاشة، يمكننا أن نرى أنني في Ubuntu Test 2 من Ubuntu Test 1.
00:01:36لكن إذا كنت خارج الـ tail net، أي إذا فتحت علامة تبويب جديدة وهي جهاز الماك الخاص بي، ثم حاولت الدخول عبر SSH ولصقت عنوان IP الخاص بـ Ubuntu Test 2...
00:01:48سترون أنه يتوقف تماماً لأنني خارج الـ tail net.
00:01:52كما رأيتم للتو، يمنحكم Headscale وصولاً كاملاً لشبكتكم.
00:01:56يمكنكم التحكم في كل تفصيل صغير وإضافة أي عدد تريدونه من العقد دون التقيد بمزود خدمة معين.
00:02:03ويمكنه العمل بدون إنترنت إذا قمت بتوصيله بجهاز NAS أو Raspberry Pi قديم.
00:02:08لكن الإعداد معقد بعض الشيء.
00:02:11في الواقع، دعوني أريكم كيف يعمل.
00:02:13لقد أنشأت خادماً جديداً باسم Ubuntu Test 3، وسأقوم بإنشاء tail net جديد أو خادم مشفر جديد مع مستخدم جديد سيقوم بتوصيل عقدتين.
00:02:24أي Ubuntu Test 3 و Ubuntu Test 1، فقط لأغراض الاختبار.
00:02:29داخل منصة تحكم Headscale الخاصة بي، قمت بالفعل بتثبيت التطبيق، لكنني سأمر سريعاً على الخطوات التي قمت بها.
00:02:37حالياً، لدي ثلاث حاويات Docker قيد التشغيل.
00:02:40واحدة لواجهة Headscale UI، وواحدة لـ Headscale، والأخرى لـ Caddy.
00:02:45إذا ألقينا نظرة على ملف Docker compose الخاص بذلك، سنرى أن هذا التكوين مشابه جداً للموجود في توثيق Headscale الخاص بـ Docker compose.
00:02:56على الرغم من أنني غيرت بعض الأشياء مثل إصدار Headscale ومسارات المجلدات الخاصة بي.
00:03:03لدي أيضاً حاوية لواجهة Headscale UI، وهي واحدة من العديد من واجهات الويب مفتوحة المصدر التي يمكن استخدامها مع Headscale.
00:03:11وسأريكم إياها لاحقاً.
00:03:13ثم هناك Caddy ليعمل كوكيل عكسي (reverse proxy).
00:03:16سأضع رابطاً لملف Docker compose هذا في الوصف إذا كنتم مهتمين.
00:03:21يوجد أيضاً في هذا المجلد مجلد lib ومجلد config.
00:03:26مجلد lib، كما ترون هنا، مخصص بشكل أساسي للاحتفاظ بقاعدة بيانات SQLite، التي تتحكم في معلومات المستخدمين والعقد والـ DNS وأشياء أخرى كثيرة.
00:03:36لكن في التكوين، يمكنك تغيير هذا إلى قاعدة بيانات Postgres إذا كنت لا ترغب في استخدام SQLite.
00:03:43أما مجلد config، فيحتوي على إعدادات tailscale وسياسة قائمة التحكم في الوصول (ACL) في ملف JSON سهل القراءة.
00:03:52سنتحدث عن هذا لاحقاً، ولكن دعونا نلقي نظرة على هذا أولاً، والذي يمكنك الحصول عليه من توثيق tailscale أو حتى سحبه مباشرة إلى خادمك، وهو ما فعلته.
00:04:01ولكن إذا ألقينا نظرة على التكوين التجريبي في GitHub، يمكننا رؤية كل ما يمكننا تغييره، من الخادم إلى البادئات وإضافة موقع ملف السياسة الخاص بنا.
00:04:11هذا مشابه جداً لإعداداتي، لكن كل ما قمت بتغييره هو رابط الخادم (server URL)، الذي يرتبط بنطاق Cloudflare حتى تتمكن العقد في شبكتي من الوصول إليه ومعرفة مكان العقد الأخرى.
00:04:23أضفت أيضاً مساراً لموقع ملف السياسة الخاص بي، وهذا كل ما في الأمر تقريباً.
00:04:28النطاق هو نطاق Cloudflare عادي مع سجل A يربط عنوان IP لمنصة تحكم headscale تحت النطاق الفرعي headscale.
00:04:37بمجرد وضع ذلك، إذا قمت بفتح ملف caddy، سترون أن لدينا رابطين مستخدمين، واحد لواجهة headscaled تحت مسار /web والآخر لوكيل headscale.
00:04:49بمجرد ضبط هذه الأمور، فإن أول ما يجب فعله هو إنشاء مستخدم جديد، وهو ما يمكننا القيام به عبر كتابة هذا الأمر.
00:04:56سأقوم بإنشاء مستخدم باسم Tom، ولكن يمكن أن يكون أي اسم تريده.
00:05:00الآن بعد إنشاء المستخدم، يمكننا تشغيل أمر عرض المستخدمين لرؤية جميع مستخدمينا، ولدينا مستخدمنا الجديد هنا بمعرف (ID) رقم 6.
00:05:08لكن الآن مستخدمنا ليس لديه أي عقد مرتبطة به.
00:05:11لذا لنعطِ Tom بعض العقد.
00:05:13داخل Ubuntu test 3، وهو الخادم الجديد الذي أنشأته، أول شيء علينا فعله هو إضافة عميل Tailscale، وهو ما يمكننا فعله بتشغيل هذا الأمر في خادمنا.
00:05:23وهذا يمنحنا الآن الوصول إلى ملف Tailscale البرمجي.
00:05:27ملاحظة، إذا لم تكن مستخدماً بصلاحيات root، فقد تضطر لاستخدام sudo لتشغيل Tailscale.
00:05:31لكن قبل تشغيل أي من هذه الأوامر لتشغيل Tailscale أو تسجيل الدخول، نحتاج إلى القيام بذلك بطريقة معينة تعمل مع headscale.
00:05:38للقيام بذلك، سيتعين علينا إنشاء مفاتيح مصادقة مسبقة (pre-auth keys)، والتي يمكننا العثور على أمرها في صفحة البداية في توثيق headscale.
00:05:46سأقوم بالتمرير لأسفل ونسخ هذا الأمر.
00:05:49ثم داخل منصة تحكم headscale، سأكتب docker exec، وألصق الأمر.
00:05:54وهنا في مكان معرف المستخدم (user ID)، سنضيف المعرف الخاص بـ Tom، وهو 6.
00:05:59وقبل فعل ذلك، عليّ إضافة كلمة headscale ثانية لأننا ندخل إلى حاوية headscale.
00:06:04والآن لدينا مفتاح المصادقة المسبق الخاص بنا.
00:06:07ثم سننسخ هذا الأمر ونلصقه في Ubuntu test 3.
00:06:11سنقوم بعد ذلك بنسخ مفتاح المصادقة المسبق ولصقه هنا.
00:06:15وبعد ذلك علينا تغيير خادم تسجيل الدخول هنا إلى خادم headscale الخاص بنا، والذي قمنا بتهيئته ليكون headscale.pandor.css.
00:06:23اسم Pandora كان محجوزاً، وإلا لكنت قد أخذته.
00:06:26الآن إذا ضغطنا إدخال، يجب أن تضاف عقدة جديدة إلى شبكة headscale الخاصة بنا.
00:06:31الآن إذا عدنا إلى منصة التحكم وشغلنا أمر عرض العقد، يجب أن نرى Ubuntu test 3 هنا، وهو ينتمي للمستخدم Tom مع عنوان IP هذا وعنوان IPv6 هذا.
00:06:44الآن لنقم بإضافة Ubuntu test 1 للمستخدم Tom.
00:06:47لكن أولاً سأقوم بحذف عقدة Ubuntu test الموجودة التي تحمل المعرف 1، وسأقوم بحذفها قسراً لتجاوز أي تأكيدات.
00:06:56الآن بعد أن تم ذلك، سأقوم بإنشاء مفتاح مصادقة مسبق آخر وإضافته إلى Ubuntu test، مع عدم نسيان تفعيل SSH باستخدام علامة SSH بما أنها مفعلة مسبقاً.
00:07:06لنذهب أيضاً إلى Ubuntu test 3 ونقوم بإعداد SSH، وهو ما يفعّل ببساطة القدرة على الاتصال عبر SSH.
00:07:13الآن، إذا نظرت إلى قائمة العقد المتاحة، لدي Ubuntu test 1 هنا و Ubuntu test 3، وكلاهما تحت المستخدم Tom.
00:07:20لنتصل بكليهما.
00:07:21سأقوم بأخذ عنوان IP الخاص بـ Ubuntu test 3 والدخول إلى Ubuntu test 1، ثم تشغيل SSH root مع عنوان IP.
00:07:30بمجرد تفعيل المفتاح، يمكننا رؤية أنني داخل Ubuntu test 3 من Ubuntu test 1.
00:07:35ويمكنني أيضاً فعل الشيء نفسه من Ubuntu test 3 إلى Ubuntu test 1.
00:07:41الآن، إذا اتبعت خطواتي بالضبط، فهناك احتمال كبير ألا يعمل هذا معك لأنك بحاجة إلى إضافة سياسة تحكم في الوصول (access control policy).
00:07:49لذا دعوني أريكم سياستي.
00:07:51إذا مسحت الشاشة ودخلت إلى مجلد headscale، يمكننا أن نرى في مجلد التكوين أن لدينا ملف ACL بتنسيق JSON سهل القراءة.
00:08:01وإذا دخلت إليه، فهذا تكوين بسيط جداً يقبل أساساً أي مصدر، أي شخص من شبكتي، إلى أي وجهة أو أي منفذ.
00:08:11وأيضاً تحت SSH، يقبل أي عقدة داخل tail net الخاص بي ويسمح لها بالاتصال بأي عقدة أخرى عبر SSH دون أي موافقة، ولكن فقط لمستخدم root.
00:08:24بالطبع، بناءً على شبكتك ووضعك، قد ترغب في جعل هذا أكثر صرامة أو أماناً بحيث لا يمكن لبعض العقد الاتصال إلا بعقد أخرى عبر منفذ محدد.
00:08:33لكن هذا تكوين بسيط جداً لتبدأ به.
00:08:37ومرة أخرى، سأضع الرابط في الوصف.
00:08:40الآن، قد تتساءلون ماذا عن واجهة Headscale UI؟
00:08:43هل تجعل هذه العملية برمتها أسهل؟
00:08:45أود أن أقول نعم ولا.
00:08:47دعوني أريكم.
00:08:48هذا هو رابط واجهة Headscale UI الخاصة بي، وحالياً يمكنك رؤية كلا المستخدمين، Tess و Tom، مع بعض المعلومات عنهما.
00:08:57المفاتيح والعقد المتصلة ليعمل هذا.
00:09:01في البداية، عليك إضافة مفتاح API لـ Headscale، والذي يمكنك الحصول عليه بتشغيل هذا الأمر.
00:09:06لكن المشكلة التي واجهتها كانت في عرض الأجهزة (device view).
00:09:09كما ترون، لا توجد معلومات كافية هنا، وهو أمر متعلق بخطأ في TypeScript في الكونسول، والذي لا ينبغي أن يكون خطئي لأنني لم أقم بتعديل الكود المصدري.
00:09:22ولكن عند هذه النقطة، يميل التطبيق إلى التجميد، فلا يعمل أي شيء.
00:09:26ومن المفترض أن أتمكن من إضافة جهاز جديد من هنا وتغيير بعض الإعدادات أيضاً.
00:09:32ولكن نظراً لكثرة الأخطاء البرمجية (bugs)، لم أجدها مفيدة جداً.
00:09:35هناك العديد من واجهات Headscale UI الأخرى، بعضها يسهل إضافة سياسات التحكم في الوصول.
00:09:42لكن في رأيي، لم أجد واجهة Headscale UI مفيدة بشكل كبير.
00:09:46نعم، الإعداد معقد قليلاً.
00:09:49حسناً، إنه معقد حقاً.
00:09:51أي شخص ليس لديه خلفية تقنية أو حتى مطور مبتدئ سيعاني في إعداد هذا بمفرده.
00:09:57وهذا على الأرجح هو السبب في أن فريق Tailscale سمح لموظفهم بالعمل على هذا المشروع لأنه لا يشكل تهديداً كبيراً لشركتهم في الوقت الحالي.
00:10:07أعني، كل ما يتطلبه الأمر هو أن يستخدم شخص ما Claude Opus لإنشاء واجهة مستخدم جميلة له وقد يكون لديهم شيء رائع حقاً، وهو ما قد يتم تقييده بواسطة هذا الترخيص.
00:10:18لكن بمجرد أن يعمل كل شيء، فإن Headscale يعمل بشكل مذهل.
00:10:22على الرغم من وجود بعض الميزات التي لا يدعمها بعد، مثل أوامر funnel و serve التي يمكنك استخدامها لعرض خادم بشكل عام أو لشبكتك فقط.
00:10:32إنه لا يدعم شبكات tail nets المتعددة، والعقد المؤقتة، وسجلات تدفق الشبكة الأصلية.
00:10:38لكن بالنسبة لأداة مفتوحة المصدر، فهذا مثير للإعجاب حقاً.
00:10:42وإذا وصلت يوماً إلى مرحلة أريد فيها تشغيل OpenClaw الخاص بي دون اتصال بالإنترنت تماماً مع نموذج لغوي محلي، فقد أفكر في استخدامه.

Key Takeaway

يعتبر Headscale حلاً قوياً ومثالياً للمحترفين الراغبين في امتلاك شبكة مشفرة خاصة ومفتوحة المصدر دون قيود الاشتراك، رغم تعقيد عملية الإعداد والحاجة لمهارات تقنية عالية.

Highlights

يعد Headscale بديلاً مجانياً ومفتوح المصدر لخدمة Tailscale، مما يتيح للمستخدمين إنشاء شبكات مشفرة خاصة (VPN) مع تحكم كامل.

تم تطوير المشروع بشكل مفاجئ من قبل موظف في شركة Tailscale، مما يجعله منافساً مدعوماً بشكل غير مباشر.

يوفر Headscale ميزة العمل بدون إنترنت عند ربطه بأجهزة محلية مثل NAS أو Raspberry Pi، مما يعزز الخصوصية والاستقلالية.

يتطلب إعداد Headscale خبرة تقنية متقدمة، حيث يعتمد بشكل كبير على Docker وأوامر الطرفية (CLI) لتكوين المستخدمين والعقد.

تعد سياسات التحكم في الوصول (ACL) عنصراً حيوياً لتنظيم الاتصال بين الأجهزة داخل الشبكة المشفرة وتأمين الوصول عبر SSH.

واجهات المستخدم الرسومية الحالية لـ Headscale لا تزال تعاني من أخطاء برمجية، مما يجعل التعامل مع سطر الأوامر هو الخيار الأكثر استقراراً.

يفتقر Headscale لبعض الميزات المتقدمة الموجودة في النسخة التجارية مثل أوامر funnel و serve والسجلات الأصلية لتدفق الشبكة.

Timeline

مقدمة عن Headscale وأهمية الاستقلالية

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

استعراض عملي للاتصال بين العقد

يقوم المتحدث بعرض تجربة حية لاستخدام Headscale عبر ثلاثة خوادم مستضافة على منصة Hetzner. يشرح كيفية استخدام Docker لرؤية العقد المتصلة وعناوين IP الخاصة بكل منها داخل الشبكة المشفرة. يوضح الفيديو عملية الدخول عبر SSH من جهاز إلى آخر بسلاسة تامة طالما أن الأجهزة داخل الـ tail net. في المقابل، يظهر فشل محاولة الاتصال من جهاز خارج الشبكة، مما يثبت أمان النظام وفعالية التشفير. يؤكد هذا القسم على قدرة Headscale على إدارة عدد غير محدود من العقد دون قيود خارجية.

التكوين التقني وهيكلية الملفات

ينتقل المتحدث لشرح الجانب التقني العميق لعملية التثبيت باستخدام ملفات Docker compose. يتضمن الإعداد ثلاث حاويات رئيسية هي Headscale، وواجهة المستخدم، ووكيل Caddy العكسي لإدارة النطاقات. يتم تسليط الضوء على قاعدة بيانات SQLite التي تخزن معلومات المستخدمين والـ DNS، مع إمكانية التغيير لـ Postgres. يشرح الفيديو أيضاً كيفية تعديل ملفات التكوين لربط الخادم بنطاق Cloudflare لضمان وصول العقد من أي مكان. تكمن أهمية هذا الجزء في توضيح مدى تعقيد الإعداد الذي يتطلب دقة عالية في ضبط المسارات والإعدادات.

إضافة المستخدمين وتفعيل الأجهزة

يشرح هذا القسم خطوات إضافة مستخدم جديد عبر أوامر الطرفية وربط الأجهزة بحسابه الخاص. يتطلب الأمر إنشاء مفاتيح مصادقة مسبقة (pre-auth keys) لتمكين الأجهزة الجديدة من الانضمام للشبكة بأمان. يطبق المتحدث هذه الخطوات على خادم Ubuntu الجديد، موضحاً ضرورة تثبيت عميل Tailscale أولاً ثم ربطه بعنوان خادم Headscale الخاص. يتم استعراض قائمة العقد للتأكد من نجاح عملية الربط وظهور العناوين الجديدة تحت اسم المستخدم الصحيح. يختتم القسم بإثبات نجاح الاتصال المتبادل عبر SSH بين الأجهزة المضافة حديثاً.

سياسات الوصول ومشاكل واجهة المستخدم

يتناول المتحدث أهمية ملفات ACL (قائمة التحكم في الوصول) التي تحدد من يمكنه الاتصال بمن وبأي صلاحيات. يعرض مثالاً لسياسة بسيطة تسمح بالاتصال الشامل عبر منفذ SSH لمستخدم root، مع التنبيه لضرورة تشديدها في بيئات الإنتاج. ينتقل الفيديو بعد ذلك لنقد واجهة Headscale UI، حيث يوضح وجود أخطاء برمجية في عرض الأجهزة وتجمد التطبيق. يرى المتحدث أن الواجهات الرسومية الحالية لا تزال غير ناضجة بما يكفي للاعتماد الكلي عليها. وبناءً على ذلك، ينصح بالبقاء على استخدام سطر الأوامر لضمان الاستقرار.

الخلاصة والقيود الحالية

يختتم الفيديو بتقييم نهائي يقر فيه المتحدث بصعوبة الإعداد للمبتدئين أو المطورين غير المتخصصين. يحلل سبب سماح Tailscale بوجود مثل هذا المشروع، مرجعاً ذلك إلى كونه لا يشكل تهديداً تجارياً مباشراً حالياً نظراً لتعقيده. يسرد المتحدث بعض الميزات المفقودة مثل دعم شبكات متعددة أو العقد المؤقتة، لكنه يثني على الأداء العام للأداة. يرى أن Headscale هو الخيار الأمثل لمن يريد تشغيل نماذج لغوية محلية (Local LLMs) في بيئة معزولة تماماً عن الإنترنت. في النهاية، يتم التأكيد على أن المشروع يمثل إنجازاً كبيراً في عالم البرمجيات مفتوحة المصدر.

Community Posts

View all posts