NoctisNode
← أدلةالشبكات2026-10-239 دقائق

ابنِ عنقود VPS خاصاً بشبكة WireGuard متشابكة

اربط عقد VPS في عنقود خاص بشبكة WireGuard متشابكة بالكامل: خطة عناوين واحدة، و[Peer] لكل عقدة، وAllowedIPs بقناع /32، وجدار حماية صارم، وخدمات مرتبطة بـ wg0.

باختصار: لتحويل عدة خوادم VPS إلى عنقود خاص، امنح كل عقدة VPS واجهة WireGuard بعنوان من شبكة فرعية خاصة واحدة، وأضف كل عقدة أخرى كـ `[Peer]` مع `Endpoint` العام الخاص بها وقناع `/32` في `AllowedIPs`، واسمح بـ UDP 51820 من عقدك فقط، واربط قواعد البيانات والخدمات الداخلية بعنوان `wg0` بدلاً من عنوان IP العام. حتى نحو عشر عقد يسهل صيانة ذلك يدوياً أو بقالب؛ وما بعد ذلك، استخدم أدوات تولّد الإعدادات وتوزعها.

يفترض هذا الدليل أنك تعرف الأساسيات من دليل WireGuard VPN وأنك حصّنت SSH على كل عقدة كما في دليل تحصين SSH؛ وللوصول إلى العقد عبر خادم عبور دون تمرير الوكيل، راجع دليل StrictModes وتمرير الوكيل.

خطة العناوين لعقد الـ VPN

اختر نطاقاً خاصاً واحداً لا يتعارض مع أي شيء آخر تستخدمه (الشبكة المنزلية، Docker، نطاقات pods في Kubernetes). يكفي `/24` لعنقود صغير ويبقي العناوين سهلة القراءة. خصص لكل عقدة عنواناً ثابتاً واحفظ الخطة في نظام إدارة الإصدارات، لأن كل الإعدادات مشتقة منها.

العقدةالدورعنوان IP العامعنوان wg0ListenPort
node1تطبيق203.0.113.1110.88.0.1/2451820
node2تطبيق203.0.113.1210.88.0.2/2451820
node3قاعدة بيانات203.0.113.1310.88.0.3/2451820
node4مراقبة203.0.113.1410.88.0.4/2451820

إعدادات كل نظير على كل عقدة VPS

في الشبكة المتشابكة بالكامل تتحدث كل عقدة مباشرة مع كل عقدة أخرى، لذا يحتوي كل ملف إعدادات على `[Interface]` واحد وN-1 من أقسام `[Peer]`. أربع عقد تعني ستة أنفاق إجمالاً؛ وعشر عقد تعني 45. لكل عقدة عنوان IP عام، لذا لا حاجة عادةً إلى `PersistentKeepalive`؛ والتفاصيل في دليل keepalive وPresharedKey.

  1. 01.على كل عقدة شغّل `apt install wireguard`، ثم `umask 077; wg genkey | tee /etc/wireguard/wg0.key | wg pubkey > /etc/wireguard/wg0.pub`.
  2. 02.اجمع كل المفاتيح العامة وخطة العناوين في مكان واحد.
  3. 03.اختيارياً، ولّد مفتاح `wg genpsk` واحداً لكل زوج من العقد احتياطاً لعصر الحوسبة الكمومية.
  4. 04.اكتب `/etc/wireguard/wg0.conf` على كل عقدة كما هو موضح أدناه.
  5. 05.شغّل `systemctl enable --now wg-quick@wg0` وتحقق في `wg show` من وجود مصافحة حديثة مع كل نظير.
# /etc/wireguard/wg0.conf on node1
[Interface]
Address = 10.88.0.1/24
ListenPort = 51820
PrivateKey = <node1 private key>

[Peer]
# node2
PublicKey = <node2 public key>
Endpoint = 203.0.113.12:51820
AllowedIPs = 10.88.0.2/32

[Peer]
# node3
PublicKey = <node3 public key>
Endpoint = 203.0.113.13:51820
AllowedIPs = 10.88.0.3/32

[Peer]
# node4
PublicKey = <node4 public key>
Endpoint = 203.0.113.14:51820
AllowedIPs = 10.88.0.4/32

كيف يعمل AllowedIPs في الشبكة المتشابكة

يؤدي `AllowedIPs` مهمتين في آن واحد. للحركة الصادرة، هو جدول توجيه: الحزم الموجهة إلى `10.88.0.3` تذهب إلى النظير الذي يدرج `10.88.0.3/32`. وللحركة الواردة، هو قائمة وصول: الحزمة القادمة من ذلك النظير لا تُقبل إلا إن كان عنوان مصدرها ضمن `AllowedIPs` لذلك النظير. لهذا يحصل كل نظير على `/32` الخاص به تحديداً، لا على `/24` كاملة.

القناع `/24` في سطر `Address` ينشئ فقط مسار النواة للشبكة الفرعية على `wg0`؛ ثم يختار WireGuard النظير الصحيح لكل وجهة.

  • ▹يجب ألا يتشارك نظيران أبداً نطاق `AllowedIPs` متداخلاً على الواجهة نفسها؛ فالأخير هو الذي يُعتمد.
  • ▹إن كانت عقدة توجّه أيضاً شبكة فرعية خاصة (مثل Docker على node3)، فأضف تلك الشبكة إلى `AllowedIPs` الخاص بـ node3 على العقد الأخرى.
  • ▹لا تضع `0.0.0.0/0` في نظير ضمن الشبكة المتشابكة ما لم تكن تريد فعلاً أن تخرج كل الحركة عبر تلك العقدة.

جدار الحماية: عقدك وحدها تصل إلى النفق

لا يرد WireGuard على الحزم غير الموثقة، لكن قصر UDP 51820 على عناوين IP المعروفة للعقد يقلل الضجيج مع ذلك. داخل النفق، افتح فقط المنافذ التي تحتاجها كل خدمة. مثال nftables هذا لـ Debian 12/13 وUbuntu 24.04 يوضع في `/etc/nftables.conf`؛ حمّله بالأمر `nft -f /etc/nftables.conf` وفعّل `nftables.service`. أبقِ جلسة SSH مفتوحة أثناء الاختبار.

table inet filter {
  set mesh_peers {
    type ipv4_addr
    elements = { 203.0.113.11, 203.0.113.12, 203.0.113.13, 203.0.113.14 }
  }
  chain input {
    type filter hook input priority 0; policy drop;
    ct state established,related accept
    iif lo accept
    meta l4proto { icmp, ipv6-icmp } accept
    tcp dport 22 accept
    udp dport 51820 ip saddr @mesh_peers accept
    iifname "wg0" ip saddr 10.88.0.0/24 tcp dport { 5432, 6379, 9100 } accept
  }
}

اربط الخدمات بواجهة wg

جدار الحماية طبقة واحدة؛ والثانية ألا تستمع على العنوان العام إطلاقاً. اربط الخدمات الداخلية بعنوان `wg0` للعقدة كي لا يكشفها خطأ في جدار الحماية. ولأن `wg0` يجب أن تكون موجودة قبل أن ترتبط الخدمة، رتّب الوحدات بملف systemd إضافي (drop-in)، أو اسمح بالارتباط بعناوين غير مفعّلة بعد عبر `net.ipv4.ip_nonlocal_bind = 1`.

# PostgreSQL on node3: postgresql.conf
listen_addresses = '10.88.0.3'
# pg_hba.conf
host  all  all  10.88.0.0/24  scram-sha-256

# Redis: /etc/redis/redis.conf
bind 10.88.0.3

# systemctl edit postgresql  (repeat for other services)
[Unit]
[email protected]
[email protected]

Note · تحقق من النتيجة بالأمر `ss -tlnp`: يجب أن تظهر الخدمات الداخلية على `10.88.0.x`، لا على `0.0.0.0` أو عنوان IP العام أبداً.

التوسع: متى تنتقل إلى الأدوات

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

في NoctisNode، تُنشر كل عقد VPS الجديدة في FI-1 (فنلندا)، لكل منها عنوان IPv4 مخصص ومنفذ 1 Gbps غير محدود الاستهلاك، والفوترة بالساعة مع واجهة API للوكلاء (مع TTL للحذف التلقائي) تجعل إضافة عقد الاختبار وإزالتها رخيصة. تبدأ الخطط من فئة Wisp؛ راجع خطط VPS.

حجم العنقودالنهج
2–5 عقدإعدادات مكتوبة يدوياً، وخطة العناوين في ملف نصي
5–15 عقدةAnsible أو أداة إعدادات أخرى تولّد wg0.conf من قالب ومخزون واحد
15+ عقدة أو تغيّر متكررمدير شبكة متشابكة يوزع المفاتيح والنظراء تلقائياً، أو تصميم محور وأطراف (hub-and-spoke)

الأسئلة الشائعة

Qكيف أربط عدة خوادم VPS في شبكة خاصة؟

Aثبّت WireGuard على كل VPS، وامنح كل عقدة عنواناً من شبكة فرعية خاصة واحدة، وأدرج كل عقدة أخرى كنظير مع نقطة نهايتها العامة وAllowedIPs بقناع /32. ثم اربط الخدمات الداخلية بعنوان WireGuard.

Qهل تحتاج عقد الـ VPN في شبكة WireGuard المتشابكة إلى PersistentKeepalive؟

Aعادةً لا، لأن لكل عقدة VPS عنوان IP عاماً ويمكن الوصول إليها مباشرة. أضف `PersistentKeepalive = 25` فقط لعقدة موجودة خلف NAT.

Qما الذي يجب أن تكون عليه AllowedIPs لكل عقدة VPS؟

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

Qكم عقدة يمكن أن تضم شبكة WireGuard المتشابكة؟

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

ابنِ عنقود VPS خاصاً بشبكة WireGuard متشابكة · NoctisNode