Cloudflare Tunnel: เปิดเซิร์ฟเวอร์โลคอลให้โลกเห็นในไม่กี่นาที

เฮ้ย เคยไหมที่แบบว่า ทำเว็บเสร็จละอยากให้เพื่อนหรือลูกค้าดูบนเครื่องเราเนี่ยแหละ แต่ไม่อยาก deploy ขึ้นจริงจัง แค่โชว์เล่นๆ? หรือบางทีก็อยากลองเทส webhook จากภายนอกเข้ามาที่ dev server เรา? ปัญหาคือต้องมานั่งเปิด port forwarding ในเราเตอร์, ไม่ก็งงกับ NAT, บางที Firewall ก็กวนตีนอีก. เออ คืออย่างงี้ มันมีวิธีที่ง่ายกว่าเยอะมาก นั่นก็คือ Cloudflare Tunnel

เอาจริงๆ นะ Cloudflare Tunnel มันคืออะไรวะ? พูดง่ายๆ มันคือตัวกลางที่สร้าง secure tunnel จากเครื่องเรา (ที่อาจจะอยู่หลัง NAT หรือ Firewall) ไปยัง Cloudflare Network เว้ย. แล้ว Traffic จาก Internet ก็จะวิ่งผ่าน Cloudflare เข้ามาใน Tunnel นี้เลย โดยที่เราไม่ต้องเปิดพอร์ตอะไรเลยบนเราเตอร์เรา โคตรจะดี!

ประโยชน์หลักๆ ที่ผมชอบเลยนะ คือ 1. ไม่ต้องเปิดพอร์ต: อันนี้โคตรสำคัญสำหรับความปลอดภัย 2. ตั้งค่าง่าย: ง่ายกว่าการมานั่งงม DDNS หรือ router เยอะ 3. เร็ว: เพราะมันวิ่งผ่าน Cloudflare Edge Network 4. ฟรี: สำหรับการใช้งานส่วนตัว หรือ dev นี่คือจบเลย!

มาลองดูกันเลยดีกว่าว่าทำไง ไม่ได้ยากเลยเว้ย

# 1. ติดตั้ง cloudflared
# สำหรับ macOS (ใช้ Homebrew โคตรจะง่าย)
brew install cloudflare/cloudflared/cloudflared

# สำหรับ Linux (Debian/Ubuntu)
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o /usr/local/bin/cloudflared
chmod +x /usr/local/bin/cloudflared

# สำหรับ Windows (PowerShell ในฐานะ Admin)
# ดาวน์โหลดตัว .exe จาก GitHub releases โดยตรง:
# https://github.com/cloudflare/cloudflared/releases
# แล้วเอาไปไว้ที่ PATH หรือรันจากโฟลเดอร์ที่โหลดมา

# 2. Login เข้า Cloudflare Account
# อันนี้จะเปิด browser ให้เราไป verify
cloudflared tunnel login

# 3. สร้าง Tunnel
# ตั้งชื่อ tunnel ให้มันหน่อย อันนี้ผมจะตั้งว่า my-dev-tunnel
cloudflared tunnel create my-dev-tunnel

# พอสร้างเสร็จ มันจะบอก ID ของ Tunnel มาให้ พร้อมกับบอกว่าไฟล์ credential (JSON) ไปอยู่ที่ไหน
# เก็บ ID ไว้ดีๆ นะ เพราะต้องใช้
# เช่น Output จะหน้าตาประมาณนี้:
# You can find your tunnel ID in the output or on the Cloudflare dashboard.
# A new tunnel has been created!
# Name: my-dev-tunnel
# ID: <YOUR_TUNNEL_ID>
# cloudflared will route traffic from this tunnel to your origin service.
# It will also create a Cloudflare-managed DNS record for your tunnel.
# It can be found at ~/.cloudflared/<YOUR_TUNNEL_ID>.json

หลังจากที่เราได้ Tunnel ID แล้ว เราต้องบอก cloudflared ว่าจะให้มันส่ง traffic ไปไหน เราจะสร้างไฟล์ config ชื่อ config.yml (หรืออะไรก็ได้ แต่ .cloudflared/config.yml เป็น default ที่ดี) ไว้ในโฟลเดอร์ .cloudflared ซึ่งมักจะอยู่ใน Home Directory ของเรา

# ~/.cloudflared/config.yml
tunnel: <YOUR_TUNNEL_ID>
credentials-file: /Users/username/.cloudflared/<YOUR_TUNNEL_ID>.json # หรือ C:\Users\username\.cloudflared\<YOUR_TUNNEL_ID>.json สำหรับ Windows

ingress:
  - hostname: my-dev-app.yourdomain.com # ตรงนี้สำคัญ! ต้องใช้โดเมนที่เรามีใน Cloudflare
    service: http://localhost:3000 # สมมติว่า dev server เราเปิดอยู่ที่ port 3000
  - service: http_status:404 # ถ้าไม่ตรงเงื่อนไขข้างบน ให้ส่ง 404

ข้อสำคัญตรงนี้: hostname ใน config.yml เนี่ย ต้องเป็นโดเมนที่เราเพิ่มไว้ใน Cloudflare แล้วนะ และก็ต้องเป็น Subdomain ที่เราจะใช้ เช่น my-dev-app.yourdomain.com ถ้ายังไม่มี ให้ไปเพิ่ม CNAME record ใน Cloudflare DNS ที่ชี้ไปที่ <YOUR_TUNNEL_ID>.cfargotunnel.com (Cloudflare จะแนะนำให้เองตอนสร้าง Tunnel) หรือจะให้ Cloudflare สร้าง DNS record ให้เราอัตโนมัติก็ได้ตอนรันคำสั่ง cloudflared tunnel route dns <YOUR_TUNNEL_ID> my-dev-app.yourdomain.com ก็ได้

# 4. สร้าง DNS Record (ถ้ายังไม่ได้ทำ)
# ให้ cloudflared จัดการสร้าง DNS record ให้เองเลย
cloudflared tunnel route dns my-dev-tunnel my-dev-app.yourdomain.com

# 5. รัน Tunnel!
# ใช้ชื่อ tunnel ที่เราสร้าง
cloudflared tunnel run my-dev-tunnel

# หรือถ้าเรามี config.yml ที่ถูกต้องแล้ว ก็แค่
# cloudflared tunnel --config ~/.cloudflared/config.yml run

# ถ้าทุกอย่างถูกต้อง คุณจะเห็นข้อความประมาณว่า Tunnel is active...
# แล้วก็ไปเปิด browser ที่ my-dev-app.yourdomain.com ได้เลย!

ปัญหาที่เคยเจอ: เคยเจอแบบว่ารันแล้วมันไม่ยอมเชื่อมต่อสักที ทั้งๆ ที่ config ก็ถูก ตรวจไปตรวจมา อ้าว! ลืมเปิด dev server บน localhost:3000 ซะงั้น! (โคตรจะเบลอ) หรือบางทีก็เป็นเรื่องของ DNS Cache ของเครื่องตัวเองที่ยังไม่ resolve โดเมนใหม่. อีกอันคือ hostname ใน config.yml ไม่ตรงกับโดเมนที่เรา set ไว้ใน Cloudflare อันนี้ก็เจอบ่อย. บางทีมี Firewall กวนๆ บล็อก outbound connection จาก cloudflared ด้วยนะ ก็ต้องไปเช็ค

บอกเลยว่า Cloudflare Tunnel นี่เป็นอะไรที่โคตรจะสะดวกตอน dev หรือตอนอยากโชว์งานให้ใครดูด่วนๆ ไม่ต้องมานั่งงมกับ network config ที่บางทีมันก็งงๆ เอาเป็นว่าถ้าต้องเปิด local dev server ออกไปข้างนอกแบบง่ายๆ และปลอดภัย อันนี้คือตัวเลือกอันดับต้นๆ ของผมเลย! ลองเล่นดูนะ ไม่ผิดหวังแน่นอน

Read more

ไอลีน กู: ตำนานนักสกีฟรีสไตล์ผู้พลิกโฉมวงการและความหมายของชัยชนะ

ไอลีน กู: ตำนานนักสกีฟรีสไตล์ผู้พลิกโฉมวงการและความหมายของชัยชนะ

เจาะลึกเรื่องราวของ Eileen Gu นักสกีฟรีสไตล์ผู้สร้างประวัติศาสตร์ในโอลิมปิก 2026 สถิติที่ไม่เคยมีมาก่อน ประเด็นถกเถียง และความแข็งแกร่งส่วนตัวที่ทำให้เธอก้าวสู่ระดับโลก

By ทีมงาน devdog
วันพระ: คู่มือฉบับสมบูรณ์สำหรับพุทธศาสนิกชนและผู้สนใจยุคใหม่

วันพระ: คู่มือฉบับสมบูรณ์สำหรับพุทธศาสนิกชนและผู้สนใจยุคใหม่

เจาะลึกวันพระและความสำคัญของวันมาฆบูชา 2569 ทั้งวันหยุดราชการ ธนาคาร กิจกรรมเวียนเทียนต้นไม้ และผลกระทบต่อบริการขนส่ง เตรียมตัววางแผนทำบุญและพักผ่อน

By ทีมงาน devdog
ถอดรหัสรักแท้: "บังมัดคลองตันต้นข้าว" เรื่องราวที่สะท้อนการให้อภัยและการเริ่มต้นใหม่

ถอดรหัสรักแท้: "บังมัดคลองตันต้นข้าว" เรื่องราวที่สะท้อนการให้อภัยและการเริ่มต้นใหม่

เจาะลึกงานวิวาห์ "บังมัดคลองตัน" กับ "ต้นข้าว มิสแกรนด์" พร้อมเหตุผลจากใจเจ้าสาวที่เลือกความรักเหนือกาลเวลาและคำวิจารณ์ สู่การเริ่มต้นชีวิตคู่ที่สะท้อนการให้อภัย

By ทีมงาน devdog
ไฮไลท์บอลไทยลีก 2: มหาสารคาม เอสบีที เอฟซี กับฟอร์มร้อนแรงสู่เส้นทางเพลย์ออฟ

ไฮไลท์บอลไทยลีก 2: มหาสารคาม เอสบีที เอฟซี กับฟอร์มร้อนแรงสู่เส้นทางเพลย์ออฟ

เจาะลึกไฮไลท์บอลไทยลีก 2 ของมหาสารคาม เอสบีที เอฟซี กับฟอร์มร้อนแรง ชัยชนะสำคัญจาก ชิตชนก และบทบาทโค้ชดุสิต สู่เส้นทางเพลย์ออฟที่น่าจับตา!

By ทีมงาน devdog