با یه دستور localhost رو بده به دنیا
خلاصهٔ کاملتر
نویسنده با یه موقعیت آشنا شروع میکنه: یه سرور وب روی لپتاپت بالاست و میخوای یه نفر اون سر دنیا همین حالا تو مرورگرش بازش کنه، روی HTTPS. یه دستور این کارو میکنه:
cloudflared tunnel --url http://localhost:8000
چند ثانیه بعد یه آدرس عمومی مثل میگیری. نه اکانت لازمه، نه رکورد DNS، نه پورت باز روی روتر، و با Ctrl-C آدرس از بین میره. کلادفلر این قابلیت رو از ۲۰۲۱ داره، ولی سپتامبر ۲۰۲۶ که براش صفحهٔ try.cloudflare.com رو ساخت رفت صفحهٔ اول Hacker News و کلی از اون ۳۰۰ کامنت آدمهایی بودن که تازه فهمیدن چنین چیزی هست.
منطقش برعکس راه قدیمیه. تو راه قدیمی باید IP عمومی و پورت فوروارد شده و دامنه و گواهی TLS داشته باشی، که یه بعدازظهر وقت میگیره و آخرش IP خونهت هم عمومی شده. تانل جهت رو برمیگردونه: cloudflared هیچوقت منتظر اتصال ورودی نمیمونه، بلکه یه اتصال QUIC به بیرون، به نزدیکترین دیتاسنتر کلادفلر باز میکنه و نگهش میداره. درخواست بازدیدکننده از همون مسیر برمیگرده و به سرور محلیت میرسه. سمت تو هیچ پورتی باز نمیشه و اسکنر پورت چیزی پیدا نمیکنه. فقط همون یه origin که با --url دادی بیرون دیده میشه، نه بقیهٔ ماشینت.
نکتهٔ مهم اینه که TLS بازدیدکننده روی خود کلادفلر تموم میشه، پس کلادفلر ترافیک رو میبینه. نویسنده میگه همهٔ سایتهای پشت کلادفلر همینطورن و این تفاوت اصلی با Tailscale Funnel هست که رله فقط بایتهای رمزشده رو رد میکنه. وقتی cloudflared رو ببندی، بازدیدکننده صفحهٔ error 1033 با وضعیت 530 میگیره، و بعد از حدود پنج دقیقه یه job پاکسازی تانل و رکورد DNSش رو حذف میکنه. اگر cloudflared بالا باشه ولی سرور محلیت خوابیده باشه، جوابش 502 Bad gateway هست.
اینو با Cloudflare Tunnel معمولی (named tunnel) قاطی نکن. quick tunnel اکانت نمیخواد، یه اسم تصادفی روی trycloudflare.com میده، فقط یه origin میگیره و تا Ctrl-C زندهست؛ خود کلادفلر هم تو اولین خط لاگ میگه این ابزار دمو هست و تضمین uptime نداره. named tunnel اکانت رایگان و دامنه روی Cloudflare DNS میخواد، ولی در عوض اسم ثابت، چند سرویس زیر یه تانل، اجرا بهعنوان سرویس سیستمی با اتصال مجدد خودکار، و صفحهٔ لاگین Cloudflare Access رو بهت میده.
یه تلهٔ عملی هم هست که تقریباً هر سرور dev مدرنی بهش میخوره. Vite فقط به درخواستهایی جواب میده که هدر Hostشون localhost یا IP باشه، تا جلوی حملهٔ DNS rebinding رو بگیره، پس آدرس تانل رو بلاک میکنه. یه راهش اضافه کردن allowedHosts تو کانفیگ ویت یا Astro هست (تو Next.js اسمش allowedDevOrigins هست). راه دومش بدون دست زدن به کانفیگ، عوض کردن هدر از سمت تانله:
cloudflared tunnel --url http://localhost:4321 --http-host-header localhost:4321
بدیش اینه که اپت دیگه اسم دامنهٔ عمومی خودش رو نمیدونه، پس اگر URL مطلق میسازه مینویسه localhost. برای یه دموی سریع مهم نیست.
سمت هدرها هم چند چیز کاربردیه. req.socket.remoteAddress بیفایدهست چون همیشه خود cloudflared از loopback وصل میشه؛ IP واقعی بازدیدکننده تو cf-connecting-ip هست و کشورش تو cf-ipcountry (ژئولوکیشن مجانی). cf-ray شناسهٔ درخواست کلادفلره و برای دیباگ خوبه. جالبتر از همه، کلادفلر خودش x-robots-tag: none به جواب اضافه میکنه، یعنی پروژهٔ نیمهتمومت سر از گوگل درنمیاره. نویسنده هشدار میده که تانل روی http:// ساده هم جواب میده و ریدایرکت نمیکنه، پس لینکی که میفرستی رو با https:// بفرست.
نکات کلیدی:
- یه دستور cloudflared tunnel --url بدون اکانت یه آدرس HTTPS روی trycloudflare.com میده
- تانل فقط اتصال خروجی QUIC باز میکنه، پس هیچ پورتی روی روتر باز نمیشه
- TLS روی کلادفلر تموم میشه، یعنی کلادفلر ترافیک رو میبینه
- تانل قطعشده بعد از حدود ۵ دقیقه با رکورد DNSش پاک میشه؛ در این فاصله بازدیدکننده error 1033 با کد 530 میبینه
- اگر تو ~/.cloudflared فایل config.yml داشته باشی، quick tunnel کار نمیکنه
- سرورهای مبتنی بر Vite آدرس تانل رو بلاک میکنن؛ با allowedHosts یا فلگ --http-host-header حل میشه
- IP واقعی بازدیدکننده تو هدر cf-connecting-ip هست، نه تو سوکت
- کلادفلر خودش x-robots-tag: none میذاره تا صفحه ایندکس نشه
- نسخهٔ تستشدهٔ نویسنده cloudflared 2026.9.1 روی مک بوده




