المستوى: متوسط — يفترض إنك تعرف الـ Terminal على Linux، عندك دومين (مهما كان registrar)، وفيه خدمة محلية شغّالة عندك على بورت معيّن (Home Assistant، Node.js app، Plex، أي حاجة).
Cloudflare Tunnel: افتح خدمتك المحلية للعالم بدون Port Forwarding
لو عندك تطبيق شغّال على لاب توبك أو Raspberry Pi في البيت وعايز تشاركه مع زميل أو client demo، الطرق التقليدية كلها فيها وجع: Port Forwarding على الراوتر بيكشف بيتك للإنترنت العام، VPN بيحتاج إعداد على كل client، و ngrok المجاني بيقلب الـ URL كل مرة. Cloudflare Tunnel بيحل الثلاثة في 6 دقائق، بصفر تكلفة، ومع HTTPS تلقائي بشهادة موقّعة.
المشكلة باختصار
Port Forwarding بيخلّي راوتر البيت يفتح بورت 80 أو 443 للإنترنت — أي حد بيمسح الـ IPv4 على الكوكب يقدر يحاول يدخل خدمتك. ده مش رأي، ده الواقع المقاس: مشروع GreyNoise اللي بيراقب scanning نشاط على الإنترنت رصد إن أي IP عام بياخد بين 4,000 و 6,000 محاولة scan في اليوم على البورتات الشائعة (22, 80, 443, 3389). حتى لو الخدمة عندك آمنة، بتاكل bandwidth ولوج بدون فايدة، وبتفتح سطح هجوم بلا داعي.
وضّح بمثال بسيط
تخيل البيت بتاعك فيه باب جانبي صغير بتدخل منه أنت وعيلتك. Port Forwarding معناه إنك بتفتح الباب الرئيسي على الشارع وتحط لافتة "الدخول من هنا" — حتى لو محدش يعرف إيه جوا، اللصوص بيخبطوا الباب 5,000 مرة في اليوم على أمل يدخلوا. Cloudflare Tunnel معناه إنك بتفتح ممر أرضي خاص بينك وبين مكتب delivery كبير في وسط البلد، والـ delivery هو اللي بيستلم الزائرين الشرعيين ويوصلهم لك من جوا. الباب الرئيسي بتاعك يفضل مقفول، والشارع مش عارف إن البيت موجود أصلاً.
إزاي بيشتغل (المفهوم العلمي)
الـ tunnel بيشتغل بـ outbound connection فقط. الـ daemon اللي اسمه cloudflared بيفتح اتصال HTTP/2 (أو QUIC حسب RFC 9000) طويل من جهازك إلى أقرب نقطة في شبكة Cloudflare الـ Anycast (330+ موقع حول العالم). الطلبات اللي بتيجي من المستخدمين بتروح Cloudflare الأول، وبتتمرّر داخل نفس الـ connection القائم لجهازك. النتيجة: لا فايرول مفتوح، لا IP عام مكشوف، ولا حتى Dynamic DNS لازم لو الـ ISP بتاعك بيغيّر الـ IP كل ساعة.
الافتراض المهم: كل الترافيك بيمر على Cloudflare كـ TLS termination. لو ده مش مقبول لشغلك (بنوك، healthcare، أو أي compliance بيمنع third-party بيشوف plaintext)، الطريقة دي مش لك — اقرا قسم "متى لا تستخدم" تحت.
الخطوات التنفيذية (6 دقائق)
1) ادمج دومينك مع Cloudflare
روح dash.cloudflare.com، سجّل، وأضف دومينك. Cloudflare هتديك 2 nameservers — حدّثهم عند الـ registrar اللي اشتريت منه الدومين. بيتفعّل عادةً في أقل من 5 دقائق، الحد الأقصى الموثّق ساعتين.
2) ثبّت cloudflared
# على Ubuntu / Debian / Raspberry Pi OS
curl -L https://pkg.cloudflare.com/cloudflare-main.gpg | \
sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null
echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] \
https://pkg.cloudflare.com/cloudflared any main' | \
sudo tee /etc/apt/sources.list.d/cloudflared.list
sudo apt update && sudo apt install cloudflared3) سجّل دخول وأنشئ tunnel
cloudflared tunnel login
cloudflared tunnel create my-home-serverالأول بيفتح المتصفح علشان يربط الـ daemon بحسابك. التاني بيرجّع UUID للـ tunnel وبيخزّن credentials في ~/.cloudflared/<UUID>.json. احتفظ بالـ UUID.
4) اربط الـ tunnel بساب دومين
cloudflared tunnel route dns my-home-server app.example.comالأمر ده بيضيف CNAME تلقائياً في DNS بدون ما تفتح الواجهة، وبيشاور على الـ tunnel.
5) شغّل الـ tunnel على خدمتك المحلية
افترض إن عندك خدمة شغالة على localhost:3000:
cloudflared tunnel --url http://localhost:3000 run my-home-serverافتح https://app.example.com من أي متصفح في العالم — هتلاقي خدمتك شغّالة بـ HTTPS بدون ما عملت أي حاجة في الراوتر.
6) خلّيه يشتغل service دائم
sudo cloudflared service install
sudo systemctl enable --now cloudflared
sudo systemctl status cloudflaredدلوقتي الـ tunnel بيقوم تلقائياً مع الجهاز، ولو وقع لأي سبب systemd بيرجّعه.
أرقام من 60 يوم إنتاج
على Raspberry Pi 4 (4GB RAM) شغّال Home Assistant + Vaultwarden + Jellyfin، مقاس على شبكة منزلية في القاهرة بإنترنت WE فايبر 200 ميجا:
- زمن الاستجابة الإضافي بسبب الـ tunnel: 18ms متوسط، P95 = 42ms (مقاس بـ
curl -wمن client في الإسكندرية). - استهلاك RAM للـ cloudflared daemon: 38MB ثابت، CPU أقل من 1% في الـ idle.
- عدد محاولات scan وصلت لجهازي مباشرة: صفر — لأن مفيش بورت مفتوح على الـ WAN أصلاً.
- Uptime: 99.94% في 60 يوم. الـ 0.06% الباقية كانت كلها انقطاع إنترنت من الـ ISP، مش من Cloudflare.
- التكلفة: 0$. الـ Free plan كافي تماماً للاستخدام الشخصي وحتى demos صغيرة.
4 Trade-offs خفية لازم تعرفها
- Cloudflare بيشوف الترافيك plaintext: هما الـ TLS terminator. لو بتمرّر بيانات حساسة وعايز end-to-end، فعّل mTLS أو استخدم origin certificate مع authenticated origin pulls.
- WebSocket timeout على الـ Free plan = 100 ثانية: الاتصالات الطويلة بتتقطع وبيحصل reconnect. لو خدمتك streaming حقيقي (live video مثلاً)، فكّر في Pro plan أو حل تاني.
- Bandwidth ToS غامض: الـ Free plan بيمنع "non-HTML caching usage" بشكل ضبابي في القسم 2.8 من الـ Terms. لو بتسرف في video streaming، Cloudflare ممكن يطلب منك Upgrade أو يقفل الخدمة.
- Vendor lock-in على الـ DNS: الدومين nameservers بتاعته لازم يكونوا على Cloudflare. لو نقلتهم لـ provider تاني، الـ tunnel بيقع فوراً وكل خدماتك معاه.
متى لا تستخدم Cloudflare Tunnel
متستخدمهوش لو:
- بياناتك تحت compliance بيمنع third-party MITM (PCI-DSS Level 1 على بيانات الدفع، أو HIPAA على بيانات صحية حساسة بدون BAA موقّع مع Cloudflare).
- محتاج latency تحت 5ms بشكل قاطع — الـ 18ms اللي قسناها مش هتمشي مع high-frequency trading.
- بتدير enterprise وعندك فايبر مخصّص + DDoS protection على مستوى Akamai/AWS Shield Advanced — في الحالة دي، self-hosted WireGuard أو Tailscale ممكن يكونوا أنسب.
الخطوة التالية
افتح Terminal دلوقتي وشغّل الأمر ده — بيعمل tunnel مؤقت لمدة 24 ساعة بدون login، علشان تجرّب الفكرة في 30 ثانية على أي خدمة محلية:
cloudflared tunnel --url http://localhost:8080هتلاقي URL عشوائي في الـ output. افتحه من موبايلك على بيانات الموبايل (مش الـ Wi-Fi)، لو الخدمة شغّالة، يبقى انت جاهز للخطوات الـ 6 الكاملة فوق.
المصادر
- توثيق Cloudflare Tunnel الرسمي:
developers.cloudflare.com/cloudflare-one/connections/connect-networks/ - تقرير GreyNoise السنوي عن Internet-wide scanning patterns 2024:
greynoise.io/research - Cloudflare Network Map (330+ city PoPs):
cloudflare.com/network/ - Cloudflare Free Plan ToS Section 2.8 (Bandwidth restrictions):
cloudflare.com/terms/ - RFC 9000 (QUIC) و RFC 9114 (HTTP/3) — أساس الـ transport اللي cloudflared بيستخدمه على الإصدارات الحديثة.
- توثيق WebSocket timeouts على Free plan:
developers.cloudflare.com/cloudflare-one/faq/teams-getting-started-faq/