ตั้งเซิร์ฟเวอร์บ้านๆ ออกเน็ตง่ายๆ ด้วย Cloudflare Tunnel

Cloudflare Tunnel เนี่ยนะ คือตัวช่วยชีวิตเลยสำหรับคนอยากเปิดบริการอะไรในบ้านออกเน็ต

ปกติเราต้องไปเซ็ต Port Forwarding บนเราเตอร์ใช่มะ? แล้วไหนจะเรื่อง Dynamic DNS อีก ถ้า IP ไม่นิ่ง ผมเคยปวดหัวกับไอ้พวกนี้ประจำ โดยเฉพาะตอนจะทำเดโมให้เพื่อนดู หรือรัน Home Assistant ให้แม่บ้านใช้จากข้างนอก

แต่ Cloudflare Tunnel มันโคตรง่ายอ่ะ! ไม่ต้องยุ่งกับเราเตอร์เลยซักนิดเดียว มันสร้าง Tunnel วิ่งทะลุไฟร์วอลล์ออกไปหา Cloudflare โดยตรงเลย แล้ว Cloudflare ก็จัดการเรื่อง DNS, SSL ให้หมด โคตรคูล!

มันทำงานยังไงนะ?

หลักการมัน simple มาก คือเราจะติดตั้ง cloudflared agent บนเซิร์ฟเวอร์ในบ้านเรา

ไอ้ตัว agent เนี่ย มันจะไปเชื่อมต่อกับ Cloudflare network ผ่าน outbound connection (HTTPS ปกติ) แล้วเมื่อมีคนเข้าเว็บเราผ่าน Cloudflare (ที่ผูกกับ DNS ของเรา) ทราฟฟิกนั้นจะถูกส่งผ่าน Tunnel ที่สร้างขึ้นมานี่แหละ กลับมาที่เซิร์ฟเวอร์ในบ้านเราเลย

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

สมมติผมมี Ubuntu Server อยู่ที่บ้านนะ

1. ติดตั้ง cloudflared

โค้ดนี้สำหรับ Ubuntu/Debian นะฮะ:

curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o /usr/local/bin/cloudflared
chmod +x /usr/local/bin/cloudflared

# ถ้าอยากให้มันเป็น service systemd
sudo cloudflared service install

บางทีถ้าลืม sudo ตอน service install มันจะบ่นๆหน่อยนะ ว่าไม่มีสิทธิ์ ต้องรันใหม่นะฮะ

2. เข้าสู่ระบบ (Authenticate)

เปิด Terminal พิมพ์:

cloudflared tunnel login

มันจะเปิดหน้า Browser ให้เราไป Log In กับ Cloudflare Account ของเรา พอ Login เสร็จ มันจะสร้าง certificate file ไว้ที่ ~/.cloudflared/

3. สร้าง Tunnel ใหม่

ตั้งชื่อ Tunnel ของเรา:

cloudflared tunnel create my-home-server-tunnel

เสร็จแล้วมันจะสร้าง Tunnel ID มาให้เราด้วยนะ หน้าตาประมาณ a1b2c3d4-e5f6-7890-abcd-ef0123456789 จดไว้หน่อยก็ดี หรือมันจะอยู่ใน output อยู่แล้ว

4. ตั้งค่า Config File

เราต้องบอก cloudflared ว่าจะให้ Tunnel นี้เชื่อมต่อไปที่ไหน สร้างไฟล์ config.yml ขึ้นมา เช่น:

# ~/.cloudflared/config.yml หรือจะเก็บไว้ที่อื่นก็ได้นะ แค่ตอนรันต้องบอกพาธถูก
tunnel: a1b2c3d4-e5f6-7890-abcd-ef0123456789 # เปลี่ยนเป็น Tunnel ID ของคุณ
credentials-file: /root/.cloudflared/a1b2c3d4-e5f6-7890-abcd-ef0123456789.json # อันนี้ก็เปลี่ยนตามพาธและชื่อไฟล์ของคุณ

ingress:
  - hostname: myapp.yourdomain.com # เปลี่ยนเป็น Domain ของคุณ
    service: http://localhost:8000 # ชี้ไปที่บริการในบ้านเรา เช่นเว็บที่รันบน port 8000
  - service: http_status:404 # ถ้าไม่ตรงกับ hostname ด้านบน ให้ตอบ 404

Important: พาธของ credentials-file ต้องถูกนะฮะ บางทีลืมเปลี่ยนนี่คือรันไม่ขึ้นเลย

5. สร้าง DNS Record

ไปที่หน้า Cloudflare Dashboard ของ Domain ที่เราจะใช้ (เช่น yourdomain.com) เพิ่ม DNS Record แบบ CNAME: * Type: CNAME * Name: myapp (หรืออะไรก็ได้ที่เรากำหนดใน hostname ด้านบน) * Target: a1b2c3d4-e5f6-7890-abcd-ef0123456789.cfargotunnel.com (เอา Tunnel ID ของเรามาใส่ แล้วต่อด้วย .cfargotunnel.com) * Proxy status: Proxied (เปิดเมฆส้ม)

6. รัน Tunnel!

สุดท้ายก็สั่งให้มันทำงาน:

cloudflared tunnel run my-home-server-tunnel --config ~/.cloudflared/config.yml

ถ้าทุกอย่างถูกต้อง มันจะขึ้นว่า "Tunnel is running" อะไรประมาณนั้น ถ้าจะรันเป็น service ก็ใช้ systemctl start cloudflared ได้เลย

ข้อควรระวังและคิดเห็นส่วนตัว

  • เรื่องความปลอดภัย: เออ มันดีนะ เพราะมันไม่ได้เปิด Port อะไรเลย แต่ก็ต้องมั่นใจว่าปลายทางในบ้านเราปลอดภัยพอ
  • ประสิทธิภาพ: สำหรับใช้งานส่วนตัว หรือพวก PoC นี่คือเหลือๆ แต่ถ้าเป็น Production ที่ทราฟฟิกมหาศาล อาจจะต้องดูเคส by เคสไป
  • ฟรีแค่ไหน?: ถ้าใช้แค่ Tunnel ปกติคือฟรี แต่ถ้ามีฟีเจอร์ Enterprise อันนั้นก็เสียเงินตามปกติ

ผมโคตรชอบ Cloudflare Tunnel เลยนะ บอกเลยว่าชีวิตดีขึ้นเยอะ ไม่ต้องมานั่งงมกับ Router ตั้ง Port Forwarding ให้เสียเวลา เหมาะกับพวกชอบลองของ หรือรันอะไรนิดๆ หน่อยๆ ที่บ้านสุดๆ

ลองใช้ดูนะ ไม่ผิดหวังหรอก!

Read more

PSG vs Monaco: ศึก 100 นัดเดือด ลีกเอิง และบทเรียนที่ปาร์ค เดส์ แพร็งซ์

PSG vs Monaco: ศึก 100 นัดเดือด ลีกเอิง และบทเรียนที่ปาร์ค เดส์ แพร็งซ์

สรุปผลและวิเคราะห์เกมเดือด PSG พบ Monaco ในลีกเอิงนัดที่ 25 ซึ่งเป็นการพบกันครั้งที่ 100 ในประวัติศาสตร์ลีก ความพ่ายแพ้ 1-3 คาบ้านของ PSG และบทบาทของ Akliouche พร้อมผลกระทบต่อเส้นทางแชมเปี้ยนส์ลีก

By ทีมงาน devdog
บาเยิร์นผงาดไร้เคน! ถล่มกลัดบัค 4-1 โชว์ความลึกของทีมก่อนลุยศึก UCL

บาเยิร์นผงาดไร้เคน! ถล่มกลัดบัค 4-1 โชว์ความลึกของทีมก่อนลุยศึก UCL

บาเยิร์น มิวนิค โชว์ฟอร์มแกร่ง แม้ไม่มีแฮร์รี่ เคน ถล่ม โบรุสเซีย มึนเชนกลัดบัค 4-1 ก่อนเตรียมลุยศึกแชมเปียนส์ลีกกับอตาลันต้า!

By ทีมงาน devdog
PSG: มหาอำนาจลูกหนังฝรั่งเศส กับศึกดวลเดือดโมนาโก และเป้าหมายสู่บัลลังก์ยุโรป

PSG: มหาอำนาจลูกหนังฝรั่งเศส กับศึกดวลเดือดโมนาโก และเป้าหมายสู่บัลลังก์ยุโรป

เจาะลึกเส้นทาง PSG สู่มหาอำนาจลูกหนัง วิเคราะห์สถานการณ์ลีกเอิง เตรียมพร้อมศึกใหญ่กับโมนาโก พร้อมความมุ่งมั่นสู่แชมป์ยุโรป

By ทีมงาน devdog
ลาลีกา: มนต์เสน่ห์ฟุตบอลสเปน, นวัตกรรมเรโทร, และบิ๊กแมตช์แห่งอนาคต

ลาลีกา: มนต์เสน่ห์ฟุตบอลสเปน, นวัตกรรมเรโทร, และบิ๊กแมตช์แห่งอนาคต

สำรวจลาลีกา ฟุตบอลสเปนอันทรงเสน่ห์ พร้อมไฮไลต์บิ๊กแมตช์ 2025/26 นวัตกรรมสัปดาห์เรโทร และบทบาทต่อวัฒนธรรมและเศรษฐกิจ.

By ทีมงาน devdog