Tailscale Mesh VPN บน VPS

ติดตั้ง Tailscale บน VPS สร้าง Mesh VPN ส่วนตัว

อัปเดต 27 กันยายน 2569 · ใช้เวลาอ่าน ~8 นาที

Tailscale เป็น mesh VPN ที่สร้างบน WireGuard ทำให้เชื่อมต่ออุปกรณ์ทุกเครื่อง — VPS, laptop, มือถือ — เข้าหากันได้อย่างปลอดภัยโดยไม่ต้องตั้งค่า firewall หรือ port forwarding ซับซ้อน เพียงติดตั้ง agent บนแต่ละเครื่องแล้ว login ด้วย account เดียวกัน ทุกเครื่องก็สื่อสารกันได้ผ่าน IP ในวง 100.x.x.x ทันที

ต่างจาก WireGuard แบบ traditional ตรงที่ Tailscale จัดการ key exchange และ routing อัตโนมัติ ไม่ต้องแจก public key ด้วยตนเอง เหมาะอย่างยิ่งสำหรับ home lab, ทีมงานที่ต้องการ secure access ไปยัง VPS หลายเครื่อง หรือใครก็ตามที่อยาก self-host service โดยไม่เปิด port ต่อสาธารณะ

ความต้องการระบบ

ติดตั้ง Tailscale บน VPS

Tailscale มี repository สำหรับ Linux โดยเฉพาะ ติดตั้งด้วย script ทางการ:

# ดาวน์โหลดและรัน install script
curl -fsSL https://tailscale.com/install.sh | sh

# หรือเพิ่ม repo แบบ manual (Ubuntu/Debian)
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/jammy.noarmor.gpg \
  | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg > /dev/null

curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/jammy.tailscale-keyring.list \
  | sudo tee /etc/apt/sources.list.d/tailscale.list

sudo apt-get update && sudo apt-get install tailscale -y

ตรวจสอบว่าติดตั้งสำเร็จ:

tailscale version

เริ่มใช้งานและ Authenticate

เปิดใช้งาน Tailscale daemon และ authenticate กับ account:

# เปิด service
sudo systemctl enable --now tailscaled

# Authenticate (จะได้ URL สำหรับ login)
sudo tailscale up

คัดลอก URL ที่ได้ไปเปิดในเบราว์เซอร์แล้ว login ด้วย Google, GitHub หรือ Microsoft account จากนั้น VPS จะปรากฏใน Tailscale admin console ที่ login.tailscale.com/admin

Tip: ถ้า VPS ไม่มี browser ให้รัน sudo tailscale up --authkey=tskey-auth-xxx แทน โดยสร้าง auth key ล่วงหน้าที่ Admin Console → Settings → Keys

เปิด IP Forwarding สำหรับ Subnet Routing

ถ้าต้องการให้ VPS ทำหน้าที่เป็น gateway ให้เครื่องอื่นในเครือข่าย Tailscale เข้าถึง subnet ของ VPS ได้:

# เปิด IP forwarding แบบ persistent
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

# เปิด Tailscale พร้อม advertise subnet (เช่น 10.0.0.0/24 ของ VPS)
sudo tailscale up --advertise-routes=10.0.0.0/24

จากนั้นไปที่ Admin Console → Machines → เลือก VPS → Edit route settings → เปิด route ที่ advertise ไว้

ตั้ง VPS เป็น Exit Node

Exit node ทำให้ traffic ทั้งหมดของอุปกรณ์อื่นวิ่งออกผ่าน VPS — เหมือน VPN แบบ traditional:

# ประกาศ VPS เป็น exit node
sudo tailscale up --advertise-exit-node

# เปิด masquerading เพื่อให้ NAT ทำงาน
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# บันทึก iptables rule
sudo apt-get install iptables-persistent -y
sudo netfilter-persistent save

บน Admin Console → Machines → เลือก VPS → Edit → Allow this device to be used as an exit node ✓

จากนั้นบน laptop/มือถือที่ใช้ Tailscale เลือก "Use exit node" → เลือก VPS ได้เลย

เชื่อมต่ออุปกรณ์อื่น

ติดตั้ง Tailscale บนอุปกรณ์ที่ต้องการเชื่อมต่อ:

เมื่อ login ด้วย account เดียวกัน อุปกรณ์จะมองเห็นกันผ่าน IP วง 100.64.0.0/10 ทันที

MagicDNS และ HTTPS

Tailscale มีฟีเจอร์ MagicDNS ที่ assign ชื่อ hostname ให้ทุกเครื่องอัตโนมัติ เช่น my-vps.tail1234.ts.net:

# ดู hostname ของ VPS
tailscale status

# ทดสอบ ping ด้วย hostname
ping my-vps.tail1234.ts.net

# เปิด HTTPS certificate สำหรับ hostname
sudo tailscale cert my-vps.tail1234.ts.net
Tip: เปิด MagicDNS ใน Admin Console → DNS → Enable MagicDNS และ HTTPS Certificates จากนั้นสามารถ serve HTTPS service โดยไม่ต้องซื้อ domain หรือตั้ง Let's Encrypt

Tailscale ACL (Access Control)

ควบคุมว่าเครื่องไหนคุยกับเครื่องไหนได้บ้างผ่าน JSON policy ที่ Admin Console → Access Controls:

{
  "acls": [
    {"action": "accept", "src": ["group:admin"], "dst": ["tag:vps:*"]},
    {"action": "accept", "src": ["group:dev"], "dst": ["tag:vps:22"]}
  ],
  "tagOwners": {
    "tag:vps": ["group:admin"]
  }
}

ตรวจสอบว่า Tailscale ทำงานถูกต้อง

# ดูสถานะและ IP ของทุกเครื่องในเครือข่าย
tailscale status

# ดู IP ของ VPS ตัวเอง
tailscale ip -4

# ทดสอบ ping เครื่องอื่นในเครือข่าย
tailscale ping 100.x.x.x

# ตรวจสอบ route ที่ advertise
tailscale status --active

# ดู log ของ daemon
sudo journalctl -u tailscaled -n 50 --no-pager

# ตรวจสอบว่า IP forwarding เปิดอยู่
sysctl net.ipv4.ip_forward
Tip: รัน tailscale netcheck เพื่อดูว่า connection วิ่งผ่าน relay server (DERP) หรือ direct peer-to-peer — ถ้า direct แสดงว่า firewall ไม่ block UDP 41641

แก้ปัญหาที่พบบ่อย

Error: "failed to connect to coordination server"

VPS ไม่สามารถเชื่อมต่อ Tailscale coordination server ได้ มักเกิดจาก firewall หรือ DNS ผิดพลาด

# ตรวจสอบว่า port 443 ออกได้
curl -sv https://login.tailscale.com/machine/register

# ตรวจสอบ DNS
dig login.tailscale.com

# ถ้า DNS ล้มเหลว ลองตั้ง nameserver ชั่วคราว
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf

Error: "subnet router not accepting routes"

Admin Console ยังไม่ได้ approve route ที่ advertise หรือ IP forwarding ยังไม่เปิด

# ตรวจสอบ sysctl
sysctl net.ipv4.ip_forward
# ต้องได้ net.ipv4.ip_forward = 1

# re-advertise route
sudo tailscale up --advertise-routes=10.0.0.0/24

Error: "connection is over DERP" (ไม่ได้ direct)

Tailscale ใช้ relay server เพราะ NAT/firewall ปิด UDP สำหรับ WireGuard

# เปิด UDP port 41641 บน firewall
sudo ufw allow 41641/udp comment "Tailscale"
# หรือสำหรับ iptables
sudo iptables -A INPUT -p udp --dport 41641 -j ACCEPT

# ตรวจสอบผลลัพธ์
tailscale netcheck

Error: "tailscaled: permission denied" เมื่อรัน tailscale up

daemon ยังไม่ได้รันหรือ user ไม่มีสิทธิ์

# เปิด daemon
sudo systemctl start tailscaled
sudo systemctl status tailscaled

# ตรวจสอบ socket permissions
ls -la /var/run/tailscale/tailscaled.sock

Error: "node key expired"

Key หมดอายุ ต้อง re-authenticate

# Re-authenticate
sudo tailscale up --force-reauth

# หรือใช้ auth key ที่สร้างใหม่
sudo tailscale up --authkey=tskey-auth-NEWKEY

คำถามที่พบบ่อย

Tailscale ฟรีใช้ได้กี่เครื่อง?

Plan ฟรี (Personal) รองรับ 1 user และ 100 devices ซึ่งเพียงพอสำหรับ home lab ส่วนตัว Plan Starter ($6/เดือน) เพิ่มเป็น 2 users และ 100 devices Plan Business ($18/user/เดือน) ไม่จำกัดจำนวน devices และมี SSO/SAML/SCIM

Tailscale ต่างจาก WireGuard อย่างไร?

WireGuard เป็น protocol ระดับ kernel ที่ต้องตั้งค่าด้วยตนเอง (สร้าง key pair, แจก public key, กำหนด peer ทีละเครื่อง) ส่วน Tailscale เป็น orchestration layer ที่ใช้ WireGuard เป็น transport แต่จัดการ key exchange ผ่าน coordination server กลาง ทำให้เพิ่มเครื่องใหม่ง่ายกว่ามาก

ข้อมูลวิ่งผ่าน Tailscale server ไหม?

ไม่ — ข้อมูล (data plane) วิ่งตรงระหว่างเครื่องแบบ peer-to-peer ผ่าน WireGuard encryption Tailscale server ทำหน้าที่แค่ coordinate key exchange (control plane) เท่านั้น ถ้าทั้งสองฝั่งอยู่หลัง strict NAT จะใช้ DERP relay server เป็น fallback แต่ข้อมูลยังถูก encrypt อยู่