ตั้งเซิร์ฟเวอร์บ้านๆ ออกเน็ตง่ายๆ ด้วย 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

Google ส่ง Gemini ลง Mac แบบ Native พร้อมตัวช่วย AI สุดล้ำ ยกระดับงานเดสก์ท็อป

Google ส่ง Gemini ลง Mac แบบ Native พร้อมตัวช่วย AI สุดล้ำ ยกระดับงานเดสก์ท็อป

Google เปิดตัว Gemini เวอร์ชัน Native บน Mac พร้อมฟีเจอร์ AI ล้ำสมัย ช่วยเพิ่มประสิทธิภาพการทำงาน ปลดล็อกความคิดสร้างสรรค์ และเชื่อมต่อข้อมูลส่วนตัวได้อย่างชาญฉลาด

By ทีมงาน devdog
เจาะลึก UEFA Champions League: สุดยอดความตื่นเต้นที่แฟนบอลทั่วโลกรอคอย

เจาะลึก UEFA Champions League: สุดยอดความตื่นเต้นที่แฟนบอลทั่วโลกรอคอย

เจาะลึก UEFA Champions League การแข่งขันระดับโลกที่แฟนบอลรอคอย พร้อมติดตามข่าวสารรอบโลกและการถ่ายทอดสดสุดพิเศษ ไม่พลาดทุกความมันส์!

By ทีมงาน devdog
Google อัปเกรด Chrome ครั้งใหญ่ เพิ่มฟีเจอร์ "Skills" ให้ AI จำคำสั่งโปรดของคุณ

Google อัปเกรด Chrome ครั้งใหญ่ เพิ่มฟีเจอร์ "Skills" ให้ AI จำคำสั่งโปรดของคุณ

อัปเกรด Chrome ด้วยฟีเจอร์ Skills ใหม่ ให้ AI จดจำและเรียกใช้คำสั่งโปรดของคุณได้ทันที ไม่ต้องพิมพ์ซ้ำ พร้อมเชื่อมต่อ Gemini ทั่วระบบ

By ทีมงาน devdog
CARTIER Santos-Dumont โฉมใหม่: เมื่อออบซิเดียนผสานตำนานนักบิน สู่ความงามเหนือกาลเวลา

CARTIER Santos-Dumont โฉมใหม่: เมื่อออบซิเดียนผสานตำนานนักบิน สู่ความงามเหนือกาลเวลา

คาร์เทียร์เปิดตัว Santos-Dumont หน้าปัดออบซิเดียน หินภูเขาไฟธรรมชาติผสานดีไซน์นักบินระดับตำนาน สะท้อนงานฝีมือร่วมสมัยและความหรูหรา

By ทีมงาน devdog