การ remote เข้า server หรืออุปกรณ์ที่บ้านจากข้างนอกเป็นเรื่องที่หลายคนต้องการ แต่การ setup VPN แบบดั้งเดิมอย่าง OpenVPN หรือ WireGuard manual นั้นมีขั้นตอนเยอะ ต้องจัดการ certificate, key, config file และยังต้องมี public IP หรือ dynamic DNS อีก Tailscale มาแก้ปัญหาเหล่านี้ได้หมด
บทความนี้จะอธิบายว่า Tailscale คืออะไร ทำงานยังไง และ setup ยังไงให้ใช้งานได้จริงในชีวิตประจำวัน
Tailscale คืออะไร
Tailscale เป็น VPN service ที่สร้างบน WireGuard protocol แต่เพิ่ม control plane ที่จัดการ key exchange และ routing ให้อัตโนมัติ แทนที่จะต้อง generate key และแจกจ่าย config เอง Tailscale ทำทุกอย่างให้ผ่าน identity provider อย่าง Google, Microsoft หรือ GitHub
แนวคิดหลักของ Tailscale คือ mesh network ทุก device เชื่อมต่อถึงกันโดยตรง (peer-to-peer) ไม่ผ่าน server กลาง ทำให้ latency ต่ำและ throughput สูง การเชื่อมต่อจะใช้ NAT traversal เพื่อเจาะผ่าน firewall โดยไม่ต้อง open port
ต่างจาก Traditional VPN ยังไง
| Feature | Traditional VPN | Tailscale |
|---|---|---|
| Setup time | หลายชั่วโมง | 10 นาที |
| Key management | manual | อัตโนมัติ |
| Public IP ต้องการ | ใช่ | ไม่จำเป็น |
| Traffic routing | ผ่าน server กลาง | peer-to-peer |
| Port forwarding | ต้องทำเอง | ไม่จำเป็น |
การติดตั้ง Tailscale
Linux
ติดตั้งด้วย script เดียว รองรับทุก distro หลัก
curl -fsSL https://tailscale.com/install.sh | sh
# เริ่ม Tailscale และ login
sudo tailscale up
# ดู IP ที่ได้รับ
tailscale ip -4
หลัง login ผ่าน browser แล้ว device จะปรากฏใน Tailscale admin console และได้รับ IP ในช่วง 100.x.x.x
Windows
ดาวน์โหลด installer จาก tailscale.com หรือใช้ winget
winget install tailscale.tailscale
หลังติดตั้ง icon จะปรากฏใน system tray คลิก "Log in" แล้ว authenticate ผ่าน browser
macOS
brew install tailscale
# หรือผ่าน Mac App Store
# ค้นหา "Tailscale" และติดตั้ง
Docker
รัน Tailscale เป็น container สำหรับ server ที่ต้องการ isolate
services:
tailscale:
image: tailscale/tailscale:latest
container_name: tailscale
hostname: my-homelab
environment:
- TS_AUTHKEY=${TS_AUTHKEY}
- TS_STATE_DIR=/var/lib/tailscale
- TS_USERSPACE=false
volumes:
- tailscale_state:/var/lib/tailscale
- /dev/net/tun:/dev/net/tun
cap_add:
- NET_ADMIN
- SYS_MODULE
restart: unless-stopped
volumes:
tailscale_state:
สร้าง auth key ใน Tailscale admin console ที่ Settings > Keys > Generate auth key
ACL Configuration
ค่าเริ่มต้น Tailscale อนุญาตให้ทุก device คุยกันได้หมด แต่ถ้าต้องการ restrict access ให้แก้ ACL (Access Control List)
{
"groups": {
"group:admin": ["user@gmail.com"],
"group:family": ["member1@gmail.com", "member2@gmail.com"]
},
"acls": [
// admin เข้าได้ทุกอย่าง
{
"action": "accept",
"src": ["group:admin"],
"dst": ["*:*"]
},
// family เข้าได้แค่บางพอร์ต
{
"action": "accept",
"src": ["group:family"],
"dst": ["tag:homelab:80,443,8096"]
}
],
"tagOwners": {
"tag:homelab": ["group:admin"]
}
}
Tailscale SSH
คุณสมบัติที่น่าสนใจมากคือ Tailscale SSH ที่ให้ SSH เข้า device ได้โดยไม่ต้องมี SSH key และจัดการ authentication ผ่าน Tailscale identity
# เปิด Tailscale SSH
sudo tailscale up --ssh
# SSH เข้า device ผ่าน Tailscale
ssh user@device-name
# หรือใช้ MagicDNS
ssh user@hostname.tailnet-name.ts.net
เพิ่ม SSH policy ใน ACL
{
"ssh": [
{
"action": "accept",
"src": ["group:admin"],
"dst": ["tag:homelab"],
"users": ["autogroup:nonroot", "root"]
},
// ต้อง check via Tailscale ก่อน SSH
{
"action": "check",
"src": ["group:family"],
"dst": ["tag:homelab"],
"users": ["autogroup:nonroot"]
}
]
}
Exit Nodes
Exit node ทำให้ traffic ของ device อื่นออกทาง network ของ device นั้น เหมือน VPN ปกติ เหมาะสำหรับกรณีต้องการ browse ผ่าน IP บ้าน ตอนอยู่ข้างนอก
# ตั้ง server เป็น exit node
sudo tailscale up --advertise-exit-node
# Approve exit node ใน admin console
# หรือด้วย tailscale CLI
tailscale set --exit-node-allow-lan-access=true
# บน client ที่จะใช้ exit node
sudo tailscale up --exit-node=100.x.x.x
# หรือระบุชื่อ
sudo tailscale up --exit-node=my-homeserver
Subnet Routing
Subnet routing ทำให้เข้าถึง device อื่นใน network บ้านได้โดยที่ device เหล่านั้นไม่ต้องติดตั้ง Tailscale เหมาะสำหรับ router, NAS, smart home device หรืออุปกรณ์ที่ไม่รองรับ Tailscale
# ประกาศ subnet ที่ต้องการ route
sudo tailscale up --advertise-routes=192.168.1.0/24
# เปิด IP forwarding
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
# Approve subnet ใน admin console
# Settings > Machines > Edit route settings
หลังจากนี้ device ใน tailnet สามารถเข้า 192.168.1.x ได้เลยผ่าน subnet router
MagicDNS
MagicDNS ทำให้เข้า device ด้วยชื่อแทน IP เช่น ssh user@my-server แทน ssh user@100.64.1.5
เปิดใช้งานได้ที่ admin console > DNS > Enable MagicDNS
ชื่อ device จะเป็น hostname.tailnet-name.ts.net หรือถ้าเปิด "Override local DNS" จะใช้แค่ hostname ได้เลย
# ทดสอบ MagicDNS
ping my-homeserver
# ดู DNS ที่ Tailscale ใช้
tailscale dns status
แชร์ Device กับเพื่อนหรือทีม
# Share device ผ่าน CLI
tailscale share --node=node-id --with=friend@gmail.com
# ดู devices ที่แชร์
tailscale status
หรือผ่าน admin console ไปที่ Machines > เลือก machine > Share แล้วใส่ email ของคนที่ต้องการแชร์ คนนั้นจะต้อง accept invitation ใน Tailscale app ของตัวเอง
เปรียบเทียบกับ WireGuard Manual Setup
WireGuard เป็น protocol ที่เร็วและ secure แต่การ setup manual ต้องทำเยอะกว่ามาก
# WireGuard manual - ต้องทำทุก device
wg genkey | tee privatekey | wg pubkey > publickey
# สร้าง config
cat > /etc/wireguard/wg0.conf << EOF
[Interface]
PrivateKey = $(cat privatekey)
Address = 10.0.0.1/24
ListenPort = 51820
[Peer]
PublicKey = peer-public-key-here
AllowedIPs = 10.0.0.2/32
EOF
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0
กับ Tailscale ทำแค่ tailscale up ก็พอ แลกกับการที่ต้องพึ่ง Tailscale control plane ซึ่งเป็น service ของบริษัท ถ้าต้องการ self-host control plane ด้วยให้ดู Headscale ซึ่งเป็น open-source alternative
สำหรับการ secure server ที่ใช้ร่วมกับ Tailscale ดูได้ที่ Linux Server Hardening Checklist 2026 และถ้าต้องการ expose service ออก internet โดยไม่ใช้ Tailscale ลองอ่าน Cloudflare Tunnel สำหรับ Self-Hosting ด้วย
Headscale: Self-Hosted Control Plane
สำหรับคนที่ต้องการ control ทุกอย่าง Headscale เป็น self-hosted implementation ของ Tailscale control plane
# ติดตั้ง Headscale ด้วย Docker
services:
headscale:
image: headscale/headscale:latest
container_name: headscale
restart: unless-stopped
ports:
- "8080:8080"
- "9090:9090"
volumes:
- ./headscale-config:/etc/headscale
- headscale_data:/var/lib/headscale
command: serve
volumes:
headscale_data:
Client เชื่อมต่อ Headscale แทน Tailscale
tailscale up --login-server=https://headscale.yourdomain.com
คำถามที่พบบ่อย (FAQ)
Tailscale ฟรีไหม? มี limit อะไรบ้าง?
Plan ฟรีใช้ได้ 3 user, 100 device ต่อ user และทุก feature หลัก ยกเว้น SSO custom identity provider, audit logs และ priority support Plan Personal Plus ราคา $6/เดือน เพิ่ม custom DNS และ features อีกเล็กน้อย สำหรับ Home Lab plan ฟรีเกินพอ
Tailscale ปลอดภัยไหม? Traffic ผ่าน server Tailscale ไหม?
Traffic ไม่ผ่าน server Tailscale (ยกเว้นกรณีที่ NAT traversal ล้มเหลวต้องใช้ DERP relay) Tailscale ทำหน้าที่แค่ coordinate key exchange และ routing สัญญาณ ข้อมูลเข้ารหัสด้วย WireGuard end-to-end
ความเร็วลดลงไหมเมื่อใช้ Tailscale?
ถ้าเชื่อมต่อแบบ direct (peer-to-peer) overhead ต่ำมาก ใกล้เคียง WireGuard ปกติ ถ้าผ่าน DERP relay ความเร็วขึ้นอยู่กับ latency ไปยัง relay server ใกล้สุด ซึ่งมีอยู่หลายภูมิภาค
ใช้ Tailscale กับ Pi-hole ยังไง?
ตั้ง Pi-hole เป็น DNS server ใน Tailscale admin console ที่ DNS > Custom nameservers ใส่ IP ของ Pi-hole ใน tailnet (เช่น 100.x.x.x) แล้วทุก device ใน tailnet จะใช้ Pi-hole เป็น DNS
Tailscale ทำงานบน mobile ได้ไหม?
ทำงานได้บน iOS และ Android มี app ใน App Store และ Play Store แอปทำงาน background ได้และเชื่อมต่ออัตโนมัติเมื่อต้องการ
ถ้า Tailscale down จะเข้า server ไม่ได้ไหม?
ถ้าใช้ Tailscale SSH ต้องมี fallback access เช่น console access หรือ physical access ถ้า Tailscale control plane down การเชื่อมต่อที่มีอยู่แล้วยังทำงานได้ แต่สร้างการเชื่อมต่อใหม่ไม่ได้ แนะนำให้มี access method สำรองไว้เสมอ
