الدليل "لا-منافذ-مفتوحة": Cloudflare Tunnels ل Backend Devs
cloudflare tunnel
لو كنت عملت مع Stripe webhook أو OAuth callback أو عايز تظهر API локال لdeveloper мобильный، هتلاقي نفسك بتتعامل مع router port forwarding، واللي بيكون أمنيًا ضعيفًا وبياخد وقت كبير. كsenior backend engineer، بتبحث عن طريقة دائمة وأمنية ويمكن تشغيلها عن طريق سكريبت لتشغيل خدمات لوكال. Cloudflare Tunnels (cloudflared) بتقدم اتصال برا فقط مع edge من Cloudflare. وبما أن الماكينة بتتصل بيهم، مابتفتحش أي بورت على الفايروول.النموذج المентال
cloudflared هو كلينت، مش سيرفر.
- أプリكتك بتعمل على
localhost:8000. cloudflaredقاعد جنبها وبيتصل بCloudflare (بيقوم ب"بايب").- اليوزرز بيتصلوا ب
api.yourdomain.com. - Cloudflare بترسل الترافيك ده لماكينتك عن طريق البايب.
ده إيه
دليل عملي من النهاية للاخر عن كيفية تثبيت واستخدام ومهاجرة ونسخ احتياطي Cloudflare Tunnel باستخدام cloudflared. بيشغل على Windows وLinux. مكتوب عشان يتقلي direkt في بورتفوليو أو قاعدة معرفة.
الفكرة الأساسية
cloudflared بتقوم باتصال برا من الماكينة لCloudflare. مافيش بورت مفتوح. DNS بيشير للتونل، مش لIP من السيرفر. لو التونل كريدنتيالز موجود، أي ماكينة تقدر تشغله.
المتطلبات
- حساب Cloudflare
- دومين مضاف لCloudflare
- cloudflared مثبت
تثبيت cloudflared
Windows
استخدم winget
winget install Cloudflare.cloudflared
أو حمل الباينري من Cloudflare وأضفه لPATH. افحص
cloudflared --version
Linux
Debian أو Ubuntu
curl -fsSL 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 jammy main" | sudo tee /etc/apt/sources.list.d/cloudflared.list
sudo apt update
sudo apt install cloudflared
افحص
cloudflared --version
تسجيل الدخول مع Cloudflare
ده بيربط الماكينة بحساب Cloudflare.
cloudflared tunnel login
بيفتح 브라وزر. اختر الدومين. بعد النجاح، سيتخزن فايل سيرت لोकالي. المواقع
- Windows:
%USERPROFILE%\.cloudflared\cert.pem - Linux:
~/.cloudflared/cert.pemده الفايل حرجي.
إنشاء تونل
cloudflared tunnel create my-tunnel
هتلاقي
- Tunnel UUID
- فايل كريدنتيالز JSON مثال
~/.cloudflared/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.json
تشغيل التونل
إنشاء config.yml
Windows
المسار
%USERPROFILE%\.cloudflared\config.yml
Linux
~/.cloudflared/config.yml
مثال كونفيج
tunnel: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
credentials-file: /full/path/to/credentials.json
ingress:
- hostname: app.example.com
service: http://localhost:3000
- service: http_status:404
توجيه DNS
إنشاء ريكورد DNS بيشير للتونل
cloudflared tunnel route dns my-tunnel app.example.com
مهم
- النوع هو CNAME
- الهدف هو التونل، مش IP
- CNAMEs القديمة من تونلز محذوفة هتسبب مشاكل في التوجيه
جعل الأプリ متاح 公开
لو عايز الأプリ يكون متاح 公开 بدون أي فحص أمان (زى OTP أو login prompts) عن طريق Cloudflare Access، هتحتاج إنشاء "Bypass" بوليسي.
- روح ل Cloudflare Zero Trust Dashboard.
- انتقل ل Access > Applications.
- انقر Add an application واختر Self-hosted.
- أدخل اسم للأプリ وحدد Application domain اللي راوت للتونل (زى
app.example.com). - اسكرول ل Application policies وانقر Add a policy.
- إنشاء بوليسي للسماح بالوصول العام:
- Policy name: أدخل اسم زى "Public Bypass".
- Action: اختر Bypass.
- Create additional rules: تحت Include، اختر Everyone.
- انقر Add policy لحفظها.
الأプリ لوكال (زى
localhost:3000) دلوقتي متاح 公开 عن طريق الدومين بدون كонт롤 أمان.
تشغيل التونل
cloudflared tunnel run my-tunnel
أو كسيرفس
Windows
cloudflared service install
Linux
sudo cloudflared service install
مشاكل شائعة
الموقع مش متاح
- DNS CNAME بيشير لتونل قديم
- Tunnel UUID خاطئ في الكونفيج
- مسار كريدنتيالز خاطئ
بيشغل لوكال فقط
- الأプリ مش بتستمع على لوكال
- بورت خاطئ في إنغرس سيرفس
نسخ احتياطي ومهاجرة للتونل
ده أهم جزء.
الفايلز اللي لازم تنسخ احتياطي
من ~/.cloudflared أو %USERPROFILE%\.cloudflared
cert.pemconfig.ymltunnel-UUID.jsonبدون دي، التونل مش هيعمل تاني.
نقل للتونل لماكينة تانية
- ثبت cloudflared
- انسخ الفايلز التلاتة للديركتوري نفسة من cloudflared
- اخلي المسارات داخل
config.ymlصحيحة - شغل
cloudflared tunnel run my-tunnel
مافيش حاجة جديدة إنشاء تونل.
استخدام نفس التونل على Linux وWindows
التونلز بيشتغلوا على أي منصة. المسارات فقط بيتغيروا. مثال مسار على Windows
C:\Users\Ahmed\.cloudflared\credentials.json
مثال مسار على Linux
/home/ahmed/.cloudflared/credentials.json
UUID وcert بيبقوا نفسهم.
ملاحظات أمان
- اعامل
cert.pemزى پرايفت كي - أي حد عنده
cert.pemوcredentials.jsonيقدر يشغل التونل - خزن النسخ الاحتياطي مشفر
متى تعمل تونل جديد
cert.pemاتخربت- عايز عزلة صارمة بين البيئات
- محذفت التونل من Cloudflare داشبورد خلاف ذلك، اعمل ريوز نفس التونل.
النموذج المентال
cloudflared هو كلينت، مش سيرفر. DNS بيشير لCloudflare. Cloudflare بيتكلم مع التونل. الماكينة مافتحش بورت. ده ليه النسخ الاحتياطي أهم من الماكينة نفسها.
