SSD Nodes Learn Hosting plans →
الأدلة Matt Connorبقلم Matt Connor · آخر تحديث في 2026-11-01

استضافة خادم 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 لديك مسبقاً، من دون الحاجة إلى أي مكوّن من المكونات الواردة أدناه.

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

تغيّر التخطيط مؤخراً، ومعظم الشروحات الأقدم تصف التخطيط السابق. بعد التحقق في October 2026 من الإصدار v0.80.0 ومن الإصدار v0.76.2 الذي يثبّته هذا الدليل، تبيّن أن quickstart script ينشئ ملف Compose يحتوي افتراضياً على ثلاث خدمات.

  • netbird-server يشغّل management API، وخدمة الإشارات، وrelay مع STUN listener مضمّن، وموفّر هوية مضمّناً. في الإصدارات الأقدم، كانت هذه المكوّنات حاويات منفصلة، وكان موفّر الهوية عبارة عن تثبيت Zitadel منفصل يتعيّن عليك إنشاؤه أولاً.
  • dashboard هو admin web console.
  • traefik ينهي TLS (أمان طبقة النقل)، ويطلب شهادة من Let's Encrypt عند أول تشغيل.

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

إذا كنت تنتقل من wg-easy في حاوية Docker واحدة، فستجد أن عدد المكوّنات ازداد. ما تحصل عليه مقابل ذلك هو access policies وحسابات لكل مستخدم، إضافة إلى peers تتصل مباشرة ببعضها بدلاً من المرور عبر gateway واحد.

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

اسم نطاق عام ليس اختيارياً. تعمل لوحة التحكم وواجهة API والـrelay جميعاً عبر HTTPS على المنفذ 443، وتحصل Traefik على شهادتها من Let's Encrypt باستخدام التحدي TLS-ALPN-01، الذي تتم الإجابة عنه على المنفذ 443، وهذا يتطلب اسماً يُحل إلى عنوان VPS هذا من الإنترنت العام. لن يعمل عنوان IP مجرد ضمن هذا التدفق.

أنشئ سجل A واحداً، netbird.example.com يشير إلى عنوان IPv4 العام لخادم VPS، وانتظر حتى ينتشر قبل تشغيل أي شيء.

dig +short netbird.example.com

يجب أن يطبع ذلك عنوان خادمك. إذا شغّلت المُثبّت قبل انتشار DNS، يفشل طلب الشهادة عند التشغيل الأول، وتؤدي عمليات التحقق الفاشلة المتكررة إلى حدود المعدل لدى Let's Encrypt، وعندها ستنتظر حتى يُعاد شحن الحد قبل أن تتمكن من المحاولة مجدداً.

يجب أن تكون ثلاثة منافذ قابلة للوصول من الإنترنت: 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، أي session traversal utilities for NAT، هو الآلية التي يتعلم بها أحد النظراء العنوان العام والمنفذ اللذين خصصهما NAT الخاص به، حتى يتمكن نظيران من محاولة إنشاء نفق مباشر. إذا حظرت UDP 3478، فسيستمر اتصال النظراء عبر relay على TCP 443، ولذلك قد لا يبدو أن هناك عطلاً. يظهر Connection type: Relayed لدى النظراء الذين لا يستطيعون العثور على مسار مباشر، وتعبر حركتهم خادم VPS الخاص بك بدلاً من انتقالها مباشرة بين النظراء. ويمكن للنظراء الموجودين على شبكة LAN نفسها الاتصال مباشرة باستخدام عناوينهم المحلية.

على مستوى البرامج، تحتاج إلى Docker مع الإضافة Compose v2، بالإضافة إلى jq وcurl. يتحقق البرنامج النصي من Docker وCompose وjq، ويتوقف إذا كان أحدها مفقوداً. ويستخدم curl من دون التحقق من وجوده، لذلك ثبّته أولاً. إذا كان Docker جديداً على هذا الخادم، فابدأ بـتشغيل Docker Compose على VPS.

المنافذ عند تجاوز الـreverse proxy المضمّن

من دون Traefik، يواصل الخادم الموحّد توفير الإدارة وsignal وrelay عبر واجهة HTTP خلفية واحدة، لذلك تكاد قائمة المنافذ لا تتسع. ينشر ملف Compose المُنشأ ما يلي:

  • TCP 8080، لوحة التحكم، مرتبط بـ127.0.0.1 افتراضياً
  • TCP 8081، netbird-server، مرتبط بـ127.0.0.1 افتراضياً
  • UDP 3478، STUN، منشور مباشرة

ينهي الـproxy الخاص بك TLS على TCP 443، ثم يمرر الطلبات إلى هذين المنفذين المحليين. لا يمر STUN عبر الـproxy، لذلك يظل UDP 3478 مفتوحاً في الجدار الناري في كلتا الحالتين. تصف الأدلة التي تسرد منافذ منفصلة لـmanagement gRPC وsignal gRPC وrelay تخطيط الحاويات المتعددة الأقدم.

اختر هذا الخيار فقط عندما ينهي الخادم TLS لخدمة أخرى بالفعل. وإلا فإن Traefik المضمّن يتطلب قواعد أقل ويؤدي إلى أخطاء أقل.

ثبّت خادم NetBird باستخدام quickstart script

ينقل الأمر المختصر الموثّق أحدث إصدار مباشرةً إلى 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

يسألك script عن النطاق أولاً:

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 إلى 4 مقتطف إعداد وتترك لك توصيل المكوّنات، بينما يكتب الخيار 5 ملف Compose، وdashboard.env وconfig.yaml، ويطبع وثائق الإعداد في الطرفية. هذا مناسب لخادم يشغّل proxy بالفعل، لكنه غير مناسب لخادم جديد. يسألك الخيار 0 بعد ذلك عن عنوان بريد إلكتروني، ويسجّله Traefik في حسابك لدى Let's Encrypt. ما زال prompt يسمّيه عنواناً لإشعارات الشهادة، لكن Let's Encrypt أوقفت إرسال رسائل انتهاء الصلاحية في June 4, 2025، لذلك تظهر مشكلات التجديد في سجل Traefik بدلاً من صندوق الوارد.

اختر الرفض لخدمة NetBird Proxy عند التثبيت الأول. فهي تحتاج إلى سجل DNS إضافي، وهو wildcard *.netbird.example.com من نوع CNAME يشير إلى netbird.example.com، ولا تفيد في mesh عادي. لا يظهر prompt الخاص بـCrowdSec إلا بعد تفعيل proxy، لذلك يؤدي رفض proxy إلى تخطيه أيضاً. ويمكن إضافة كليهما لاحقاً.

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

docker compose ps
docker compose logs -f netbird-server

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

docker compose logs traefik | grep -i acme

ACME (بيئة إدارة الشهادات تلقائياً) هو البروتوكول الذي يستخدمه Traefik للحصول على الشهادة. تكون الأخطاء هنا تقريباً دائماً بسبب DNS أو إغلاق المنفذ 443.

إنشاء حساب المسؤول الأول

افتح 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 لا تفيد أحداً.

بالنسبة للحاويات وعملاء البناء قصيرة العمر، حدّد المفتاح كـ ephemeral عند إنشائه. تُزال النظائر المسجلة بمفتاح ephemeral تلقائياً بمجرد بقائها دون اتصال لأكثر من 10 دقائق، مما يحافظ على قائمة النظائر خالية من الإدخالات الميتة.

هناك حد واحد يجب فهمه قبل التخطيط لاستخدام مفاتيح الإعداد: انتهاء صلاحية المفتاح أو إلغاؤه يوقف التسجيلات الجديدة، لكنه لا يقطع اتصال الأجهزة التي سُجّلت به بالفعل. إزالة وصول الجهاز تعني إزالة ذلك النظير.

هل ما زلت بحاجة إلى موفّر هوية منفصل؟

بالنسبة إلى تثبيت صغير، لا. يتولى مخزن المستخدمين المدمج إدارة الحسابات التي تُنشأ من لوحة التحكم، وهذا يكفي لعدد قليل من المستخدمين.

تحتاج إلى موفّر هوية خارجي إذا كنت تستخدم واحداً بالفعل ولا تريد قائمة مستخدمين ثانية. يقبل NetBird أي موفّر يدعم OIDC. سجّل عميلاً سرياً لـ OIDC لدى موفّر الهوية، ثم أضفه في لوحة تحكم NetBird باستخدام أربع قيم: الاسم، ومعرّف العميل، وسر العميل، وموفّر الإصدار. يمنحك NetBird عنوان URL لإعادة التوجيه، وعليك لصقه مرة أخرى في إعدادات موفّر الهوية. تتوفر تكاملات مخصصة مع Google وMicrosoft Entra ID وOkta وZitadel وKeycloak وAuthentik وPocket ID، بينما تُضاف أي خدمة أخرى بوصفها OIDC عاماً. إذا كنت تشغّل Authentik لتوفير تسجيل دخول موحّد مستضاف ذاتياً بالفعل، فهذا هو المسار الذي يحافظ على قائمة حسابات واحدة بدلاً من قائمتين.

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

NetBird أم Headscale: أي control plane ينبغي أن تشغّل؟

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

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

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

شغّل Headscale إذا كنت تستخدم عملاء Tailscale بالفعل أو تريد أصغر control plane ممكن. شغّل NetBird إذا كان عدة أشخاص يحتاجون إلى إدارة الأقران وتريد console وSSO دون تجميعهما بنفسك. قبل الالتزام بأي منهما، راجع ما الذي تغطيه فعلياً الخطة المجانية في Tailscale، لأن مجموعة غير تجارية تضم ما يصل إلى ستة مستخدمين لا تدفع شيئاً مقابل control plane مستضاف، مع أجهزة مستخدمين غير محدودة و50 مورداً موسوماً في البداية، وقد لا يكون لديها سبب لتشغيل واحد أصلاً. بعد تجاوز هذا الحد، تزداد الفاتورة وفق عدد الأشخاص لا عدد الأجهزة، لذلك فإن حساب المبلغ الذي سيفرضه Tailscale على مجموعتك يزوّدك برقم تقارنه بتكلفة VPS والساعات التي تتطلبها منك هذه المنظومة.

ما أصغر حجم VPS يمكنه تشغيل ذلك؟

الحد الأدنى الموثّق هو 1 CPU و2 GB من الذاكرة. استخدم 2 GB.

يمكنك الاستغناء بأمان عن ثلاثة أشياء على خادم صغير. ارفض خدمة NetBird Proxy، فهي مخصّصة لنشر الخدمات الداخلية على أسماء مضيفين عامة، ولا علاقة لها باتصال الأجهزة النظيرة. تخطَّ CrowdSec، فالبرنامج النصي لا يعرضه إلا إلى جانب الـProxy، ومن الأفضل إضافته لاحقاً إلى خادم مكشوف بدلاً من إضافته منذ اليوم الأول. أبقِ مخزن SQLite الافتراضي في وحدة التخزين netbird_data، وانتقل إلى PostgreSQL فقط عندما تقسّم النشر بين عدة أجهزة أو تواجه تزامناً فعلياً في الطلبات؛ وقد وُثّق ذلك كعملية ترحيل يمكنك تنفيذها لاحقاً.

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

عندما لا يعود خادم واحد كافياً، انقل relay أولاً. يعمل 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 443 مغلق في مكان ما بين Let's Encrypt والحاوية، وعادةً يكون ذلك في جدار الحماية الشبكي لدى المزوّد، وليس على ufw. تتم الاستجابة للتحدي على 443، لذلك لا يفيد فتح المنفذ 80 هنا. أصلح السبب قبل إعادة المحاولة في حلقة، لأن Let's Encrypt يسمح بخمس عمليات تفويض فاشلة فقط لكل اسم مضيف ولكل حساب في الساعة، وستُمنع من إعادة المحاولة حتى يُستعاد هذا الحد.

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

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

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

لماذا تظهر القيمة Connection type: Relayed لدى جميع أقراني؟

لا تتشكّل الاتصالات المباشرة، لذلك تمر حركة الشبكة عبر relay على VPS الخاص بك. السبب المعتاد هو حظر UDP 3478، وهو منفذ STUN الذي يستخدمه الأقران لاكتشاف عنوانهم العام ومنفذهم العام. افتحه في جدار VPS الناري وفي جدار الشبكة الناري المنفصل لدى موفّر الخدمة، ثم شغّل netbird status --detail مرة أخرى واقرأ السطر Direct:. عندما يكون كلا الندّين خلف NAT يعيّن منفذاً مختلفاً لكل وجهة، تكون النتيجة المتوقعة هي استخدام relay، ولا يكون هناك خطأ في الإعداد.

اتصل عميلي، لكن لوحة المعلومات لا تعرض أي أقران. ماذا حدث؟

سجّل العميل نفسه لدى الخدمة المستضافة لـ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 هو الحجم الذي ينبغي شراؤه. ارفض خدمة proxy الاختيارية أثناء التثبيت، إذ يؤدي ذلك أيضاً إلى تجاوز مطالبة CrowdSec، واستمر في استخدام مخزن SQLite الافتراضي إلى أن تحتاج فعلياً إلى PostgreSQL.

هل كان هذا المقال مفيدًا؟