كيف تحل مشكلة CGNAT وتجعل عقدة Pi Network الخاصة بك "Open Ports" باستخدام VPS و WireGuard (دليل عملي كامل 2026)


كيف تحل مشكلة CGNAT وتجعل عقدة Pi Network الخاصة بك "Open Ports" باستخدام VPS و WireGuard (دليل عملي كامل 2026)


كيف تحل مشكلة CGNAT وتجعل عقدة Pi Network الخاصة بك "Open Ports" باستخدام VPS و WireGuard (دليل عملي كامل 2026)

إذا كنت من مشغّلي عقد Pi Network (Pi Node) وتواجه رسالة مزعجة باستمرار في تطبيق Pi Desktop تقول:

We couldn't reach the required ports on your machine. Please double-check your configuration.

وكانت كل المنافذ من 31400 إلى 31409 تظهر بحالة NOT OPEN، رغم أنك فعّلت Port Forwarding في الراوتر بشكل صحيح، فأنت على الأرجح ضحية مشكلة شائعة جداً تنتشر بكثرة بين مستخدمي الإنترنت في ليبيا والسودان ومعظم الدول العربية، وهي مشكلة CGNAT.

في هذا المقال سأشارككم تجربة عملية كاملة، خطوة بخطوة، لحل هذه المشكلة بشكل نهائي باستخدام سيرفر افتراضي (VPS) رخيص جداً، وبروتوكول VPN حديث وآمن اسمه WireGuard، دون أي تكلفة شهرية تُذكر، ودون التأثير على سرعة الإنترنت اليومية لديك.

أولاً: ما هي مشكلة CGNAT، وكيف تعرف أنك مصاب بها؟

في الإنترنت التقليدي، يحصل كل منزل على عنوان IP عام (Public IP) خاص به، يمكن للأجهزة الأخرى حول العالم الوصول إليه مباشرة. هذا ما يسمح بعمل Port Forwarding بشكل طبيعي.

لكن بسبب نقص عناوين IPv4 العالمية، بدأت كثير من شركات الإنترنت في الدول النامية باستخدام تقنية تسمى Carrier-Grade NAT (CGNAT)، وهي تعني ببساطة أن مزود الخدمة يجعلك تشارك عنوان IP عام واحد مع مئات أو آلاف العملاء الآخرين في نفس الوقت.

النتيجة: لا يوجد لديك عنوان IP خاص بك حقاً، وبالتالي أي محاولة لفتح منفذ (Port Forwarding) من الراوتر لن تنجح أبداً، لأن الراوتر نفسه لا يملك عنواناً عاماً حقيقياً يمكن توجيه الحركة إليه.

علامات تؤكد أنك خلف CGNAT:

  • قمت بعمل Port Forwarding بشكل صحيح 100% في الراوتر، ومع ذلك لا تنجح أي أداة فحص منافذ خارجية في الوصول إليك.
  • عنوان IP الذي يظهر لك عند زيارة موقع "What is my IP" يبدأ غالباً بنطاق 100.64.0.0 إلى 100.127.255.255 (وهو نطاق محجوز خصيصاً لـ CGNAT حسب RFC 6598).
  • تطبيقات أخرى تعتمد على الاتصال الوارد (مثل كاميرات IP أو سيرفرات الألعاب) تواجه نفس المشكلة.

ثانياً: لماذا فشلت الحلول التقليدية؟

قبل الوصول إلى الحل النهائي، من المهم أن تعرف أن الطرق التالية لن تنجح إذا كانت المشكلة CGNAT حقيقية:

  • Port Forwarding من الراوتر: لا يجدي، لأن الراوتر خلف عنوان IP آخر تابع للمزود وليس عنوانك الحقيقي.
  • UPnP: نفس المشكلة، يعمل على المستوى المحلي فقط ولا يصل إلى الإنترنت العام.
  • طلب IP ثابت من المزود: في كثير من الدول العربية، حتى لو حصلت على "IP ثابت"، فإنه غالباً يكون ثابتاً على نطاق CGNAT نفسه، وليس عنواناً عاماً حقيقياً مفتوح المنافذ.

ثالثاً: الفكرة الأساسية للحل — استئجار "عنوان IP عام" بسعر فنجان قهوة

الحل العملي والمضمون هو ببساطة: استئجار سيرفر افتراضي صغير (VPS) من شركة استضافة عالمية، يملك عنوان IPv4 عاماً حقيقياً ومنافذه مفتوحة بالكامل من اليوم الأول، ثم إنشاء "نفق" آمن (Tunnel) بين هذا السيرفر وجهاز الكمبيوتر في المنزل.

بهذه الطريقة، أي اتصال قادم من شبكة Pi Network إلى عنوان السيرفر على المنافذ 31400-31409 سيتم تمريره تلقائياً عبر النفق إلى جهازك في المنزل، وكأن عقدتك تعمل فعلياً على عنوان عام مفتوح.

الأدوات المستخدمة في هذا الحل:

  • Hetzner Cloud: شركة استضافة ألمانية موثوقة، توفر VPS بمواصفات جيدة (CX23: معالجين، 4GB RAM، 40GB تخزين) بسعر يبدأ من حوالي 5 دولار شهرياً فقط.
  • Debian 12: نظام تشغيل لينكس مجاني وخفيف ومستقر، مناسب جداً لتشغيل خدمات الشبكة.
  • WireGuard: بروتوكول VPN حديث، سريع جداً، مفتوح المصدر، ومدمج رسمياً في نواة لينكس، ومدعوم رسمياً على ويندوز.

رابعاً: خطوات التنفيذ العملي الكامل

الخطوة 1: إنشاء حساب وVPS على Hetzner

سجّل حساباً جديداً على موقع Hetzner Cloud، ثم أنشئ مشروعاً جديداً وسيرفراً (Server) بالمواصفات التالية:

  • الموقع (Location): Nuremberg أو Helsinki (أقرب وأسرع لمنطقتنا).
  • نظام التشغيل (Image): Debian 12.
  • النوع (Type): الفئة Shared vCPU، الباقة CX23 (تكفي بسهولة لعقدة Pi Network مع Docker).

بعد إنشاء السيرفر، ستحصل على عنوان IP عام (مثال في تجربتنا: 178.105.237.39) وكلمة مرور root يتم إرسالها على بريدك الإلكتروني.

الخطوة 2: تثبيت وإعداد WireGuard على السيرفر

تتصل بالسيرفر عبر SSH من خلال Git Bash على ويندوز:

ssh root@SERVER_IP

ثم تثبت WireGuard:

apt update && apt install -y wireguard

تولّد مفاتيح التشفير الخاصة بالسيرفر والعميل (جهازك):

wg genkey | tee /etc/wireguard/server_private.key \
  | wg pubkey > /etc/wireguard/server_public.key

wg genkey | tee /etc/wireguard/client_private.key \
  | wg pubkey > /etc/wireguard/client_public.key

ثم تنشئ ملف إعداد النفق على السيرفر /etc/wireguard/wg0.conf بالمحتوى التالي (مع استبدال المفاتيح بالقيم الخاصة بك):

[Interface]
PrivateKey = SERVER_PRIVATE_KEY
Address = 10.0.0.1/24
ListenPort = 51820
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT
PostUp = iptables -A FORWARD -o wg0 -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
PostDown = iptables -D FORWARD -o wg0 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.0.0.2/32

تفعّل توجيه الحزم (IP Forwarding) وتشغّل النفق:

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0

الخطوة 3: توجيه منافذ Pi Network من السيرفر إلى جهازك (DNAT)

هذه هي الخطوة الأهم: نخبر السيرفر أن أي حركة واردة على المنافذ 31400-31409 يجب تمريرها عبر النفق إلى عنوان جهازك داخل شبكة WireGuard (10.0.0.2):

iptables -A FORWARD -i eth0 -o wg0 \
  -p tcp --dport 31400:31409 -j ACCEPT

iptables -A FORWARD -i eth0 -o wg0 \
  -p udp --dport 31400:31409 -j ACCEPT

iptables -t nat -A PREROUTING -i eth0 \
  -p tcp --dport 31400:31409 \
  -j DNAT --to-destination 10.0.0.2

iptables -t nat -A PREROUTING -i eth0 \
  -p udp --dport 31400:31409 \
  -j DNAT --to-destination 10.0.0.2

ولحفظ هذه القواعد بشكل دائم بعد إعادة تشغيل السيرفر:

apt install -y iptables-persistent
netfilter-persistent save

الخطوة 4: تثبيت WireGuard على ويندوز وربطه بالسيرفر

حمّل تطبيق WireGuard الرسمي من الموقع الرسمي wireguard.com، ثم أنشئ ملف إعداد على جهازك (wg0.conf) بهذا المحتوى:

[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24
DNS = 1.1.1.1

[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_IP:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

ثم في تطبيق WireGuard: Import tunnel(s) from file، اختر الملف، واضغط Activate.

ملاحظة مهمة: القيمة AllowedIPs = 0.0.0.0/0 تعني أن كل حركة الإنترنت في جهازك ستمر عبر السيرفر (Full Tunnel). هذا ضروري لأن Pi Node يحتاج أن "يرى" نفسه فعلياً وكأنه يملك عنوان السيرفر العام. إذا كان لديك تطبيقات أخرى مثل Grass تعتمد على عنوان IP منزلي حقيقي، يمكنك بعد التأكد من نجاح Pi Node التحول إلى وضع Split Tunnel (نفق جزئي) ليمر فقط ترافيك Pi Node عبر السيرفر بينما تبقى باقي التطبيقات على إنترنتك المحلي.

الخطوة 5: فتح المنافذ في جدار حماية ويندوز

لضمان استقبال الاتصالات الواردة عبر النفق بدون حجب، نفتح المنافذ المطلوبة في PowerShell (كمسؤول):

New-NetFirewallRule `
  -DisplayName "Allow ICMP WireGuard" `
  -Protocol ICMPv4 `
  -Direction Inbound `
  -Action Allow

New-NetFirewallRule `
  -DisplayName "Pi Node Ports TCP" `
  -Direction Inbound -Protocol TCP `
  -LocalPort 31400-31409 `
  -Action Allow

New-NetFirewallRule `
  -DisplayName "Pi Node Ports UDP" `
  -Direction Inbound -Protocol UDP `
  -LocalPort 31400-31409 `
  -Action Allow

خامساً: مشكلة شائعة قد تواجهك — تعارض برامج VPN الأخرى

في تجربتنا العملية، واجهنا مشكلة استمر فيها فحص المنافذ بالفشل رغم أن كل الإعدادات كانت صحيحة، وكان السبب وجود تطبيق VPN آخر (في حالتنا كان WireSock) يعمل في الخلفية ويتعارض مع واجهة WireGuard الجديدة، فيمنع وصول حزم الـ ping والاتصالات إلى الجهاز فعلياً، على الرغم من أن WireGuard كان يظهر "Active".

الحل كان إيقاف خدمة التطبيق المتعارض بالكامل من PowerShell:

Stop-Service -Name "WireSockConnectService" -Force

ثم إعادة تفعيل (Deactivate / Activate) نفق WireGuard من جديد. بعد هذه الخطوة فقط، أصبح بإمكان السيرفر الوصول إلى الجهاز عبر عنوان النفق (10.0.0.2) واستقبال الاتصالات بنجاح.

سادساً: كيف تتأكد أن العقدة أصبحت تعمل بشكل صحيح فعلياً؟

هنا نقطة بالغة الأهمية تجاهلها كثير من الشروحات: أداة "Check Now" داخل تطبيق Pi Desktop قد تستمر في إظهار "NOT OPEN" لكل المنافذ، وقد تفشل خطوة "Pinging your computer" حتى لو كانت العقدة تعمل بشكل مثالي. هذه الأداة قد تكون غير دقيقة في بعض إصدارات Pi Desktop، خصوصاً عند استخدام شبكات VPN.

المؤشر الحقيقي والموثوق هو صفحة Troubleshooting داخل Pi Desktop، وتحديداً قسم Consensus:

  • State: Synced! — يعني أن عقدتك متزامنة بالكامل مع آخر كتلة في الشبكة.
  • Outgoing connections — عدد الاتصالات الصادرة من عقدتك إلى عقد أخرى.
  • Incoming connections — عدد الاتصالات الواردة من عقد أخرى إليك. إذا أصبح هذا الرقم أكبر من صفر (مثلاً 1)، فهذا يعني أن منافذك أصبحت مفتوحة وقابلة للوصول من الإنترنت فعلياً.
  • Supporting other nodes: Yes — التأكيد النهائي على أن عقدتك تساهم الآن في دعم الشبكة.

يمكنك أيضاً التحقق بشكل مستقل باستخدام أي أداة فحص منافذ خارجية (Port Checker) على عنوان السيرفر العام، للتأكد من أن المنفذ الأساسي (في حالتنا 31402) يظهر فعلاً Open من الخارج.

سابعاً: ملخص الفوائد التي حصلنا عليها

  • تجاوز كامل لمشكلة CGNAT بدون الحاجة للاتصال بمزود الإنترنت أو تغيير الباقة.
  • عنوان IP عام ثابت ومنافذ مفتوحة بالكامل على مدار الساعة.
  • تكلفة شهرية رمزية جداً (أقل من سعر كوب قهوة في الشهر).
  • عقدة Pi Network أصبحت تستقبل اتصالات حقيقية من الشبكة، وتدعم عقد أخرى، مما يحسّن من تصنيفها ضمن مرشحي SuperNode مستقبلاً.
  • إمكانية استخدام السيرفر نفسه لاحقاً لاستضافة مشاريع أخرى (مواقع، API، تطبيقات Web3) دون تكلفة إضافية.

ثامناً: نصائح ختامية

  • إذا كانت لديك تطبيقات أخرى تعتمد على IP منزلي حقيقي (مثل Grass أو شبكات مشاركة النطاق الترددي)، راقب أدائها بعد تفعيل Full Tunnel، وفكّر في التحول لـ Split Tunnel إذا لزم الأمر.
  • احتفظ بنسخة من ملفات الإعداد (wg0.conf) في مكان آمن، وغيّر كلمة مرور root للسيرفر فوراً بعد أول تسجيل دخول.
  • اجعل خدمة WireGuard تبدأ تلقائياً مع تشغيل ويندوز لضمان استمرارية عمل العقدة بعد إعادة التشغيل.

بهذه الخطوات، تكون قد حوّلت عقدة Pi Network الخاصة بك من عقدة "محجوبة" خلف CGNAT إلى عقدة كاملة الاتصال، تساهم فعلياً في شبكة Pi، وبتكلفة لا تكاد تُذكر.

تعليقات