Cloudflare · Security · VPS Guide
คู่มือ Cloudflare Tunnel 2026: สร้าง Secure Tunnel บน VPS ฟรี ไม่ต้องเปิด Port
สารบัญ
Cloudflare Tunnel คืออะไร
Cloudflare Tunnel (เดิมชื่อ Argo Tunnel) คือบริการของ Cloudflare ที่ช่วยให้คุณเปิดเผย services บน server ของคุณ — ไม่ว่าจะเป็นเว็บแอป, SSH server, หรือ Remote Desktop — ผ่าน Cloudflare Network โดยไม่ต้องกำหนดค่าไฟร์วอลล์ขาเข้าหรือมี Public IP address
หัวใจของระบบคือ daemon ชื่อ cloudflared ที่รันบน server ของคุณ มันสร้าง outbound connection ออกไปหา Cloudflare data centers เอง แล้ว Cloudflare ก็ใช้ connection นั้นในการ proxy traffic เข้ามาหา service ของคุณ ผลลัพธ์คือ traffic สองทิศทางผ่าน connection ขาออกเพียงเส้นเดียว
เทคโนโลยีนี้เหมาะมากสำหรับ:
- นักพัฒนาที่ต้องการ expose local development server
- ผู้ดูแลระบบที่ต้องการเข้าถึง SSH โดยไม่เปิด port 22
- องค์กรที่ต้องการ Zero Trust Network Access (ZTNA)
- บ้านหรือออฟฟิศที่ใช้ NAT/CGNAT และไม่มี Static IP
- VPS ที่ต้องการซ่อน origin IP จาก DDoS
Cloudflare Tunnel เป็นส่วนหนึ่งของ Cloudflare Zero Trust (เดิมชื่อ Cloudflare for Teams) และใช้งานฟรีได้สำหรับกรณีใช้งานพื้นฐาน — ข้อมูล ณ กันยายน 2026 ตรวจสอบล่าสุดที่ cloudflare.com
ทำงานอย่างไร
หลักการทำงานของ Cloudflare Tunnel แบ่งเป็น 3 ส่วน:
1. cloudflared daemon
daemon ชื่อ cloudflared ที่คุณติดตั้งบน server สร้าง outbound-only connections ไปยัง Cloudflare global network (ใช้ Cloudflare Anycast — ชี้ไปยัง data center ที่ใกล้ที่สุดอัตโนมัติ) connection เหล่านี้เป็น encrypted และไม่ต้องการ inbound firewall rule ใดๆ
2. Tunnel UUID
แต่ละ Tunnel มี UUID เฉพาะตัว ทำหน้าที่เป็น logical link ระหว่าง origin server กับ Cloudflare สามารถรัน cloudflared หลาย process (connectors) ในหนึ่ง tunnel เดียวเพื่อ high availability ได้
3. Traffic routing
เมื่อมี request เข้ามาที่โดเมนของคุณ (เช่น app.example.com) Cloudflare รับ request นั้น แล้ว route ผ่าน tunnel ไปยัง cloudflared daemon บน server คุณ จากนั้น cloudflared ส่ง request ต่อไปยัง service ที่คุณกำหนด (เช่น localhost:3000) และส่ง response กลับมาในทางเดิม
ข้อดีหลักของ Cloudflare Tunnel
| ข้อดี | รายละเอียด |
|---|---|
| ไม่ต้องเปิด inbound port | ลด attack surface ไฟร์วอลล์ทุก inbound port ปิดได้หมด |
| ไม่ต้องมี Public IP | ทำงานได้แม้อยู่หลัง NAT, CGNAT, หรือ ISP ที่ไม่ให้ Static IP |
| ซ่อน Origin IP | ผู้โจมตีไม่รู้ IP จริงของ server DDoS protection โดยอัตโนมัติ |
| TLS อัตโนมัติ | Cloudflare จัดการ SSL/TLS certificate ให้ ไม่ต้อง certbot |
| ฟรีสำหรับพื้นฐาน | HTTP tunnel สำหรับ Cloudflare Free plan ใช้ได้ไม่มีค่าใช้จ่าย |
| Anycast global | Cloudflare มีกว่า 300 data centers ทั่วโลก latency ต่ำ |
| Zero Trust รองรับ | เพิ่ม Access Policy บังคับ authentication ก่อนเข้า service ได้ |
ข้อกำหนดเบื้องต้น
ก่อนเริ่มต้น คุณต้องมีสิ่งเหล่านี้ครบ:
- Cloudflare account (สมัครฟรีที่ cloudflare.com)
- โดเมนที่เพิ่มแล้วใน Cloudflare และเปลี่ยน Nameserver มาที่ Cloudflare แล้ว
- Server หรือ VPS ที่รัน Linux (Ubuntu 20.04+ / Debian 10+ แนะนำ) หรือ macOS/Windows
- สิทธิ์ sudo หรือ root บน server
- Service ที่ต้องการ expose (เช่น Nginx/Apache ที่รันบน port 80 หรือ 8080)
ติดตั้ง cloudflared บน Linux (Ubuntu/Debian)
Cloudflare จัดทำ package repository อย่างเป็นทางการ ติดตั้งผ่านคำสั่งดังนี้:
วิธีที่ 1: ผ่าน apt repository (แนะนำ)
# เพิ่ม Cloudflare GPG key
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg > /dev/null
# เพิ่ม repository
echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflared.list
# อัปเดตและติดตั้ง
sudo apt update && sudo apt install cloudflared -y
# ตรวจสอบเวอร์ชัน
cloudflared --version
วิธีที่ 2: ดาวน์โหลด binary โดยตรง
# สำหรับ Linux x86_64
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb
สำหรับ RHEL/CentOS
sudo yum install cloudflared
สร้าง Tunnel ทีละขั้น
ขั้นที่ 1: Login เข้า Cloudflare
cloudflared tunnel login
คำสั่งนี้จะเปิด browser ให้คุณ login Cloudflare account และเลือกโดเมนที่ต้องการใช้งาน เมื่อเสร็จแล้ว cloudflared จะบันทึก credentials ไว้ที่ ~/.cloudflared/cert.pem
ขั้นที่ 2: สร้าง Tunnel ใหม่
cloudflared tunnel create my-tunnel
แทน my-tunnel ด้วยชื่อที่คุณต้องการ หลังรันคำสั่ง จะได้ output แสดง Tunnel UUID เช่น xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx และ path ของ credentials file จดหรือคัดลอก UUID ไว้
ขั้นที่ 3: Route DNS
cloudflared tunnel route dns my-tunnel app.example.com
คำสั่งนี้สร้าง CNAME record ใน Cloudflare DNS อัตโนมัติ ชี้ app.example.com ไปยัง tunnel endpoint โดยที่ Cloudflare proxy เปิดอยู่ (orange cloud)
ขั้นที่ 4: สร้างไฟล์ config
mkdir -p ~/.cloudflared
nano ~/.cloudflared/config.yml
ขั้นที่ 5: รัน Tunnel
cloudflared tunnel run my-tunnel
ตั้งค่าไฟล์ config.yml
ไฟล์ ~/.cloudflared/config.yml กำหนดว่า cloudflared จะ route traffic ไปที่ไหน
สำหรับเว็บแอปทั่วไป (HTTP)
tunnel: <YOUR-TUNNEL-UUID>
credentials-file: /root/.cloudflared/<YOUR-TUNNEL-UUID>.json
ingress:
- hostname: app.example.com
service: http://localhost:3000
- service: http_status:404
สำหรับหลาย service
tunnel: <YOUR-TUNNEL-UUID>
credentials-file: /root/.cloudflared/<YOUR-TUNNEL-UUID>.json
ingress:
- hostname: app.example.com
service: http://localhost:3000
- hostname: api.example.com
service: http://localhost:8080
- hostname: dashboard.example.com
service: http://localhost:8443
originRequest:
noTLSVerify: true
- service: http_status:404
รันเป็น systemd service (เริ่มอัตโนมัติเมื่อ boot)
# ติดตั้ง systemd service
sudo cloudflared service install
# เริ่ม service
sudo systemctl start cloudflared
sudo systemctl enable cloudflared
# ตรวจสอบสถานะ
sudo systemctl status cloudflared
Use Cases ที่พบบ่อย
1. Expose เว็บแอป / API
กรณีที่ง่ายที่สุด รัน web server (Nginx, Apache, Node.js, Python Flask ฯลฯ) บน localhost แล้วให้ cloudflared expose ออกผ่านโดเมน
# ตัวอย่าง: Node.js รันบน port 3000
ingress:
- hostname: myapp.example.com
service: http://localhost:3000
- service: http_status:404
2. SSH ผ่าน Browser (ไม่ต้องเปิด port 22)
Cloudflare Tunnel รองรับ SSH access ผ่าน browser โดยใช้ Cloudflare Access ร่วมกัน ไม่ต้องเปิด port 22 สู่ Internet เลย
# config สำหรับ SSH tunnel
ingress:
- hostname: ssh.example.com
service: ssh://localhost:22
- service: http_status:404
ผู้ใช้สามารถ SSH ได้ผ่าน cloudflared access ssh --hostname ssh.example.com หลัง authenticate ผ่าน Cloudflare Access
3. Remote Desktop (RDP)
ingress:
- hostname: rdp.example.com
service: rdp://localhost:3389
- service: http_status:404
4. Private Network (Zero Trust)
สำหรับองค์กรที่ต้องการ ZTNA ตั้งค่า warp-routing เพื่อให้ Cloudflare WARP client เข้าถึง private network ได้
tunnel: <UUID>
credentials-file: /root/.cloudflared/<UUID>.json
warp-routing:
enabled: true
5. Expose localhost สำหรับ Development
นักพัฒนาที่ต้องการทดสอบ webhook หรือให้ client เห็น local dev server สามารถใช้ cloudflared tunnel --url http://localhost:3000 เพื่อสร้าง temporary public URL ได้ทันที (ไม่ต้องตั้ง config)
cloudflared tunnel --url http://localhost:3000
Cloudflare Tunnel vs. VPN ทั่วไป
| คุณสมบัติ | Cloudflare Tunnel | VPN (WireGuard/OpenVPN) |
|---|---|---|
| Public IP จำเป็น | ไม่จำเป็น | จำเป็น (หรือ DDNS) |
| เปิด Inbound Port | ไม่ต้อง | ต้อง (UDP 51820/TCP 1194) |
| SSL/TLS | จัดการอัตโนมัติ | ต้องตั้งค่าเอง |
| ค่าใช้จ่าย | ฟรี (พื้นฐาน) | ค่า VPS/server |
| DDoS protection | ใช่ (Cloudflare) | ขึ้นอยู่กับ provider |
| Zero Trust / Access | รองรับ built-in | ต้องเพิ่ม layer อื่น |
| Latency | ต่ำ (Anycast) | ขึ้นอยู่กับ server location |
| ความซับซ้อน | ต่ำ (ไม่กี่คำสั่ง) | สูงกว่า (config มาก) |
| Route ทั้ง network | ได้ (warp-routing) | ได้ (split tunnel) |
โดยสรุป Cloudflare Tunnel เหมาะกว่าสำหรับ expose specific services สู่ Internet อย่างปลอดภัย ส่วน VPN เหมาะกว่าสำหรับ full network access ระหว่าง clients
ข้อจำกัดที่ควรรู้
- ต้องมีโดเมนบน Cloudflare — ไม่สามารถใช้กับโดเมนที่ไม่ได้ใช้ Cloudflare DNS
- Cloudflare มองเห็น traffic — เหมาะสำหรับ public services ไม่เหมาะกับ highly sensitive data ที่ไม่ต้องการ third-party เห็น
- WebSocket รองรับแต่ต้องตั้งค่าเพิ่ม
- UDP protocols (เช่น gaming, QUIC) ไม่รองรับใน HTTP tunnel ปกติ ต้องใช้ WARP routing
- Free plan bandwidth — Cloudflare ไม่ระบุ cap ชัดเจน แต่ใช้ fair use policy ตรวจสอบ ToS ล่าสุดที่ cloudflare.com
- cloudflared ต้องรันตลอดเวลา — ถ้า process ตาย tunnel ก็หยุด แนะนำใช้ systemd
บทสรุป
Cloudflare Tunnel เป็นเครื่องมือที่ทรงพลังและฟรีสำหรับการ expose services บน VPS หรือ home server อย่างปลอดภัย ด้วยการตั้งค่าไม่กี่คำสั่ง คุณได้ทั้ง SSL อัตโนมัติ, DDoS protection, และไม่ต้องเปิด firewall ใดๆ เหมาะมากสำหรับนักพัฒนา, sysadmin, และผู้ที่ใช้ home server
FAQ — คำถามที่พบบ่อย
Cloudflare Tunnel ใช้ฟรีได้ไหม?
ใช้ฟรีได้สำหรับการใช้งานพื้นฐาน เพียงมี Cloudflare account (Free plan) และโดเมนที่ใช้ Cloudflare Nameserver — ข้อมูล ณ กันยายน 2026 ตรวจสอบล่าสุดที่ cloudflare.com
ต่างจาก VPN ทั่วไปอย่างไร?
Cloudflare Tunnel ใช้ outbound-only connection ไม่ต้องเปิด inbound port บนไฟร์วอลล์ ไม่ต้องมี Public IP ต่างจาก VPN ที่ต้องการทั้งสองอย่าง
ต้องมี Public IP ไหม?
ไม่จำเป็น cloudflared daemon เชื่อมต่อออกไปหา Cloudflare Network เอง เหมาะกับ server หลัง NAT หรือ CGNAT
รองรับ protocol อะไรบ้าง?
รองรับ HTTP/HTTPS (เว็บแอป), SSH, RDP (Remote Desktop), และ TCP protocols อื่นๆ ตาม Cloudflare documentation
ติดตั้งบน Linux distro ใดได้บ้าง?
รองรับ Ubuntu, Debian, RHEL/CentOS, Arch Linux และอื่นๆ รวมถึง macOS (Homebrew) และ Windows
ถ้า cloudflared crash แล้ว tunnel จะเป็นอย่างไร?
tunnel จะหยุดทำงาน แนะนำให้ติดตั้งเป็น systemd service และตั้ง Restart=always เพื่อให้ restart อัตโนมัติ
ใช้กับ AsiaGB Hosting ได้ไหม?
ได้ ถ้าโดเมนของคุณใช้ Cloudflare Nameserver สามารถ run cloudflared บน VPS หรือ server ที่ใดก็ได้ รวมถึง hosting ที่รองรับ SSH
บทความแนะนำเพิ่มเติม
ต้องการโฮสติ้งไทยที่เชื่อถือได้?
ทีมรีวิว CloudPicked แนะนำ AsiaGB.com — โฮสติ้งไทยที่ support 24 ชม. พร้อม DirectAdmin ราคาประหยัด
ดู AsiaGB →