استضافة خادم NetBird VPN ذاتياً على VPS
شغّل NetBird على VPS واحد مع إعداد DNS وTLS، وثبّت سكربت التثبيت السريع، وأنشئ مفاتيح إعداد للأجهزة غير التفاعلية، ثم قارنه بـ Headscale.
ما الذي يوفّره استضافة خادم NetBird VPN ذاتياً
يضع تشغيل خادم NetBird VPN ذاتياً طبقة التحكم على VPS تملكه أنت. وهي الجزء الذي يحتفظ بقائمة الأقران، ويحدّد الجهاز الذي يمكنه الوصول إلى جهاز آخر، ويساعد جهازين متصلين عبر NAT (ترجمة عناوين الشبكة) في العثور أحدهما على الآخر. أما الأنفاق نفسها فتبقى أنفاق WireGuard، مع تشفير مباشر بين أجهزتك. ما يتغيّر هو أن شركة خارجية لا تعود تحتفظ بقائمة أجهزتك أو تدير عملية تسجيل دخولك. يجب أن تكون واضحاً بشأن ما يوفّره ذلك، لأن طبقة التحكم المستضافة لا تحتفظ أصلاً بالمفاتيح التي تشفّر حركة مرورك، كما أن ما يستطيع خادم التنسيق فعلياً فعله إذا تعرّض للاختراق أضيق مما يفترضه معظم الناس قبل قراءة ذلك.
يقع NetBird بين تقنيتين قد تكون على دراية بإحداهما. فهو overlay شبكي، لذلك تتصل الأقران بعضها ببعض بدلاً من إرسال كل شيء عبر بوابة واحدة. كما يمكن استضافته ذاتياً من البداية إلى النهاية، وهذا يضعه في مقابل خادم التحكم Headscale المستضاف ذاتياً لـTailscale. إذا لم تشغّل من قبل سوى نفق ببوابة واحدة، فاقرأ أولاً الفرق بين WireGuard العادي وmesh overlay، لأن هذا النموذج الذهني هو ما يجعل بقية هذه الصفحة مفيدة.
إذا كان ما تريده فعلياً هو خادم واحد تخرج منه كل حركة مرورك، فإن mesh يضيف مكونات أكثر مما يتطلبه هذا الهدف. يحقق نفق WireGuard عادي على VPS واحد أو عقدة خروج Tailscale ذلك بجهد تشغيل أقل بكثير. وإذا كان الهدف هو الوصول إلى شبكة خاصة واحدة بدلاً من ربط الأجهزة بعضها ببعض، فإن موجّه شبكة فرعية لـTailscale على VPS يعلن عن ذلك النطاق إلى tailnet لديك مسبقاً، من دون الحاجة إلى أي مكوّن من المكونات الواردة أدناه.
ما الذي يشغّله المكدس فعلياً
تغيّر التخطيط مؤخراً، ومعظم الشروحات الأقدم تصف التخطيط السابق. اعتباراً من August 2026، وفي الإصدار v0.76.2، يكتب quickstart script ملف Compose يضم ثلاث خدمات افتراضياً.
netbird-serverيتولى management API، وخدمة الإشارات، وrelay مع مستمع STUN مضمّن، وموفّر هوية مضمّن. في الإصدارات الأقدم، كانت هذه المكونات حاويات منفصلة، وكان موفّر الهوية تثبيت Zitadel منفصلاً يجب أن تنشئه أولاً.dashboardهو وحدة تحكم الويب الإدارية.traefikينهي TLS (أمن طبقة النقل)، ويطلب شهادة من Let's Encrypt عند التشغيل الأول.
توجد خدمتان إضافيتان، وتبقيان متوقفتين ما لم توافق عليهما عند ظهور المطالبة. تنشر خدمة NetBird Proxy الخدمات الداخلية على أسماء مضيفين عامة. وتعمل CrowdSec على تصفية حركة الشبكة المسيئة. لا تحتاج إلى أي منهما لإنشاء mesh عاملة، وكلتاهما تستهلكان الذاكرة على خادم صغير.
إذا كنت تنتقل من wg-easy في حاوية Docker واحدة، فهذه زيادة في عدد المكونات. وما تحصل عليه مقابل ذلك هو سياسات وصول وحسابات لكل مستخدم، إضافة إلى peers تتصل ببعضها مباشرة بدلاً من المرور عبر بوابة واحدة.
ما تحتاج إليه قبل البدء
اسم نطاق عام ليس اختيارياً. تعمل لوحة المعلومات وواجهة API وخدمة الترحيل جميعاً عبر HTTPS على المنفذ 443، ويحصل Traefik على شهادته من Let's Encrypt باستخدام تحدي HTTP. يتطلب ذلك اسماً يُحل إلى عنوان VPS هذا من الإنترنت العام. لن يعمل عنوان IP مجرداً في هذا السيناريو.
أنشئ سجل A واحداً، netbird.example.com، يشير إلى عنوان IPv4 العام لـVPS، وانتظر حتى ينتشر قبل تشغيل أي شيء.
dig +short netbird.example.comيجب أن يطبع ذلك عنوان خادمك. إذا شغّلت برنامج التثبيت قبل انتشار DNS، فسيفشل طلب الشهادة عند التشغيل الأول. كما أن تكرار عمليات التحقق الفاشلة قد يتجاوز حدود المعدل في Let's Encrypt، وعندها ستنتظر ساعة قبل المحاولة مجدداً.
يجب أن تكون 3 منافذ قابلة للوصول من الإنترنت: TCP 80 لتحدي الشهادة وإعادة التوجيه إلى HTTPS، وTCP 443 للوحة المعلومات وواجهة API وحركة signal والـrelay، وUDP 3478 لـSTUN.
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 3478/udp
sudo ufw reload
sudo ufw statusافتح هذه المنافذ أيضاً في جدار الشبكة الناري لدى مزود الخدمة. هذا عنصر تحكم منفصل في معظم لوحات VPS، وهو سبب استمرار رفض الاتصالات رغم أن إعداد ufw status المحلي في الخادم يبدو صحيحاً.
STUN، أي أدوات عبور الجلسات عبر NAT، هو الذي يتيح لأحد النظراء معرفة العنوان العام والمنفذ اللذين خصّصهما NAT الخاص به، حتى يتمكن النظيران من محاولة إنشاء نفق مباشر. إذا حظرت UDP 3478، فسيستمر اتصال النظراء عبر الـrelay على TCP 443، ولذلك قد لا يبدو أي شيء معطلاً. لكنك ستحصل على Connection type: Relayed لدى كل نظير، وستعبر كل حركة الشبكة VPS الخاص بك بدلاً من انتقالها مباشرة بين النظراء.
على مستوى البرمجيات، تحتاج إلى Docker مع إضافة Compose v2، إضافة إلى jq وcurl. يتحقق البرنامج النصي من وجودها جميعاً ويتوقف إذا كان أحدها مفقوداً. إذا كان Docker حديث التثبيت على هذا الخادم، فابدأ أولاً بـتشغيل Docker Compose على VPS.
المنافذ عند تخطي الـreverse proxy المضمّن
يعني التشغيل من دون Traefik كشف الخدمات الفردية مباشرة، وتصبح قائمة المنافذ أطول:
- TCP 80، إعادة توجيه HTTP
- TCP 443، HTTPS
- TCP 33073، management gRPC
- TCP 10000، signal gRPC
- TCP 33080، relay عبر WebSocket أو QUIC
- UDP 3478، STUN
اختر هذا الخيار فقط عندما يتولى الخادم إنهاء TLS لخدمة أخرى مسبقاً. وإلا فإن Traefik المضمّن يتطلب قواعد أقل ويؤدي إلى أخطاء أقل.
ثبّت خادم NetBird باستخدام البرنامج النصي للتثبيت السريع
يُمرِّر الأمر المختصر الموثَّق أحدث إصدار مباشرةً إلى shell:
curl -fsSL https://github.com/netbirdio/netbird/releases/latest/download/getting-started.sh | bashثبّت إصداراً محدداً بدلاً من ذلك. يتغير latest، لذلك ينتج عن تشغيل الأمر نفسه بعد أسبوعين تثبيتان مختلفان، ولا يسجل أي شيء على القرص الإصدار الذي كتب إعداداتك. نزّل إصداراً موسوماً، واقرأه، ثم شغّله.
mkdir -p ~/netbird
cd ~/netbird
curl -fsSL -o getting-started.sh \
https://github.com/netbirdio/netbird/releases/download/v0.76.2/getting-started.sh
less getting-started.sh
bash getting-started.shيسألك البرنامج النصي عن النطاق أولاً:
Enter the domain you want to use for NetBird (e.g. netbird.my-domain.com):ثم يسألك عن طريقة التعامل مع TLS:
Which reverse proxy will you use?
[0] Traefik (recommended - automatic TLS, included in Docker Compose)
[1] Existing Traefik (labels for external Traefik instance)
[2] Nginx (generates config template)
[3] Nginx Proxy Manager (generates config + instructions)
[4] External Caddy (generates Caddyfile snippet)
[5] Other/Manual (displays setup documentation)
Enter choice [0-5] (default: 0):اختر [0]. تكتب الخيارات من 2 إلى 5 مقتطفاً من الإعدادات وتترك عملية الربط لك. هذا صحيح على خادم يشغّل Proxy مسبقاً، لكنه غير صحيح على خادم جديد. بعد ذلك يطلب الخيار 0 عنوان بريد إلكتروني في Let's Encrypt لإرسال إشعارات انتهاء الصلاحية.
ارفض خدمة NetBird Proxy عند التثبيت الأول. فهي تتطلب سجلي DNS إضافيين، proxy.netbird.example.com وwildcard *.proxy.netbird.example.com، ولا تقدم أي فائدة لشبكة mesh عادية. ارفض CrowdSec أيضاً. يمكنك إضافة كلتيهما لاحقاً.
يكتب البرنامج النصي الملفات في الدليل الحالي: docker-compose.yml، وconfig.yaml بالوضع 600، وdashboard.env، وtraefik-dynamic.yaml عند اختيار Traefik المضمّن. تعامل مع هذا الدليل على أنه state يجب الاحتفاظ به، لأن config.yaml يحتوي على المفتاح الذي يشفّر البيانات في مخزن البيانات. لا يعالج إعادة التثبيت فقدان هذا المفتاح.
docker compose ps
docker compose logs -f netbird-serverيجب أن تقرأ كل خدمة running، ويجب أن يستقر سجل الخادم بدلاً من إعادة التشغيل في حلقة. راقب الشهادة بشكل منفصل:
docker compose logs traefik | grep -i acmeACME (بيئة إدارة الشهادات التلقائية) هو البروتوكول الذي يستخدمه Traefik للحصول على الشهادة. تكون الأخطاء هنا في الغالب بسبب DNS أو إغلاق المنفذ 80.
إنشاء حساب المسؤول الأول
افتح https://netbird.example.com. في التثبيت الجديد، ستظهر صفحة إعداد بدلاً من نموذج تسجيل الدخول. أدخل عنوان بريد إلكتروني واسماً وكلمة مرور، ثم انقر على Create Account. سيصبح هذا الحساب حساب المسؤول الأول، وستعيد الصفحة توجيهك إلى نموذج تسجيل الدخول.
يُخزَّن هذا الحساب في مخزن المستخدمين الخاص بـNetBird، ويشغّله موفّر هوية مضمّن في الحاوية netbird-server. لا توجد أي مكوّنات خارجية. وهذا هو أكبر تغيير مقارنةً بإصدار NetBird المستضاف ذاتياً قبل عام، إذ كان التثبيت العامل يتطلب أولاً إعداد Zitadel أو Keycloak، ثم نسخ أربع قيم OIDC (OpenID Connect) إلى setup.env قبل أن يبدأ أي شيء على الإطلاق.
إذا ظهر تحذير بشأن شهادة المتصفح بدلاً من صفحة الإعداد، فهذا يعني أن الشهادة لم تُصدر. أصلح ذلك قبل المتابعة، لأن لوحة المعلومات تتصل بواجهة API باستخدام اسم المضيف نفسه، وتفشل بطرق مربكة عند وجود شهادة غير صالحة.
أضف أول نظير
ثبّت العميل على أي جهاز Linux، بما في ذلك VPS نفسه إذا أردت إضافته إلى الشبكة:
curl -fsSL https://pkgs.netbird.io/install.sh | shفي Debian وUbuntu، يضبط ذلك البرنامج النصي مستودع حزم NetBird، ثم يثبّت العميل عبر apt. لذلك يتولى مدير الحزم إدارة العميل في كلتا الحالتين. إذا كنت لا تفضّل تمرير برنامج نصي إلى shell، فاحفظه أولاً باستخدام curl -fsSL -o install.sh https://pkgs.netbird.io/install.sh واقرأه قبل تشغيل sh install.sh. في كلتا الحالتين، تحقّق مما تم تثبيته:
apt-cache policy netbirdnetbird هو عميل سطر الأوامر والـdaemon. أما netbird-ui فهو تطبيق سطح المكتب في منطقة الإعلام، ولا فائدة منه على خادم headless.
وجّه العميل الآن إلى خادمك:
sudo netbird up --management-url https://netbird.example.comاحذف --management-url، وسيسجّل العميل نفسه لدى الخدمة المستضافة من NetBird، لأن هذا هو الإعداد الافتراضي المضمّن في البرنامج. سينجح الأمر، وسيحصل الجهاز على عنوان، لكن لوحة التحكم المستضافة ذاتياً ستظل فارغة. يقع الجميع تقريباً في هذا الخطأ مرة واحدة.
يطبع الأمر URL تفتحه في المتصفح لإكمال تسجيل الدخول. بعد ذلك:
netbird status
ip addr show wt0اقرأ أربعة أسطر من netbird status: Management: Connected، وSignal: Connected، وسطر Relays: يعرض كل relay متاح، وNetBird IP: ضمن نطاق overlay. يمثّل wt0 واجهة WireGuard التي ينشئها NetBird، وينبغي أن تحمل العنوان نفسه.
ضمّ جهازاً ثانياً دون تدخل باستخدام مفتاح إعداد
لا يعمل تسجيل الدخول عبر المتصفح على جهاز لا يحتوي على متصفح ولا يوجد أحد أمامه. مفتاح الإعداد هو رمز مميز للمصادقة المسبقة يسجّل الجهاز دون الخطوة التفاعلية. أنشئ مفتاحاً من لوحة التحكم ضمن Setup Keys.
يوجد نوعان من المفاتيح. يصادق المفتاح أحادي الاستخدام على جهاز واحد فقط، ثم يُستهلك. أما المفتاح القابل لإعادة الاستخدام فيسجّل عدة أجهزة، مع إمكانية تحديد حد أقصى لعددها. يتطلب كلا النوعين تاريخ انتهاء، ويمكن لكليهما إسناد النظير الجديد تلقائياً إلى مجموعة، فتُطبَّق قواعد الوصول الخاصة بهذه المجموعة فور ظهور الجهاز.
sudo netbird up --setup-key <SETUP-KEY> \
--management-url https://netbird.example.com \
--hostname build-runner-01--hostname يحدد الاسم الظاهر في لوحة التحكم. بدونه، يستخدم النظير الاسم الذي يطلقه الجهاز على نفسه، ولا يفيدك وجود مجموعة من الإدخالات التي تحمل الاسم ubuntu.
بالنسبة إلى الحاويات ووكلاء البناء قصيري العمر، حدّد المفتاح على أنه مؤقت عند إنشائه. تُزال النظائر المسجّلة باستخدام مفتاح مؤقت تلقائياً بعد بقائها غير متصلة لأكثر من 10 دقائق، وبذلك تبقى الإدخالات القديمة خارج قائمة النظائر.
يجب فهم حدّ مهم قبل الاعتماد على مفاتيح الإعداد: يؤدي انتهاء صلاحية المفتاح أو حذفه إلى إيقاف التسجيلات الجديدة، لكنه لا يفصل الأجهزة التي سبق أن سجّلت باستخدامه. لإزالة وصول جهاز، احذف ذلك النظير.
هل ما زلت بحاجة إلى موفّر هوية منفصل؟
بالنسبة إلى تثبيت صغير، لا. يتولى مخزن المستخدمين المدمج إدارة الحسابات التي تُنشأ من لوحة التحكم، وهذا يكفي لعدد قليل من المستخدمين.
تحتاج إلى موفّر هوية خارجي إذا كنت تستخدم واحداً بالفعل ولا تريد قائمة مستخدمين ثانية. يقبل NetBird أي موفّر يدعم OIDC. سجّل عميلاً سرياً لـ OIDC لدى موفّر الهوية، ثم أضفه في لوحة تحكم NetBird باستخدام أربع قيم: الاسم، ومعرّف العميل، وسر العميل، وموفّر الإصدار. يمنحك NetBird عنوان URL لإعادة التوجيه، وعليك لصقه مرة أخرى في إعدادات موفّر الهوية. تتوفر تكاملات مخصصة مع Google وMicrosoft Entra ID وOkta وZitadel وKeycloak وAuthentik وPocket ID، بينما تُضاف أي خدمة أخرى بوصفها OIDC عاماً. إذا كنت تشغّل Authentik لتوفير تسجيل دخول موحّد مستضاف ذاتياً بالفعل، فهذا هو المسار الذي يحافظ على قائمة حسابات واحدة بدلاً من قائمتين.
يبقى تسجيل الدخول المحلي متاحاً بعد إضافة موفّر هوية، ويظهر كل موفّر مُعدّ في صفحة تسجيل الدخول. احتفظ بحساب local admin واحد مزود بكلمة مرور قوية. عندئذ يظل بإمكانك تسجيل الدخول إذا كان إعداد OIDC معطلاً.
NetBird أم Headscale: أي مستوى تحكم ينبغي أن تشغّل؟
يلغي كلاهما الاعتماد نفسه: خادم التحكم المستضاف الذي كانت أجهزتك ستتصل به تلقائياً لولا ذلك. لكن بنية المشروعين مختلفة.
يعيد Headscale تنفيذ خادم التحكم الخاص بـ Tailscale، وتستمر في استخدام عملاء Tailscale الرسميين. لا توجد وحدة تحكم ويب رسمية. تدير المستخدمين ومفاتيح المصادقة المسبقة باستخدام الأمر headscale مقابل ملف إعداد. توجد واجهات ويب مجتمعية، لكنها ليست جزءاً من المشروع. يناسب ذلك من يريد حفظ حالته في ملفات وتتبع تغييراته في نظام التحكم بالإصدارات.
يقدّم NetBird المنتج كاملاً: عميلاً خاصاً به، ولوحة تحكم خاصة به، وموفّر هوية مضمّناً، وسياسات وصول تُحرَّر من المتصفح. هذا يعني مكوّنات أكثر على VPS، لكنه يتطلب جهداً أقل بكثير لتسليمه إلى زميل لن يفتح الطرفية أبداً.
شغّل Headscale إذا كنت تستخدم عملاء Tailscale فعلاً أو تريد أصغر مستوى تحكم ممكن. شغّل NetBird إذا كان عدة أشخاص يحتاجون إلى إدارة الأقران وتريد وحدة تحكم وSSO دون تجميعهما بنفسك. قبل الالتزام بأي منهما، تحقّق من ما تغطيه فعلياً الخطة المجانية لـ Tailscale، لأن المجموعة التي تضم حتى ستة مستخدمين مع عدد غير محدود من الأجهزة لا تدفع شيئاً مقابل مستوى تحكم مستضاف، وقد لا يكون لديها سبب لتشغيل واحد أصلاً. بعد تجاوز هذا الحد، تزداد الفاتورة مع عدد الأشخاص لا عدد الأجهزة، لذلك فإن حساب ما سيفرضه Tailscale على مجموعتك يمنحك رقماً تقارنه بتكلفة VPS والساعات التي يتطلبها منك هذا المكدس.
ما أصغر VPS يمكنه تشغيل هذا؟
الحد الأدنى الموثّق هو 1 CPU و2 GB من الذاكرة. وتشير ملاحظات NetBird نفسها إلى أن الحد الأدنى الحالي يقترب من 1 GB من RAM، بعد أن أصبحت إدارة المستخدمين محلية، مقارنةً بـ2 GB إلى 4 GB التي كان يتطلبها التخطيط الأقدم عندما كان نشر Zitadel كاملاً جزءاً من الحزمة. اشترِ 2 GB. تتيح السعة الإضافية تنفيذ الترقية أثناء سحب صور جديدة، مع بقاء الصور القديمة على القرص.
يمكنك ترك ثلاثة مكونات بأمان على خادم صغير. ارفض خدمة NetBird Proxy، فهي مخصّصة لنشر الخدمات الداخلية على أسماء مضيفين عامة، ولا علاقة لها باتصال الأقران. ارفض CrowdSec، ويمكنك إضافته لاحقاً إلى خادم مكشوف بدلاً من تثبيته في اليوم الأول. أبقِ مخزن SQLite الافتراضي في وحدة التخزين netbird_data، وانتقل إلى PostgreSQL فقط عند توزيع النشر على عدة أجهزة أو عند مواجهة تزامن فعلي. توثّق NetBird هذا الانتقال على أنه عملية يمكن تنفيذها لاحقاً.
الـrelay هو المكوّن الوحيد الذي لا يمكنك حذفه. إذا عيّنت NAT منفذاً مختلفاً لكل وجهة، فلن يتمكن الأقران من إنشاء نفق مباشر أبداً. لذلك يكون الـrelay هو المسار الوحيد الذي يتيح لهما العمل أصلاً. يؤدي تعطيله إلى توفير قدر ضئيل جداً من الذاكرة، ويؤدي إلى كسر الاتصالات بطريقة يصعب تتبّعها.
عندما لا يعود خادم واحد كافياً، انقل الـrelays أولاً. يعمل relay مستقل باستخدام NB_LISTEN_ADDRESS وNB_EXPOSED_ADDRESS وNB_AUTH_SECRET وNB_ENABLE_STUN. يجب أن يكون السر المشترك متطابقاً على الـrelay والخادم الرئيسي، وإلا يفشل العملاء في المصادقة عليه.
أوضاع الفشل وما ستراه
تعرض لوحة المعلومات تحذيراً بشأن شهادة. لم يحصل Traefik على شهادة. شغّل docker compose logs traefik | grep -i acme. يوجد سببان محتملان. إما أن dig +short netbird.example.com لا يعيد عنوان هذا VPS بعد، أو أن TCP 80 مغلق في مكان ما بين Let's Encrypt والحاوية، وعادةً يكون ذلك في جدار الشبكة الناري لدى مزود الخدمة، لا على ufw. أصلح السبب قبل إعادة المحاولة في حلقة، لأن عمليات التحقق الفاشلة تخضع لحدود معدل الطلبات، وستُمنع من إعادة المحاولة لمدة ساعة.
يقول العميل إنه اتصل، لكن لوحة المعلومات فارغة. سجّل العميل مع الخدمة المستضافة لدى NetBird، لأن --management-url كان مفقوداً. شغّل netbird status --detail واقرأ السطر Management:، الذي يحدد الخادم الذي يتصل به فعلياً. إذا ظهر Management: Connected to https://api.netbird.io:443، فهذا يعني أنه اتصل بالخدمة السحابية. شغّل sudo netbird down، ثم sudo netbird up --management-url https://netbird.example.com مرة أخرى.
تظهر الحالة Connection type: Relayed لكل نظير. لا تتشكل أنفاق مباشرة، لذلك تمر جميع حركة الشبكة عبر VPS وتضيف قفزة تزيد زمن الاستجابة. تحقّق من UDP 3478 في جدار VPS الناري وفي جدار مزود الخدمة الناري، لأن STUN يتيح للنظير معرفة عنوانه العام ومنفذه. يطبع netbird status --detail أيضاً Direct: false وأنواع مرشحي ICE (إنشاء الاتصال التفاعلي) لكل نظير، ما يوضح مدى تقدم المحاولة. في بعض الشبكات، يكون الترحيل هو النتيجة الوحيدة المتاحة، ولا يعني ذلك وجود مشكلة.
ينضم أحد النظراء ولا يستطيع الوصول إلى أي شيء. لا يعني وجود النظير في الشبكة المتداخلة أن نظيرين يستطيعان الاتصال ببعضهما. تحدد سياسات الوصول ذلك، كما أن المجموعة التي لا ترتبط بها أي سياسة لا تصل إلى أي مورد. تحقّق من السياسة في لوحة المعلومات قبل البدء في تصحيح أخطاء المسارات وجدران الحماية.
يفيد netbird status بوجود مشكلة في البرنامج الخدمي. الخدمة لا تعمل. استخدم sudo netbird service status وsudo netbird service start. توجد سجلات العميل في /var/log/netbird/client.log. بالنسبة إلى أي مشكلة لا تستطيع تحديد سببها، يجمع netbird debug bundle --anonymize --system-info السجلات والحالة والمسارات وإعدادات DNS وحالة جدار الحماية في أرشيف واحد.
النسخ الاحتياطي والترقيات
يعتمد التثبيت بالكامل على أمرين: الدليل الذي يحتوي على docker-compose.yml وconfig.yaml، وDocker volume الذي يحتوي على قاعدة البيانات ومفاتيح التشفير. انسخهما احتياطياً معاً. يحتوي config.yaml على المفتاح الذي يشفّر البيانات في مخزن البيانات، لذلك لن تؤدي استعادة نسخة من قاعدة البيانات من دونه إلى بيانات قابلة للقراءة.
docker volume ls
docker compose down
sudo tar czf netbird-config.tgz -C ~ netbird
docker run --rm -v netbird_netbird_data:/data -v "$PWD":/backup \
alpine tar czf /backup/netbird-data.tgz -C /data .
docker compose up -dيضيف Compose اسم دليل المشروع إلى أسماء وحدات التخزين، لذلك يظهر volume الموثّق باسم netbird_data عادةً باسم netbird_netbird_data. شغّل docker volume ls أولاً، واستخدم الاسم الذي يطبعه، وإلا فسيفشل الأمر docker run أعلاه بصمت، إذ سينشئ volume فارغاً ويؤرشف أي شيء. احتفظ بالأرشيفات خارج VPS. إذا كانت لديك أداة نسخ احتياطي مسبقاً، فإن restic أو BorgBackup تتولى الجزء الخاص بالنسخ إلى موقع خارجي.
ترقية الخادم هي عملية سحب ثم إعادة إنشاء:
docker compose pull
docker compose up -d
docker compose psقبل الاعتماد على ذلك، شغّل docker compose config | grep image:. يجب تثبيت أي وسم يقرأ latest على إصدار محدد، للسبب نفسه الذي دفعك إلى تثبيت إصدار محدد من سكربت التثبيت: يجب أن تعرف ما الذي يعمل، وأن يتوفر لديك إصدار تعود إليه إذا سببت الترقية مشكلة. تتم ترقية العملاء باستخدام مدير الحزم الذي ثبّتهم.
FAQ
هل أحتاج إلى موفّر هوية خاص بي لاستضافة NetBird ذاتياً؟
لا. تتضمن الإصدارات الحالية مخزناً مضمّناً للمستخدمين، لذلك تنشئ حساب المسؤول الأول في المتصفح على https://netbird.example.com، ثم تضيف المستخدمين من لوحة التحكم. موفّر OIDC خارجي اختياري، ويمكن إضافته لاحقاً باستخدام أربع قيم: الاسم، ومعرّف العميل، وسر العميل، والجهة المُصدِرة. أما الأدلة التي تطلب منك نشر Zitadel أو Keycloak قبل NetBird، فتشرح إعداداً لم يعد مطلوباً. واتباعها يضيف إليك خدمة كاملة أخرى لتشغيلها.
لماذا تظهر جميع الأجهزة النظيرة لدي بالحالة Connection type: Relayed؟
لا تتشكل الاتصالات المباشرة، لذلك تمر حركة الشبكة عبر relay على VPS لديك. السبب المعتاد هو حظر UDP 3478، وهو منفذ STUN الذي تستخدمه الأجهزة النظيرة لاكتشاف عنوانها العام ومنفذها العام. افتحه في جدار حماية VPS وفي جدار حماية الشبكة المنفصل لدى مزوّد الخدمة، ثم شغّل netbird status --detail مرة أخرى واقرأ السطر Direct:. في شبكة يعيّن فيها NAT منفذاً مختلفاً لكل وجهة، تكون الحالة relayed هي النتيجة الوحيدة الممكنة، ولا يكون هناك خطأ في الإعداد.
اتصل العميل، لكن لوحة التحكم لا تعرض أي أجهزة نظيرة. ماذا حدث؟
سجّل العميل نفسه لدى الخدمة المستضافة الخاصة بـNetBird بدلاً من خادمك. يحدث ذلك عندما تُترك --management-url من دون ضبط. يعرض netbird status --detail الخادم الذي يتصل به العميل في السطر Management:، لذلك تؤكد قيمة مثل https://api.netbird.io:443 ذلك. شغّل sudo netbird down، ثم sudo netbird up --management-url https://netbird.example.com، وسيظهر الجهاز النظير في لوحة التحكم.
ما الفرق بين NetBird المستضاف ذاتياً وHeadscale؟
كلاهما يستبدل خادم تحكم مستضافاً بخادم تشغّله بنفسك. Headscale هو مستوى تحكم فقط؛ تديره باستخدام الأمر headscale وملف إعداد، ولا توجد له وحدة تحكم ويب رسمية، كما أنه يشغّل عملاء Tailscale الرسميين. يأتي NetBird بعميله الخاص، ولوحة تحكم للمسؤولين، وتكامل مع موفّر الهوية ضمن الحزمة نفسها. تشغيل Headscale أبسط، ويحفظ حالته في ملفات. أما NetBird فهو أسهل لتسليمه إلى أشخاص لن يستخدموا الطرفية.
ما حجم VPS المطلوب لخادم NetBird مستضاف ذاتياً؟
الحد الأدنى الموثّق هو 1 CPU و2 GB من الذاكرة، و2 GB هو الحجم الذي ينبغي شراؤه. انخفض الحد العملي إلى نحو 1 GB في الإصدارات الحديثة، لأن موفّر الهوية أصبح مضمّناً بدلاً من نشره كخدمة منفصلة. عطّل خدمتي proxy وCrowdSec الاختياريتين أثناء التثبيت، واستمر في استخدام مخزن SQLite الافتراضي إلى أن تحتاج فعلاً إلى PostgreSQL.