Cloudflare Tunnel: เปิดโลกในบ้านให้โลกเห็นแบบปลอดภัย

ถ้าใครที่เคยต้องทำเว็บหรือบริการอะไรเล็ก ๆ ที่รันอยู่บนเครื่องที่บ้าน หรือใน Local Network แล้วอยากให้คนข้างนอกเข้าถึงได้นะ คงจะเจอปัญหาเดิมๆ คือ ต้องไปเปิดพอร์ตบน Router ใช่ป่ะ? หรือไม่ก็ต้องหา Public IP, แล้วถ้ามันเปลี่ยนล่ะ? ก็ต้องง้อ DDNS อีก ปวดหัวโคตรๆ แถมเรื่องความปลอดภัยอีก เปิดพอร์ตเนี่ย โคตรเสี่ยงเลยบางที

ทีนี้ Cloudflare Tunnel มันมาช่วยตรงนี้ได้เยอะมาก คือมันสร้างอุโมงค์เชื่อมต่อจากเครื่องเราไปที่ Cloudflare โดยตรงเลย ไม่ต้องเปิดพอร์ตอะไรบน Router คุณเลยแม้แต่น้อย มันจะวิ่งผ่าน HTTP/HTTPS ปกติอะแหละ ไม่ต้องสนเรื่อง Firewall ที่บ้านเลย สบายสุดๆ แล้วก็ปลอดภัยด้วย เพราะทราฟฟิกมันวิ่งผ่าน Cloudflare ก่อน

มาดูวิธีตั้งค่ากันแบบเร็วๆ เลยนะ ไม่ต้องคิดมาก

ก่อนอื่นเลย ต้องติดตั้ง cloudflared CLI tool ก่อน

สำหรับ macOS (ถ้ามี Homebrew):

brew install 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

หรือจะใช้ apt ก็ได้:

sudo mkdir -p --mode=0755 /usr/share/keyrings
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 focal main' | sudo tee /etc/apt/sources.list.d/cloudflared.list
sudo apt update && sudo apt install cloudflared

(ตัวนี้ผมชอบใช้เพราะมันจัดการอัปเดตง่ายดี)

ติดตั้งเสร็จแล้ว ก็ต้อง authenticate กับ Cloudflare Account เราก่อน:

cloudflared tunnel login

มันจะเปิด Browser ให้คุณไปล็อกอินแล้วเลือกโดเมนที่คุณต้องการใช้งาน Tunnel นะ พอเสร็จมันจะสร้างไฟล์ cert.pem ให้ใน .cloudflared directory ของ user คุณ

ต่อมาก็สร้าง Tunnel กันเลย:

cloudflared tunnel create <ชื่อ-tunnel-ของคุณ>

แทนที่ <ชื่อ-tunnel-ของคุณ> ด้วยชื่ออะไรก็ได้ที่คุณอยากจะจำได้ เช่น my-home-server พอสร้างเสร็จมันจะบอก ID ของ Tunnel มาให้ เก็บไว้ดีๆ เลย แล้วก็สร้างไฟล์ config มาให้เราด้วย ปกติชื่อ config.yml หรือถ้าคุณอยากให้มันอยู่ในโฟลเดอร์เดียวกันกับ cert.pem ก็ได้ ลองดู

ทีนี้มาส่วนสำคัญ คือไฟล์ config.yml นี่แหละ. สมมุติว่าคุณมีเว็บที่รันอยู่บน localhost:8000 (เช่น Django หรือ Next.js dev server) แล้วคุณมีโดเมน yourdomain.com ที่ผูกกับ Cloudflare อยู่แล้วนะ เราอยากให้ home.yourdomain.com ชี้มาที่ localhost:8000 ของเรา

สร้างไฟล์ config.yml (หรือจะเอาที่มันสร้างให้ก็ได้) แบบนี้:

tunnel: <ID-tunnel-ของคุณ> # เอา ID ที่ได้จากตอนสร้าง Tunnel มาใส่
credentials-file: /home/youruser/.cloudflared/<ID-tunnel-ของคุณ>.json # อันนี้ระบุ path เต็มๆ นะ สำคัญมาก!

ingress:
  - hostname: home.yourdomain.com
    service: http://localhost:8000
  - service: http_status:404 # ถ้าไม่ตรง hostname ข้างบน ให้ขึ้น 404

ระวังตรง credentials-file! หลายคนพลาดตรงนี้แหละ ชอบลืมระบุ path เต็มๆ หรือไม่ก็เข้าใจผิดว่ามันอยู่ตรงไหน ถ้ามันหาไฟล์ json นี้ไม่เจอ Tunnel จะไม่ยอมรันให้เลยนะ

พอ config พร้อมแล้ว ก็รัน Tunnel เลย:

cloudflared tunnel run <ชื่อ-tunnel-ของคุณ>

มันจะเริ่มเชื่อมต่อแล้ว ถ้าทุกอย่างถูกต้อง คุณควรจะเห็น log ว่ามัน connected to LAX, connected to ORD อะไรแบบนี้ คือมันเชื่อมไปหลายๆ จุดทั่วโลกเพื่อความเสถียร

สิ่งสุดท้ายที่ต้องทำคือการสร้าง DNS record! ไปที่ Cloudflare Dashboard ของโดเมน yourdomain.com นะ แล้วไปที่แท็บ DNS เพิ่ม CNAME record ใหม่: * Type: CNAME * Name: home (อันนี้คือ Subdomain ที่เราใช้ใน config.yml ไง) * Target: <ชื่อ-tunnel-ของคุณ>.cfargotunnel.com * เช่น ถ้าชื่อ tunnel คุณคือ my-home-server ก็ใส่ my-home-server.cfargotunnel.com * Proxy status: ให้เป็น "Proxied" (เมฆสีส้ม)

แค่นี้ก็เรียบร้อยแล้ว ลองเข้า home.yourdomain.com ดูดิ้! จะเห็นเว็บที่คุณรันอยู่บน localhost:8000 แล้ว! โคตรเจ๋งปะล่ะ

ข้อดีที่ผมชอบโคตรๆ เลยนะ: 1. ไม่ต้องเปิดพอร์ต: อันนี้คือ MVP เลย ชีวิตดีขึ้นเยอะ 2. ความปลอดภัย: ทราฟฟิกวิ่งผ่าน Cloudflare ได้ประโยชน์จาก WAF, DDoS Protection ฟรีๆ 3. สะดวก: ตั้งค่าทีเดียวจบ ไม่ต้องยุ่งกับ Router เลย

ข้อสังเกตเล็กๆ น้อยๆ: บางทีตอนรัน cloudflared tunnel run ถ้ามันไม่ขึ้น connected ซักทีนะ ลองเช็ค config.yml ดีๆ โดยเฉพาะ credentials-file path อ่ะ บางทีก็งงเองว่าไฟล์ json มันไปอยู่ไหน (เพราะตอน login มันเอาไปวางไว้ใน .cloudflared ใน home dir ซึ่งเราชอบลืม)

อีกอย่างคือถ้าคุณรันบน Docker นะ จะมีเรื่อง network mode นิดหน่อย แต่หลักการก็คล้ายๆ กัน แค่ต้องแน่ใจว่าคอนเทนเนอร์มันเห็น localhost:8000 ของโฮสต์ได้

ประมาณนี้แหละ ลองเอาไปใช้ดูดิ ชีวิตดีขึ้นเยอะจริงๆ สำหรับคนอยากโชว์ของแต่ไม่อยากวุ่นวายเรื่อง Infra เยอะๆ อ่ะ

Read more

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

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

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

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

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

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

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

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

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

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

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

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

By ทีมงาน devdog