لماذا إعادة النظر في شبكة mesh في عام 2026
Tailscale لا ينقل حركة البيانات الخاصة بك: تنتقل حزم WireGuard مباشرةً بين أجهزتك، مشفرةً من طرف إلى طرف. ما تديره Tailscale في السحابة هو مستوى التحكم — تبادل المفاتيح العامة، واكتشاف الأقران، وتعيين عناوين 100.x.x.x، وحل MagicDNS، وتوزيع مرحلات DERP. يمكنك استضافة هذا المستوى بنفسك باستخدام Headscale. في عام 2026، تجعل الزيادة في الأسعار هذا الخيار واضحاً مالياً لأي فريق يضم شخصين على الأقل ضمن خطة مدفوعة.
- تحكم كامل في البيانات: لا تمر أي قائمة بأجهزتك أو عناوين IP الداخلية أو أسماء العقد أو سجلات الاتصال عبر خادم جهة خارجية.
- لا حدود للعقد أو المستخدمين يفرضها البرنامج: Headscale محدود فقط بموارد خادم VPS الخاص بك.
- توافق كامل مع عملاء Tailscale الرسميين: علامة
--login-serverكافية للإشارة إلى مستوى التحكم الخاص بك. - MagicDNS على نطاقك الخاص: كل عقدة يمكن الوصول إليها باسمها المختصر ضمن اللاحقة التي تختارها.
- OIDC اختياري: تفويض المصادقة إلى Keycloak أو Authelia أو أي مزود OIDC متوافق.
- استدامة تشغيلية: لا تعتمد شبكتك mesh بعد الآن على قرار تسعير أو انقطاع خارجي.
- صيانة معقولة: تحديث حزمة كل بضعة أسابيع، ونسخ احتياطي لـ SQLite قابل للجدولة في سطر cron واحد.
التحليل المالي: نقطة التعادل
تبقى خطة Tailscale Personal مجانية لما يصل إلى ستة مستخدمين للاستخدام غير التجاري. بمجرد الانتقال إلى خطة Standard — فريق احترافي، وصول متعدد المستخدمين، أو ميزات ACL الموسعة — تبلغ التكلفة 8 دولارات لكل مستخدم شهرياً. يكفي خادم VPS بـ 1 vCPU و1 جيجابايت RAM لتشغيل Headscale لعشرات العقد؛ يعمل بأقل من 64 ميجابايت RAM في وضع الخمول. تبدأ تكلفة هذا الخادم في ServOrbit بضعة يوروهات شهرياً.
Tailscale Standard مقابل Headscale على VPS
مرّر الجدول أفقيًا
| المعيار | Tailscale Standard | Headscale على VPS |
|---|---|---|
| التكلفة الشهرية (مستخدم واحد) | $8 | تكلفة VPS (~99 درهم/شهر) |
| التكلفة الشهرية (5 مستخدمين) | $40 | تكلفة VPS (~99 درهم/شهر) |
| التكلفة الشهرية (10 مستخدمين) | $80 | تكلفة VPS (~99 درهم/شهر) |
| Funnel / Serve | مضمّن | غير متوفر |
| تسجيل SSH | خطة Premium فقط | غير متوفر |
| الصيانة | لا شيء (خدمة مدارة) | ساعتان/شهر (تحديثات، نسخ احتياطية) |
| التحكم في البيانات | سحابة Tailscale | خادمك الخاص |
| حد العقد | 100 (Standard) | لا حد برمجي |
| حد المستخدمين | غير محدود في Standard | لا حد برمجي |
المتطلبات التقنية المحددة
Headscale خفيف: يكفي VPS اقتصادي لإدارة عشرة عقد. إليك الموارد الدنيا والمنافذ المطلوبة.
- خادم VPS يعمل بـ Debian 11/12 أو Ubuntu 22.04/24.04 — 1 vCPU، 512 ميجابايت RAM كحد أدنى (يعمل Headscale بأقل من 64 ميجابايت في الخمول؛ يُنصح بـ 1 جيجابايت للهامش).
- المنفذ TCP 443 مفتوح للاتصالات الواردة: يتصل العملاء به للتسجيل واسترجاع الإعدادات عبر HTTPS.
- المنفذ UDP 3478 مفتوح: يُستخدم لتفاوض STUN (اكتشاف عناوين المرشحين للاتصالات المباشرة).
- المنفذ UDP 41641 مفتوح: منفذ إشارات WireGuard الذي يستخدمه عملاء Tailscale للتواصل مع المنسق.
- اسم نطاق أو نطاق فرعي يشير إلى الخادم VPS: مطلوب للحصول على شهادة TLS صالحة.
- قاعدة بيانات SQLite مدمجة: لا يحتاج Headscale إلى قاعدة بيانات خارجية — ملف SQLite واحد في
/var/lib/headscale/يكفي لمئات العقد.
تثبيت Headscale على VPS من ServOrbit
تبدأ الخطوات التالية من VPS Debian 12 نظيف. التثبيت يستغرق أقل من عشر دقائق.
تحديث النظام وتثبيت التبعيات
اتصل بـ SSH وقم بتحديث الحزم:
apt update && apt upgrade -yثبّت nginx وcertbot لـ reverse proxy بـ HTTPS:
apt install -y nginx certbot python3-certbot-nginxتنزيل حزمة Headscale وتثبيتها
يوفر Headscale v0.29.4 (سبتمبر 2026) حزم
.debلـ amd64 وarm64. نزّل وثبّت:
curl -Lo /tmp/headscale.deb https://github.com/juanfont/headscale/releases/download/v0.29.4/headscale_0.29.4_linux_amd64.deb
dpkg -i /tmp/headscale.debتحقق من التثبيت: يجب أن يعيد الأمر
headscale versionالقيمة0.29.4. على ARM64، استبدل linux_amd64بـ linux_arm64.إعداد Headscale
تُنشئ الحزمة المستخدم النظامي headscale والمجلد
/etc/headscale/. عدّل الإعداد الأدنى:
nano /etc/headscale/config.yamlعيّن على الأقل:
server_url: https://headscale.your-domain.com، وlisten_addr: 0.0.0.0:8080، وdb_type: sqlite3، وdb_path: /var/lib/headscale/db.sqlite، وفي dns_config: magic_dns: true، وbase_domain: your-domain.com. أنشئ مجلد البيانات: mkdir -p /var/lib/headscale && chown headscale:headscale /var/lib/headscale.تفعيل الخدمة وتشغيلها
تُثبّت الحزمة وحدة systemd تلقائياً:
systemctl enable --now headscaleتحقق من الحالة:
systemctl status headscale. يجب أن تُظهر المخرجات Active: active (running). في حالة وجود خطأ، راجع السجلات: journalctl -u headscale -f. الخطأ الأكثر شيوعاً عند أول تشغيل هو server_urlمُشكّل بشكل خاطئ — يجب أن يبدأ بـhttps://.إعداد reverse proxy بـ HTTPS
احصل على شهادة Let's Encrypt وأعدّ nginx:
certbot --nginx -d headscale.your-domain.comفي vhost الخاص بـ nginx، أضف في كتلة
location /:
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;أعد تحميل nginx:
systemctl reload nginx. تحقق من أن https://headscale.your-domain.com/healthيُعيد {"status":"pass"}.إنشاء أول مستخدم ومفتاح مسبق للمصادقة
ينظّم Headscale العقد حسب المستخدمين. أنشئ أول مستخدم:
headscale users create my-teamأنشئ مفتاحاً مسبقاً للمصادقة (preauthkey) لتسجيل الأجهزة دون موافقة يدوية:
headscale preauthkeys create --user my-team --expiration 24hانسخ المفتاح المُعاد — ستحتاجه عند نقل العملاء. يسمح خيار
--reusableبإعادة استخدام نفس المفتاح لأجهزة متعددة.فتح المنافذ اللازمة في جدار الحماية
إذا كان خادم VPS يستخدم
ufw، افتح المنافذ المطلوبة:
ufw allow 443/tcp
ufw allow 3478/udp
ufw allow 41641/udpإذا كنت تستخدم
iptablesمباشرة أو لوحة أمان (CSF أو Imunify360)، أضف هذه المنافذ إلى قائمة المنافذ الواردة المسموح بها. تحقق من جهاز خارجي من إمكانية الوصول إلى منافذ UDP قبل نقل عملائك.
نقل العملاء من Tailscale في 3 خطوات
لا تتطلب عملية النقل إعادة تثبيت عملاء Tailscale. يدعم العميل الرسمي علامة --login-server منذ إصدارات عدة؛ كل ما عليك هو قطع اتصال العميل بالشبكة القديمة وإعادة توصيله بخادم Headscale الخاص بك. حركة بيانات WireGuard بين العقد لا تنقطع خلال عملية النقل — فقط نافذة قصيرة من قطع الاتصال/إعادة الاتصال (بضع ثوانٍ لكل عقدة) تُسبب انقطاعاً مؤقتاً.
قطع اتصال العميل بشبكة Tailscale الحالية
على كل جهاز تريد نقله، اقطع اتصال العميل بشبكة Tailscale:
tailscale logoutعلى macOS وWindows، استخدم قائمة شريط النظام: انقر بزر الماوس الأيمن على أيقونة Tailscale ← Log out. على iOS وAndroid، اذهب إلى إعدادات التطبيق ← Log out. تلغي هذه الخطوة المصادقة على الشبكة القديمة لكنها لا تُلغي تثبيت العميل.
إعادة توصيل العميل بخادم Headscale الخاص بك
أعد توصيل العميل مُشيراً إلى خادم Headscale الجديد. على Linux:
tailscale up --login-server https://headscale.your-domain.com --authkey YOUR_PREAUTHKEYعلى macOS، من الطرفية:
tailscale up --login-server https://headscale.your-domain.com --authkey YOUR_PREAUTHKEYإذا لم تُمرر مفتاح preauthkey، يعرض العميل عنوان URL للمصادقة لتأكيده من جانب الخادم بـ:
headscale nodes register --user my-team --key <NODE_KEY>. تحقق من التسجيل: يجب أن يُظهر headscale nodes listالعقدة بحالة online.التحقق من الاتصال بين العقد المنقولة
من عقدة منقولة، تحقق من رؤية العقد الأخرى:
tailscale statusيجب أن تُظهر القائمة جميع العقد المسجلة على خادم Headscale بعناوين IP mesh الخاصة بها (
100.64.x.x). اختبر الاتصال المباشر بـ ping: ping 100.64.0.2. حالة active (direct)تؤكد إنشاء اتصال WireGuard دون مرحّل. إذا فعّلت MagicDNS، اختبر الحل: ping node-name.your-domain.com.نقل العقد المتبقية وإغلاق حساب Tailscale
كرر الخطوتين السابقتين لكل جهاز. انقل أجهزة التطوير أو الاختبار أولاً للتحقق من العملية، ثم أجهزة الإنتاج. بعد نقل جميع العقد والتحقق منها، يمكنك إغلاق حساب Tailscale أو التخفيض إلى خطة Personal إذا كان لديك استخدامات شخصية (ستة مستخدمين كحد أقصى، مجاناً). احتفظ بمفتاح preauthkey المستخدم أو أنشئ مفتاحاً جديداً للعقد المستقبلية.
إعداد قوائم ACL ونظام DNS الداخلي
يُدير Headscale سياسات الوصول عبر ملف سياسة بصيغة HuJSON (JSON موسّع بتعليقات)، متوافق مع صياغة Tailscale ACL. يُحدد هذا الملف المستخدمين أو المجموعات التي يمكنها الوصول إلى أي عقد على أي منافذ. بشكل افتراضي، يمكن لجميع العقد في نفس شبكة Headscale التواصل فيما بينها على جميع المنافذ — هذا السلوك المفتوح يناسب فريقاً صغيراً موثوقاً، لكن يجب تقييده عندما تتعايش عقد بمستويات ثقة مختلفة على نفس الشبكة.
- عدّل ملف السياسة:
headscale policy set --policy-file /etc/headscale/policy.hujson - عرّف مجموعات المستخدمين (
groups) وقوائم ACL لكل منفذ لفصل الوصول بين بيئات dev وstaging وprod. - فعّل split DNS لحل الأسماء الداخلية: في
dns_config، عرّف nameserversبخوادم DNS الداخلية وsearch_domainsللبادئات. - صدّر ملف السياسة وضعه تحت إصدار في مستودع Git خاص — هذا يسهّل عمليات المراجعة والتراجع.
- اختبر تغييرات السياسة على عقدة اختبارية قبل تطبيقها على الشبكة بالكامل:
headscale policy check.
التصليب والنسخ الاحتياطي والتحديثات التلقائية
بعض الاحتياطات لتثبيت متين. انسخ قاعدة بيانات SQLite احتياطياً بانتظام: cp /var/lib/headscale/db.sqlite /backup/headscale-$(date +%Y%m%d).sqlite — مهمة cron يومية أو سكريبت نحو تخزين S3 يكفي. انسخ أيضاً المفاتيح الخاصة في /var/lib/headscale/private.key و/var/lib/headscale/noise_private.key: تُوقّع هوية خادمك ولا يمكن إعادة توليدها دون إجبار جميع العقد على إعادة الاتصال. قيّد الوصول إلى واجهة برمجة إدارة Headscale (منفذ gRPC 50443) إلى 127.0.0.1 فقط — لا تعرّضها للإنترنت مباشرة.
استكشاف المشكلات الشائعة وحلها
الأخطاء الأكثر شيوعاً بعد الترحيل وحلولها.
- تظهر العقدة بحالة
offlineفي headscale nodes list: تحقق من أن المنافذ UDP 3478 و41641 مفتوحة من جانب VPS. اختبر من جهاز خارجي بـ nc -vzu headscale.your-domain.com 41641. - يُظهر الاتصال
relayبدلاً من direct: تحدث الاتصالات غير المباشرة عبر DERP عندما لا تستطيع العقدتان التواصل مباشرة (NAT صارم، جدار حماية). شغّل tailscale netcheckعلى كلا العقدتين لتحديد قيود الشبكة. - لا يحل MagicDNS الأسماء: تحقق من تعريف
magic_dns: trueوbase_domainفي إعداد Headscale، ومن أن العميل استرجع إعداد DNS الجديد بعد إعادة الاتصال (tailscale status --self). - شهادة TLS غير صالحة عند التشغيل: يجب أن يتطابق
server_urlفي config.yamlتماماً مع نطاق الشهادة. URL يبدأ بـ http://بينما يتوقع nginx https://يُسبب حلقة إعادة توجيه لا نهاية لها. - لا يرى عملاء macOS أو Windows خيار
--login-serverفي الواجهة الرسومية: استخدم الطرفية دائماً للنقل. الواجهة الرسومية لـ Tailscale لا تسمح بتغيير خادم التنسيق؛ فقط سطر الأوامر يدعم ذلك.
ما لا يستطيع Headscale استبداله
ينفّذ Headscale بروتوكول مستوى تحكم Tailscale، لكن ليس مجموعة الميزات الكاملة للمنصة التجارية. Tailscale Funnel (نشر الخدمات المحلية على الإنترنت) وServe (reverse proxy محلي) غير متوفرَين في Headscale. تسجيل SSH (تسجيل جلسات SSH عبر الشبكة) ميزة Tailscale Premium غائبة عن Headscale. هذه الثغرات موثّقة وثابتة: يتتبع مشروع Headscale توافق البروتوكول بنشاط، لا تكافؤ ميزات الواجهة. إذا اقتصر استخدامك على الاتصال بشبكة mesh وMagicDNS وقوائم ACL — حالة الغالبية العظمى من الفرق التقنية — فإن Headscale يغطي الحاجة بالكامل. إذا كنت تستخدم Funnel أو تسجيل SSH بنشاط، قيّم ما إذا كانت تلك الميزات تبرر فرق التكلفة قبل النقل.