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

คิวบา: มนต์เสน่ห์บนเส้นทางแห่งความท้าทาย – วิกฤตพลังงานและแรงกดดันจากสหรัฐฯ

คิวบา: มนต์เสน่ห์บนเส้นทางแห่งความท้าทาย – วิกฤตพลังงานและแรงกดดันจากสหรัฐฯ

เจาะลึกสถานการณ์ล่าสุดของคิวบา ทั้งวิกฤตไฟฟ้าดับครั้งใหญ่จากปัญหาพลังงาน และแรงกดดันจากสหรัฐฯ ภายใต้การนำของทรัมป์ อนาคตของเกาะปฏิวัติแห่งนี้จะเป็นอย่างไร?

By ทีมงาน devdog
ละครไทย: ถอดรหัสเสน่ห์ "พลอยน้ำเพชร" และปรากฏการณ์บันเทิงที่ไม่เคยจางหาย

ละครไทย: ถอดรหัสเสน่ห์ "พลอยน้ำเพชร" และปรากฏการณ์บันเทิงที่ไม่เคยจางหาย

สำรวจความเข้มข้นของละคร "พลอยน้ำเพชร" จากช่องวัน 31 พร้อมเจาะลึกตอนที่ 17-20 และเสน่ห์ของละครไทยที่ครองใจผู้ชมทั่วโลก

By ทีมงาน devdog
ชนนพัฒฐ์ นาคสั้ว: สส.สงขลา กับประเด็นร้อนคดีเว็บพนันออนไลน์ที่ DSI กำลังจับตา

ชนนพัฒฐ์ นาคสั้ว: สส.สงขลา กับประเด็นร้อนคดีเว็บพนันออนไลน์ที่ DSI กำลังจับตา

เจาะลึกประเด็นร้อน ชนนพัฒฐ์ นาคสั้ว สส.สงขลา พรรคกล้าธรรม กับกระแสข่าวพาดพิงถึงเครือข่ายเว็บพนันออนไลน์ที่ DSI กำลังสอบสวน เปิดความท้าทายต่อบทบาทผู้แทนราษฎร

By ทีมงาน devdog
เจาะลึก "ณัฐธิดา เล็กอุดากร" หลานเนวินชิดชอบ สส. อายุน้อยสุด ผู้พร้อมสร้างอนาคตใหม่ให้บุรีรัมย์

เจาะลึก "ณัฐธิดา เล็กอุดากร" หลานเนวินชิดชอบ สส. อายุน้อยสุด ผู้พร้อมสร้างอนาคตใหม่ให้บุรีรัมย์

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

By ทีมงาน devdog