SSD Nodes Learn 🎉 VPS من $4.99/شهر
الأدلة Matt Connorبقلم Matt Connor

استضافة خادم NetBird VPN ذاتيًا على VPS

شغّل شبكة NetBird mesh على VPS واحد: اضبط DNS وTLS، ثبّت سكربت quickstart بإصدار محدد، وأنشئ مفاتيح إعداد للأقران دون تدخل، ثم قارنها بـ Headscale.

ما الذي يوفّره الاستضافة الذاتية لخادم NetBird VPN

تضع الاستضافة الذاتية لخادم NetBird مستوى التحكم على VPS تملكه أنت. ويشمل ذلك الجزء الذي يحتفظ بقائمة الأقران، ويحدد الأجهزة التي يمكن لكل منها الوصول إليها، ويساعد جهازين متصلين على العثور على بعضهما خلف NAT (ترجمة عناوين الشبكة). تبقى الأنفاق نفسها معتمدة على WireGuard، مع تشفير مباشر بين أجهزتك. ويعني ذلك عدم احتفاظ شركة خارجية بقائمة أجهزتك أو بعملية تسجيل الدخول الخاصة بك.

يقع NetBird بين مفهومين قد تعرفهما مسبقاً. فهو شبكة تراكبية mesh، لذلك تتصل الأجهزة النظيرة ببعضها بدلاً من إرسال كل شيء عبر بوابة واحدة. كما يمكن استضافته ذاتياً من البداية إلى النهاية، ولذلك ينافس Headscale، خادم التحكم المستضاف ذاتياً لـTailscale. إذا كنت قد شغّلت حتى الآن نفقاً ذا بوابة واحدة فقط، فاقرأ أولاً الفرق بين WireGuard العادي والشبكة التراكبية mesh، لأن هذا النموذج الذهني هو ما يجعل بقية هذه الصفحة مفيدة.

إذا كان ما تريده فعلياً هو خادم واحد تخرج منه كل حركة الشبكة، فإن mesh توفر مكونات أكثر مما تتطلبه المهمة. يحقق ذلك نفق WireGuard عادي على VPS واحد أو عقدة خروج Tailscale مع قدر أقل بكثير من التشغيل.

ما الذي يشغّله هذا المكدس فعلياً

تغيّر التخطيط مؤخراً، وتصف معظم الشروحات الأقدم التخطيط القديم. اعتباراً من 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 واحدة، فهذه زيادة في عدد المكوّنات. ما تحصل عليه هو سياسات وصول وحسابات لكل مستخدم، ونظراء يتصلون ببعضهم مباشرة بدلاً من المرور عبر بوابة واحدة.

ما تحتاج إليه قبل البدء

اسم نطاق عام ليس اختيارياً. تعمل لوحة التحكم وواجهة API وrelay جميعاً عبر 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 و*.proxy.netbird.example.com العام، ولا تقدم أي فائدة لشبكة mesh عادية. ارفض CrowdSec أيضاً. يمكنك إضافة كلتيهما لاحقاً.

يكتب السكربت الملفات في الدليل الحالي: docker-compose.yml، وconfig.yaml بالوضع 600، وdashboard.env، وtraefik-dynamic.yaml عند اختيار Traefik المضمّن. تعامل مع هذا الدليل باعتباره حالة يجب الاحتفاظ بها، لأن config.yaml يحتوي على المفتاح الذي يشفّر البيانات في مخزن البيانات. لا يعالج فقدان هذا الملف بإعادة التثبيت.

docker compose ps
docker compose logs -f netbird-server

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

docker compose logs traefik | grep -i acme

ACME (بيئة إدارة الشهادات التلقائية) هو البروتوكول الذي يستخدمه 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 netbird

netbird هو عميل سطر الأوامر والخدمة 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 باستخدام أربع قيم: الاسم، وclient ID، وclient secret، وissuer. يزوّدك NetBird بعنوان redirect URL لتلصقه مرة أخرى في إعدادات الموفّر. تتوفر تكاملات مخصصة لـGoogle وMicrosoft Entra ID وOkta وZitadel وKeycloak وAuthentik وPocket ID، بينما تُضاف أي خدمة أخرى بوصفها OIDC عاماً. إذا كنت تشغّل Authentik لتسجيل الدخول الموحّد المستضاف ذاتياً بالفعل، فهذا هو المسار الذي يحافظ على قائمة حسابات واحدة بدلاً من قائمتين.

يبقى تسجيل الدخول المحلي متاحاً بعد إضافة موفّر، ويظهر كل موفّر تم تكوينه في صفحة تسجيل الدخول. احتفظ بحساب مسؤول محلي واحد مع كلمة مرور قوية. عندئذ يظل بإمكانك تسجيل الدخول إذا تعطل إعداد OIDC.

NetBird أم Headscale: أي مستوى تحكم ينبغي أن تشغّل؟

كلاهما يلغي الاعتماد نفسه: خادم التحكم المستضاف الذي كانت عملاؤك ستتصل به تلقائياً لولا ذلك. لكن بنية المشروعين مختلفة.

يعيد Headscale تنفيذ خادم التحكم الخاص بـ Tailscale، وتواصل استخدام عملاء Tailscale الرسميين. لا توجد وحدة تحكم ويب رسمية. تدير المستخدمين ومفاتيح المصادقة المسبقة باستخدام الأمر headscale مقابل ملف إعداد. توجد واجهات ويب من المجتمع، لكنها ليست جزءاً من المشروع. يناسب ذلك من يريد حفظ الحالة في ملفات وإدارة التغييرات عبر نظام للتحكم في الإصدارات.

يوفّر NetBird المنتج كاملاً: عميلاً خاصاً به، ولوحة تحكم خاصة به، وموفّر هوية مضمّناً، وسياسات وصول تُعدَّل من المتصفح. يعني ذلك مكوّنات أكثر على VPS لديك، لكنه يتطلب جهداً أقل بكثير لتسليم إدارته إلى زميل لن يفتح الطرفية أبداً.

شغّل Headscale إذا كنت تستخدم عملاء Tailscale بالفعل أو تريد أصغر مستوى تحكم ممكن. شغّل NetBird إذا كان عدة أشخاص يحتاجون إلى إدارة الأقران، وتريد وحدة تحكم وSSO من دون تجميعهما بنفسك.

ما أصغر 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 (إنشاء الاتصال التفاعلي) لكل نظير، ما يوضح مدى تقدم المحاولة. في بعض الشبكات، يكون الاتصال عبر relay هو النتيجة الوحيدة المتاحة، ولا يعني ذلك وجود مشكلة.

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

يُبلغ netbird status عن مشكلة في daemon. الخدمة لا تعمل. استخدم 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 بادئة إلى أسماء volumes باستخدام دليل المشروع، لذلك يظهر 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:. يجب تثبيت أي tag قيمته latest على إصدار محدد، للسبب نفسه الذي جعلك تثبّت install script: يجب أن تعرف ما الذي يعمل، وأن يتوفر لديك إصدار يمكنك الرجوع إليه إذا تسببت الترقية في مشكلة. تتم ترقية العملاء باستخدام package manager الذي ثبّتهم.

FAQ

هل أحتاج إلى موفّر هوية خاص بي لاستضافة NetBird ذاتياً؟

لا. تتضمن الإصدارات الحالية مخزناً مضمّناً للمستخدمين، لذلك تنشئ حساب المسؤول الأول في المتصفح على https://netbird.example.com، ثم تضيف المستخدمين من لوحة التحكم. موفّر OIDC خارجي اختياري، ويمكن إضافته لاحقاً باستخدام أربع قيم: الاسم، ومعرّف العميل، والسر الخاص بالعميل، والجهة المُصدرة. الأدلة التي تطلب منك نشر Zitadel أو Keycloak قبل NetBird تشرح إعداداً لم يعد مطلوباً، واتباعها يضيف خدمة كاملة أخرى يتعين عليك تشغيلها.

لماذا تظهر كل أقراني بالحالة Connection type: Relayed؟

لم تُنشأ اتصالات مباشرة، لذلك تمر حركة الشبكة عبر المرحّل على 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.