Skip to content

Cloudflare tunnel

Cloudflare Tunnel (cloudflared) สร้างการเชื่อมต่อออกรูปแบบ persistent outbound TLS จากเครื่องต้นทาง (origin) ไปยังเครือข่าย edge ของ Cloudflare ทำให้ Cloudflare สามารถรับทราฟฟิกและส่งต่อไปยัง service ภายในเครื่องของคุณ ได้โดยตรงโดยไม่ต้องเปิดพอร์ตบนไฟร์วอลล์

องค์ประกอบหลัก

Section titled “องค์ประกอบหลัก”
  • cloudflared (client) — ตัวโปรแกรมที่รันบนเครื่องของคุณ สร้างการเชื่อมต่อออกไปยัง Cloudflare และอ่าน config.yml / credentials เพื่อกำหนด ingress rules
  • Cloudflare Edge — จุดรับทราฟฟิกจากอินเทอร์เน็ต (HTTPS) และส่งต่อผ่าน tunnel ไปยัง client
  • Tunnel Credentials — ไฟล์ JSON ที่ได้จาก cloudflared tunnel create หรือ cloudflared login เก็บไว้บนเครื่อง (~/.cloudflared หรือโฟลเดอร์ที่กำหนด)
  • Ingress rules / DNS route — นิยามว่า hostname ไหนจะถูกแมปไปที่ service ไหน (เช่น myapp.example.com → http://localhost:3000) และสามารถ map DNS ด้วย cloudflared tunnel route dns ได้

https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads

Terminal window
# เข้าสู่ระบบ
cloudflared login
Terminal window
# สร้าง url tunnel แบบชั่วคราว
cloudflared tunnel --url <local-url>
# สร้าง tunnel
cloudflared tunnel create <name>
# ดูรายการ tunnel ที่มี
cloudflared tunnel list
# ดูรายละเอียดของ tunnel
cloudflared tunnel info <name-or-UUID>
# รัน tunnel ที่สร้างไว้ (ใช้ชื่อหรือ UUID)
cloudflared tunnel run <name-or-UUID>
# หยุดการรัน (ถ้ารัน foreground ให้ Ctrl+C)
# ลบ tunnel (จะลบ credentials/registration ใน Cloudflare)
cloudflared tunnel delete <name-or-UUID>
# map tunnel กับ dns
cloudflared tunnel route dns <name-or-UUID> <hostname>

วิธีใช้งานเบื้อต้น

Section titled “วิธีใช้งานเบื้อต้น”

สร้าง tunnel

Terminal window
cloudflared tunnel create <name>

ทำการสร้าง config เพื่อ setting การ map router โดยสร้างไฟล์ config.yml ที่ path ~/.cloudflared/config.yml

config.yml

tunnel: {UUID}
credentials-file: ~/.cloudflared/{UUID}.json
ingress:
# frontend
- hostname: app.example.com
service: http://localhost:3000
# api service
- hostname: api.example.com
service: http://localhost:8080
- service: http_status:404

สร้าง dns record เพื่อเชื่อมเข้ากับ tunnel ด้วยคำสั่ง

Terminal window
cloudflared tunnel route dns <name-or-UUID> <hostname>
Avatar blackCat
ถ้าต้องการลบ router dns สามารถทำได้ใน ui dns ของ cloudflare เลย

รัน tunnel

Terminal window
cloudflared tunnel run <name-or-UUID>

ลองเข้าเว็บด้วย app.example.com จะพบว่า cloudflare มัน route มาที่ http://localhost:3000 ถือว่าเสร็จสิ้นขั้นตอนการใช้งาน

ถ้าอยากให้เปิดเครื่องมาแล้ว start tunnel เลย set ตามนี้เลย https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/do-more-with-tunnels/local-management/as-a-service/