ไม่ต้องพอร์ตฟอร์เวิร์ด ไม่ต้อง Public IP — แค่ติดตั้ง Tailscale แล้วรันคำสั่งเดียว ใครก็เข้าถึง local service ของคุณได้จากทั่วโลก
ปกติถ้าเราต้องการให้คนภายนอกเข้าถึง web server บนเครื่องของเรา เราต้องทำ Port Forwarding บน router ซึ่งยุ่งยาก และหลายๆ ISP ก็ไม่อนุญาต โดยเฉพาะถ้าเราอยู่หลัง CGNAT
Tailscale Funnel แก้ปัญหานี้ได้อย่างสวยงาม — มันสร้าง encrypted tunnel จากอินเทอร์เน็ตสาธารณะเข้ามาหา service บนเครื่องเราโดยตรง โดยที่ IP จริงของเราจะถูกซ่อนอยู่ตลอดเวลา
เปรียบเทยบง่ายๆ: Tailscale Funnel เหมือน ngrok หรือ Cloudflare Tunnel แต่ผูกกับ VPN network ของ Tailscale ทำให้ตั้งค่าง่ายมากและได้ HTTPS อัตโนมัติ
เมื่อมีคนเข้า Funnel URL ของเรา การเดินทางของ request จะเป็นดังนี้:
จุดสำคัญคือ Funnel Relay ไม่สามารถอ่านเนื้อหา ของ traffic ได้เลย เพราะข้อมูลถูก encrypt ด้วย TLS ตั้งแต่ browser จนถึง service บนเครื่องเรา (End-to-End Encryption)
| รายการ | รายละเอียด | สถานะ |
|---|---|---|
| Tailscale Account | สมัครฟรีที่ tailscale.com (ใช้ได้ทุก plan) | ต้องมี |
| Tailscale Client | Version 1.38.3 ขึ้นไป | ต้องมี |
| Python | ใช้สำหรับรัน HTTP Server (ฟรี) | ต้องมี |
| OS | Windows / Linux / macOS (บทความนี้ใช้ Windows) | ใช้ได้ทุกระบบ |
| Port Forwarding | ไม่จำเป็น — Tailscale จัดการให้ทั้งหมด | ไม่ต้อง |
เข้าไปที่ tailscale.com/download แล้วดาวน์โหลด installer ตาม OS ที่ใช้ ในบทความนี้ใช้ Windows
หลังติดตั้งเสร็จ ให้ login ด้วย Google, GitHub, Microsoft หรือ email ตรวจสอบ version ด้วยคำสั่ง:
tailscale version
ต้องได้ version 1.38.3 หรือใหม่กว่า เท่านั้นถึงจะใช้ Funnel ได้ ถ้าเก่ากว่าให้อัปเดตก่อน
เข้า Tailscale Admin Console ที่ login.tailscale.com/admin/dns
หาส่วน MagicDNS แล้วคลิก Enable — ฟีเจอร์นี้ทำให้ทุกเครื่องใน tailnet มีชื่อ DNS ใช้งานได้ทันที
ยังอยู่ในหน้าเดิม หาส่วน HTTPS Certificates แล้วคลิก Enable — Tailscale จะออก TLS certificate จาก Let's Encrypt ให้อัตโนมัติ
เข้าหน้า login.tailscale.com/admin/acls แล้วคลิก JSON editor
เพิ่ม block nodeAttrs เข้าไปใน JSON โดยวางไว้ก่อน } ปิดสุดท้าย:
{
// ... ส่วนอื่นที่มีอยู่แล้ว ...
// เพิ่มส่วนนี้เข้าไป
"nodeAttrs": [
{
"target": ["autogroup:member"],
"attr": ["funnel"],
},
],
}
กด Save — ระบบจะ validate และบันทึกให้อัตโนมัติ
autogroup:member หมายถึงทุก user ในทีม Tailscale ของเรา สามารถแก้ให้จำกัดเฉพาะบาง user ได้ภายหลัง
Tailscale Funnel ทำหน้าที่เป็น tunnel เท่านั้น — เราต้องมี web server จริงๆ รันอยู่บนเครื่องด้วย Python มี HTTP server built-in ที่ใช้งานได้ทันที
# สร้างโฟลเดอร์ mkdir C:\webroot # วาง index.html ไว้ที่ C:\webroot\index.html
cd C:\webroot python -m http.server 3000
ถ้าทำงานได้จะเห็น output แบบนี้:
Serving HTTP on 0.0.0.0 port 3000 (http://0.0.0.0:3000/) ...
ถ้าพิมพ์ python แล้วไม่พบคำสั่ง ลองใช้ python3 หรือ py แทน หรือดาวน์โหลด Python ที่ python.org
เปิด PowerShell (Administrator) หน้าต่างใหม่ (อย่าปิดหน้าต่าง Python) แล้วรัน:
# รันแบบ foreground (ต้องค้างหน้าต่างไว้) tailscale funnel 3000 # หรือรันแบบ background (แนะนำ — ปิด terminal ได้) tailscale funnel --bg 3000
ถ้าสำเร็จจะเห็น output แบบนี้:
Available on the internet: https://your-machine.tail083038.ts.net/ |-- / proxy http://127.0.0.1:3000 Press Ctrl+C to exit.
เสร็จแล้ว! URL ที่ได้คือ public URL ที่ใครก็เข้าได้จากทั่วโลก ทดสอบโดยเปิดเบราว์เซอร์แล้วไปที่ URL นั้นได้เลย
ลองสร้างไฟล์ index.html ง่ายๆ ที่แสดงเวลาปัจจุบัน วางไว้ที่ C:\webroot\index.html:
<!DOCTYPE html> <html lang="th"> <head> <meta charset="UTF-8"> <title>Clock</title> <style> body { background:#111; color:#00ffe0; font-family:monospace; display:flex; align-items:center; justify-content:center; height:100vh; margin:0; } #clock { font-size: 80px; } </style> </head> <body> <div id="clock"></div> <script> function tick() { document.getElementById('clock').textContent = new Date().toLocaleTimeString('th-TH'); } tick(); setInterval(tick, 1000); </script> </body> </html>
Funnel รองรับเฉพาะ port 443, 8443, และ 10000 เท่านั้น — แต่เราสามารถ map port ใดก็ได้บนเครื่องเราไปหา port เหล่านี้ได้ ในตัวอย่างนี้ Python รันที่ port 3000 และ Funnel expose ออกไปเป็น HTTPS (443) ให้โดยอัตโนมัติ
หลังเปิด Funnel ครั้งแรก อาจต้องรอประมาณ 5–10 นาที ให้ DNS records กระจายออกสู่สาธารณะก่อนที่ URL จะเข้าได้จากภายนอก
ถ้าต้องการให้ Funnel + Python server ทำงานตั้งแต่เปิดเครื่อง สามารถสร้าง batch file แล้วใส่ใน Windows Task Scheduler ได้:
@echo off cd C:\webroot start python -m http.server 3000 tailscale funnel --bg 3000
# ปิด Funnel บน port 3000 tailscale funnel --bg 3000 off # หรือ reset ทั้งหมด tailscale funnel --reset
ข้อควรระวัง: เมื่อเปิด Funnel แล้ว ทุกคนบนโลก สามารถเข้าถึง service ของเราได้ อย่า expose service ที่มีข้อมูลสำคัญหรือไม่มี authentication โดยไม่ตั้งใจ