الرجوع لكل المقالات
development

الدليل "لا-منافذ-مفتوحة": Cloudflare Tunnels ل Backend Devs

5 دقايق قراءة
18 مشاهدة
cloudflare tunnelcloudflare tunnel لو كنت عملت مع Stripe webhook أو OAuth callback أو عايز تظهر API локال لdeveloper мобильный، هتلاقي نفسك بتتعامل مع router port forwarding، واللي بيكون أمنيًا ضعيفًا وبياخد وقت كبير. كsenior backend engineer، بتبحث عن طريقة دائمة وأمنية ويمكن تشغيلها عن طريق سكريبت لتشغيل خدمات لوكال. Cloudflare Tunnels (cloudflared) بتقدم اتصال برا فقط مع edge من Cloudflare. وبما أن الماكينة بتتصل بيهم، مابتفتحش أي بورت على الفايروول.

النموذج المентال

cloudflared هو كلينت، مش سيرفر.

  1. أプリكتك بتعمل على localhost:8000.
  2. cloudflared قاعد جنبها وبيتصل بCloudflare (بيقوم ب"بايب").
  3. اليوزرز بيتصلوا ب api.yourdomain.com.
  4. 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" بوليسي.

  1. روح ل Cloudflare Zero Trust Dashboard.
  2. انتقل ل Access > Applications.
  3. انقر Add an application واختر Self-hosted.
  4. أدخل اسم للأプリ وحدد Application domain اللي راوت للتونل (زى app.example.com).
  5. اسكرول ل Application policies وانقر Add a policy.
  6. إنشاء بوليسي للسماح بالوصول العام:
  • Policy name: أدخل اسم زى "Public Bypass".
  • Action: اختر Bypass.
  • Create additional rules: تحت Include، اختر Everyone.
  1. انقر 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.pem
  • config.yml
  • tunnel-UUID.json بدون دي، التونل مش هيعمل تاني.

نقل للتونل لماكينة تانية

  1. ثبت cloudflared
  2. انسخ الفايلز التلاتة للديركتوري نفسة من cloudflared
  3. اخلي المسارات داخل config.yml صحيحة
  4. شغل
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 بيتكلم مع التونل. الماكينة مافتحش بورت. ده ليه النسخ الاحتياطي أهم من الماكينة نفسها.

مقالات مشابهة

عرض الكل في development