คู่มือการใช้งาน Cloudflare Tunnel เพื่อเปิดเผยบริการท้องถิ่นบน ServBay อย่างปลอดภัย
Cloudflare Tunnel (ชื่อเดิม Argo Tunnel) คือบริการเครือข่าย Zero Trust จาก Cloudflare ที่ช่วยให้คุณสามารถเปิดเผยเว็บเซอร์วิส, SSH หรือแอปพลิเคชันที่รันในเครื่องท้องถิ่นของคุณสู่โลกอินเทอร์เน็ตได้อย่างปลอดภัย โดยไม่ต้องเปิดพอร์ตบนเครือข่ายหรือจัดการไฟร์วอลล์ที่ซับซ้อน คู่มือนี้จะอธิบายวิธีเชื่อมต่อเครื่องมือ cloudflared
กับ ServBay ซึ่งเป็นสภาพแวดล้อมพัฒนาเว็บแบบรวมศูนย์ที่ทรงพลัง เพื่อสร้างช่องทางปลอดภัยในการเข้าถึงบริการ ServBay จากอินเทอร์เน็ต
ข้อดีหลักของโซลูชันนี้:
- ปลอดภัยยิ่งขึ้น: ใช้ประโยชน์จากระบบรักษาความปลอดภัยระดับโลกของ Cloudflare เช่น การป้องกัน DDoS, WAF (Web Application Firewall) ฯลฯ
- ตั้งค่าเครือข่ายง่าย: ไม่ต้องยุ่งยากกับการส่งต่อพอร์ต, NAT หรือกฎไฟร์วอลล์ใดๆ
- โมเดล Zero Trust: การเชื่อมต่อเป็นแบบ outbound เท่านั้น ลดพื้นที่เสี่ยงต่อการโจมตี
- ผสานกับฟีเจอร์ Cloudflare: ใช้ประโยชน์จากแคช, การเร่งความเร็ว, เครื่องมือวิเคราะห์ และอื่นๆ ของ Cloudflare
ภาพรวม
ServBay เป็นเครื่องมือสำหรับนักพัฒนาที่รวมสภาพแวดล้อมพัฒนาท้องถิ่นไว้ครบครัน ทั้งรองรับหลายภาษา (PHP, Node.js, Python, Go, Java, Ruby, Rust ฯลฯ), ฐานข้อมูล (MySQL, PostgreSQL, MongoDB, Redis ฯลฯ) และเว็บเซิร์ฟเวอร์ (Caddy, Nginx, Apache) โดยปกติแล้ว เว็บไซต์หรือแอปที่คุณพัฒนาบน ServBay จะเข้าถึงได้เฉพาะจากเครื่องของคุณ การผสาน Cloudflare Tunnel จะเปิดทางให้คุณแชร์ความคืบหน้ากับทีม หรือเปิดเผยบริการท้องถิ่นกับผู้ใช้ภายนอกคราวเดียวหรือระยะยาวได้ พร้อมรับประกันเรื่องความปลอดภัยและประสิทธิภาพจาก Cloudflare
หลักการทำงานเชิงเทคนิค
แกนกลางของ Cloudflare Tunnel คือเครื่องมือลูกข่าย cloudflared
ซึ่งเมื่อรันบนเครื่องพัฒนา (ที่ใช้ ServBay) จะสร้างการเชื่อมต่อแบบเข้ารหัส (ใช้โปรโตคอล QUIC) ไปยัง Cloudflare Edge Node ที่ใกล้ที่สุด การเชื่อมต่อเหล่านี้เป็นแบบ outbound ไม่ต้องเปิด inbound rule ใดๆ ที่เราเตอร์หรือไฟร์วอลล์ เมื่อผู้ใช้เข้าถึงบริการผ่านโดเมนที่ผูกกับ Tunnel ทราฟฟิกจะไปถึงระบบของ Cloudflare ก่อน แล้วส่งต่อผ่าน tunnel มายัง cloudflared
ที่เครื่องคุณ แล้วส่งคำขอไปยังบริการของ ServBay (เช่น https://servbay.local
หรือ http://localhost:8000
) ส่วนการตอบกลับก็ย้อนรอยเส้นทางเดิม
การเตรียมสภาพแวดล้อม
ก่อนเริ่มตั้งค่า กรุณาตรวจสอบให้แน่ใจว่าเงื่อนไขต่อไปนี้ครบถ้วน:
- ติดตั้งและใช้งาน ServBay ได้ปกติ: สภาพแวดล้อม ServBay พร้อม เว็บไซต์หรือบริการที่คุณต้องการแชร์รันอยู่ (เช่น เปิด
servbay.local
แล้วใช้งานได้) - มีบัญชี Cloudflare: คุณต้องสมัครใช้งานบัญชี Cloudflare
- มีโดเมนที่ดูแลใน Cloudflare: ตั้งโดเมนของคุณไว้ใน Cloudflare ให้ DNS ชี้ผ่าน Cloudflare
- ติดตั้ง
cloudflared
: บนเครื่อง macOS ที่ใช้ ServBay คุณต้องติดตั้งเครื่องมือบรรทัดคำสั่งcloudflared
1. ติดตั้ง cloudflared
สำหรับ macOS แนะนำให้ติดตั้งผ่าน Homebrew หากยังไม่มี Homebrew กรุณาติดตั้งจากคู่มืออย่างเป็นทางการก่อน
ติดตั้งด้วย Homebrew (แนะนำ):
bash
brew update
brew install cloudflared
1
2
2
ดาวน์โหลดและติดตั้งด้วยมือ (สำหรับ macOS ARM Architecture):
bash
# ดาวน์โหลดเวอร์ชัน macOS ARM (Apple Silicon)
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-darwin-arm64.tgz | tar xz
# ย้ายไบนารีไปไว้ใน PATH
sudo mv cloudflared /usr/local/bin/
1
2
3
4
2
3
4
ตรวจสอบการติดตั้ง: หลังติดตั้ง เสียบบรรทัดต่อไปนี้เพื่อตรวจสอบว่า cloudflared
พร้อมใช้งานหรือไม่:
bash
cloudflared --version
# ตัวอย่างผลลัพธ์: cloudflared version 2024.5.0 (built 2024-05-01)
1
2
2
หมายเลขเวอร์ชันอาจต่างออกไป ขอแค่แสดงเวอร์ชันได้ก็ถือว่าติดตั้งสำเร็จ
2. ล็อกอินบัญชี Cloudflare
รันจากเทอร์มินัลเพื่อผูกกับบัญชี Cloudflare:
bash
cloudflared tunnel login
1
เมื่อรันคำสั่งนี้ cloudflared
จะเปิดเว็บเบราว์เซอร์ของคุณไปหน้า login ของ Cloudflare ให้เลือกบัญชีที่เป็นเจ้าของโดเมนและให้สิทธิ์เข้าถึงกับ cloudflared
หากสำเร็จ เบราว์เซอร์จะแจ้งเตือนและในเทอร์มินัลจะสร้างไฟล์ cert.pem
ไว้ที่ ~/.cloudflared/
การตั้งค่า Tunnel จริง
ต่อไปนี้คือขั้นตอนสร้าง Tunnel ใหม่ผูกกับบริการที่รันอยู่บน ServBay
ขั้นตอนการตั้งค่าหลัก
สร้าง Tunnel
รันคำสั่งต่อไปเพื่อตั้งชื่อ Tunnel ใหม่ เช่น
servbay-demo-tunnel
bashcloudflared tunnel create servbay-demo-tunnel
1หลังรันสำเร็จจะแสดง Tunnel ID (UUID) และเส้นทางไปยัง
credentials-file
กรุณาเก็บ Tunnel ID นี้ไว้ เช่นa7b8c9d0-e1f2-3a4b-5c6d-7e8f9a0b1c2d
ไฟล์ credentials จะอยู่ที่~/.cloudflared/
เช่นa7b8c9d0-e1f2-3a4b-5c6d-7e8f9a0b1c2d.json
กรุณาดูแลไฟล์นี้อย่างดีตั้งค่า DNS Record
เพื่อให้ Cloudflare ทราบว่าต้องส่งทราฟฟิกโดเมนไหนมายัง Tunnel ของคุณ ต้องสร้าง CNAME ใน Cloudflare DNS ใช้คำสั่ง:
bashcloudflared tunnel route dns servbay-demo-tunnel servbay-demo.yourdomain.com
1เปลี่ยน
servbay-demo-tunnel
เป็นชื่อ Tunnel ของคุณ และservbay-demo.yourdomain.com
เป็นซับโดเมนที่ต้องการให้ผู้ใช้งานเข้าถึง โปรดแน่ใจว่าyourdomain.com
เป็นโดเมนที่โฮสต์กับ Cloudflareคำสั่งนี้จะเพิ่ม CNAME ให้
servbay-demo.yourdomain.com
ชี้ไปยัง<TunnelID>.cfargotunnel.com
ให้โดยอัตโนมัติสร้างไฟล์ตั้งค่า
cloudflared
ใช้ไฟล์ YAML สำหรับกำหนดค่าดำเนินการ เช่น บริการท้องถิ่นจะแชร์อะไรและผ่านโดเมนไหน ไฟล์ config ปกติจะอยู่ที่~/.cloudflared/config.yml
หากยังไม่มีไฟล์นี้ให้สร้างขึ้นตัวอย่างไฟล์
~/.cloudflared/config.yml
:yaml# tunnel: UUID ของ Tunnel ให้เปลี่ยนเป็นค่าจริงที่คุณสร้าง tunnel: a7b8c9d0-e1f2-3a4b-5c6d-7e8f9a0b1c2d # credentials-file: Path ไปยัง credentials ตามชื่อ UUID credentials-file: /Users/yourusername/.cloudflared/a7b8c9d0-e1f2-3a4b-5c6d-7e8f9a0b1c2d.json # เปลี่ยน yourusername และชื่อไฟล์ ingress: # กติการับ Request ที่เข้ามา Tunnel - hostname: servbay-demo.yourdomain.com # โดเมนสำหรับรับเข้าภายนอก ต้องตรงกับ DNS ที่ตั้งไว้ service: https://servbay.local # บริการที่รันบน ServBay ปกติ servbay.local ตั้งค่า SSL ไว้ originRequest: # noTLSVerify: true # หากเว็บของคุณใช้ SSL แบบ self-signed (เช่น CA ของ ServBay) อาจต้องเปิดตัวนี้เพื่อข้ามการตรวจสอบ TLS # หากเว็บไซต์ ServBay มีใบรับรองที่น่าเชื่อถือ (ขอจาก Let's Encrypt ฯลฯ) ไม่จำเป็นต้องเปิดใช้งานนี้ - service: http_status:404 # Default: ถ้าไม่ตรง hostnameไหนเลย ตอบ 404
1
2
3
4
5
6
7
8
9
10
11
12
13ข้อควรระวัง:
- เปลี่ยนค่า
tunnel
และcredentials-file
เป็น UUID และ path ของคุณเอง - เปลี่ยน
hostname
ให้ตรงกับโดเมนที่ตั้ง DNS ในขั้นตอนที่ 2 service: https://servbay.local
คือเว็บเพื่อแชร์ (ServBay ตั้ง SSL cert จาก User CA ให้แล้ว) หากรัน web app อย่างอื่น port อื่น เช่น Node.js ที่http://localhost:3000
ให้เปลี่ยนค่า service ด้วย- ตัวเลือก
originRequest.noTLSVerify: true
ใช้ข้ามการเช็คใบรับรอง SSL ของเซอร์วิสท้องถิ่น เหมาะสำหรับใบรับรอง self-signed (เช่น CA ของ ServBay) กรณีใช้ใบรับรองที่เป็นทางการแล้ว ไม่ต้องเปิด toggle ตัวนี้
- เปลี่ยนค่า
เปิดใช้งาน Tunnel
เมื่อเซฟไฟล์ config เสร็จแล้วให้เปิดใช้งาน Tunnel ด้วยคำสั่ง:
bash
cloudflared tunnel run servbay-demo-tunnel
1
เปลี่ยน servbay-demo-tunnel
ให้ตรงกับชื่อ Tunnel ที่คุณสร้าง
cloudflared
จะเชื่อมต่อ Cloudflare และเปิด Tunnel รอรับการเชื่อมต่อ ข้อมูลสถานะจะแสดงบนเทอร์มินัล ตราบที่คำสั่งนี้ยังรันอยู่ Tunnel จะเปิดตลอด หากต้องการให้รันเบื้องหลัง ต้องตั้งเป็น system service (เช่น launchctl
บน macOS ซึ่งไม่อยู่ในขอบเขตคู่มือฉบับนี้)
การตรวจสอบบริการ
เมื่อ Tunnel เปิดใช้งานแล้ว คุณสามารถทดสอบเข้าถึงบริการ ServBay จากภายนอกได้ตามโดเมนที่ตั้งไว้
- เข้าถึงโดเมน: เปิดเบราว์เซอร์แล้วเข้าชมโดเมนที่ตั้งค่าไว้ เช่น
https://servbay-demo.yourdomain.com
- ตรวจสอบสิ่งต่อไปนี้:
- เว็บควรแสดงผลเหมือนตอนเข้า
https://servbay.local
ตอนทดสอบบนเครื่อง - ตรวจเช็ค address bar ว่าใบรับรอง SSL เป็นของ Cloudflare (ไม่ใช่ของ ServBay ในเครื่อง) ใบรับรองนี้ใช้สำหรับการเชื่อมต่อภายนอก
- ใช้ Developer Tool เช็ค HTTP Header จะเห็นหัวข้อเช่น
CF-RAY
ฯลฯ ระบุว่า traffic ผ่าน Cloudflare แล้วจริง
- เว็บควรแสดงผลเหมือนตอนเข้า
เคล็ดลับการตั้งค่าขั้นสูง
Routing ไปยังหลายบริการ
ในส่วน ingress
ของ config.yml
คุณสามารถกำหนดลงในแต่ละ hostname
เพื่อ route ไปบริการหลายตัวในเครื่องเดียวได้ (เช่น เว็บไซต์หลัก, API ฯลฯ)
yaml
ingress:
- hostname: api.yourdomain.com
service: http://localhost:8080 # สมมุติ API รันที่พอร์ตนี้
- hostname: app.yourdomain.com
service: https://servbay.local # เว็บไซต์หลัก
- service: http_status:404
1
2
3
4
5
6
2
3
4
5
6
การมอนิเตอร์และดู Log
cloudflared
มีคำสั่งช่วยติดตามดูสถานะ:
- ดูสถิติเรียลไทม์:bash
cloudflared tunnel info servbay-demo-tunnel
1 - ดูบันทึก log:
cloudflared tunnel run
จะแสดง log ในเทอร์มินัล หรือกำหนด log level/output ตามต้องการได้
ผสานการพิสูจน์ตัวตนด้วย Cloudflare Access
เพื่อความปลอดภัยมากขึ้น คุณสามารถนำ Cloudflare Access (ส่วนหนึ่งของ Zero Trust) มาเสริม auth+authz ให้กับบริการที่เปิดเผยผ่าน Tunnel ได้ ช่วยควบคุมการเข้าถึงแบบละเอียดกว่าการใช้ VPN ทั่วไป (วิธีตั้งค่าทำได้ผ่าน Cloudflare Dashboard)
การแก้ไขปัญหาเบื้องต้น
หากเกิดปัญหาใดๆ ให้ตรวจสอบตามตารางดังนี้
อาการ | แนวทางแก้ไข |
---|---|
ขึ้น 502 Bad Gateway | ตรวจดูว่า ServBay รันอยู่และเข้าถึงได้ในเครื่อง (https://servbay.local หรือ local address อื่นที่ตั้งไว้)เช็ค config.yml ว่า service address/port ถูกต้อง ถ้าใช้ HTTPS แต่ noTLSVerify ไม่ได้เปิด ให้เช็คใบรับรองหรือเปิดตัวเลือกนี้ |
DNS resolve ไม่ได้ | ตรวจดูว่า CNAME Record ใน Cloudflare DNS ถูกต้อง ชี้ไป <TunnelID>.cfargotunnel.com หรือยัง ทดสอบได้ด้วย dig หรือ nslookup |
แจ้งเตือน SSL certificate error | หากเป็น SSL ของ Cloudflare ให้ตรวจ hostname ใน config ว่าตรงกับโดเมนหรือไม่ ถ้าเป็น TLS ระหว่าง cloudflared กับเซอร์วิสในเครื่อง ให้เช็คที่อยู่ service หรือเปิด originRequest.noTLSVerify: true ตามความเหมาะสม |
คำสั่ง cloudflared tunnel run ผิดพลาด | ตรวจสอบว่าไฟล์ ~/.cloudflared/config.yml มีอยู่และเป็นรูปแบบ YAML ที่ถูกต้องตรวจสอบ tunnel UUID กับ path ไปยัง credentials ว่าตรงกัน เช็คสิทธิ์เข้าถึงไฟล์ของ cloudflared |
ทราฟฟิกช้า/ต่อไม่ติด | ตรวจสอบเครือข่ายภายในบ้านหรือออฟฟิศ Tunnel ใช้โปรโตคอล QUIC ตรวจสอบว่า network support หรือไม่ ทดสอบ/เปลี่ยน Data Center ของ Cloudflare หรือสอบถามฝ่ายซัพพอร์ต |
สรุปข้อดีของโซลูชันนี้
การเชื่อมต่อ ServBay กับ Cloudflare Tunnel ทำให้นักพัฒนาสามารถ:
- แชร์โครงการท้องถิ่นอย่างปลอดภัย: นำเสนอผลงานให้ลูกค้าหรือทีมดูได้ทันที
- ทดสอบ callback/external service: สำหรับระบบที่ต้องให้ภายนอกเรียกเข้ามา (webhook ฯลฯ)
- รับการป้องกันระดับองค์กรมาตรฐานโลก: ป้องกัน DDoS, ฟีเจอร์ WAF และอื่นๆ
- ไม่ต้องยุ่งกับ NAT/Firewall: หมดปัญหาการตั้งค่าพอร์ตและไฟร์วอลล์ที่ซับซ้อน
- ใช้เครือข่าย Cloudflare ได้เต็มประสิทธิภาพ: เร่งความเร็วและเสถียรผ่านโครงข่าย Anycast
ServBay คือสภาพแวดล้อมพัฒนาอันทรงพลัง เมื่อจับคู่กับการเปิดเผยอย่างปลอดภัยจาก Cloudflare Tunnel จึงให้เวิร์กโฟลว์ที่ทั้งมีประสิทธิภาพและปลอดภัยสูงสุดสำหรับนักพัฒนา
บทสรุป
บทความนี้แนะนำทั้งวิธีติดตั้งและตั้งค่า cloudflared
ใน ServBay ไปจนถึงสร้าง/รัน Cloudflare Tunnel เพื่อเปิดเผยเว็บหรือแอปในเครื่องสู่โลกภายนอกอย่างปลอดภัย คุณจะได้ใช้ประโยชน์สูงสุดจากการรองรับหลายเทคโนโลยีของ ServBay พร้อมรับความปลอดภัยจาก Cloudflare Tunnel เต็มรูปแบบ ขอแนะนำให้คุณสำรวจ Cloudflare Access หรือฟีเจอร์อื่นใน Zero Trust สำหรับเสริมความสามารถควบคุมสิทธิ์และความปลอดภัยเพิ่มอีกขั้น