ติดตั้ง ZeroTier VPN บน VPS สร้าง SDN ส่วนตัว
ZeroTier คือ Software-Defined Networking (SDN) ที่ช่วยให้ device ทุกเครื่องเชื่อมต่อกันเหมือนอยู่ใน LAN เดียวกัน ไม่ว่าจะอยู่ที่ไหนในโลก โดยใช้ protocol เข้ารหัส end-to-end บน UDP รองรับ NAT traversal อัตโนมัติ ไม่ต้องเปิด port หรือตั้งค่า firewall ซับซ้อน
ต่างจาก WireGuard หรือ OpenVPN ตรงที่ ZeroTier เป็น mesh network — ทุก node เชื่อมหากันโดยตรง ไม่ต้องผ่าน central server (เว้นแต่ NAT ไม่ยอม) แผน Free รองรับได้ถึง 25 nodes
ZeroTier ทำงานอย่างไร
สถาปัตยกรรมหลักของ ZeroTier มี 3 ชั้น:
- ZeroTier Planet/Moon — root server สำหรับ bootstrap (ZeroTier Inc. ดูแล หรือ self-host ด้วย Moon)
- ZeroTier Network Controller — ระบบ centralized ที่ออก policy, IP, และ ACL ให้กับ network (จัดการผ่าน my.zerotier.com หรือ self-host)
- ZeroTier Node — process ที่รันบนแต่ละ device เชื่อม peer-to-peer โดยตรง
| Feature | ZeroTier | WireGuard | Tailscale |
|---|---|---|---|
| Model | Mesh SDN | Point-to-point | Mesh (WireGuard-based) |
| NAT traversal | อัตโนมัติ | ต้องตั้งค่าเอง | อัตโนมัติ |
| Free nodes | 25 | ไม่จำกัด (self-host) | 3 users |
| Self-host controller | ได้ (ZeroTierOne) | ได้ทั้งหมด | ต้องใช้ Headscale |
| Setup ยาก | ง่ายมาก | ปานกลาง | ง่าย |
ติดตั้ง ZeroTier บน VPS Ubuntu/Debian
ก่อนเริ่ม: ต้องมีบัญชี ZeroTier ที่ my.zerotier.com และสร้าง Network ID ไว้แล้ว (หรือ self-host controller)
ขั้นที่ 1: ติดตั้ง ZeroTier
# Ubuntu / Debian (official installer script)
curl -s https://install.zerotier.com | sudo bash
# ตรวจสอบ service
sudo systemctl status zerotier-one
sudo zerotier-cli status
# ผลลัพธ์ที่ต้องการ
# 200 info 1.14.0 ONLINE
ขั้นที่ 2: Join Network
# แทน ด้วย 16-digit network ID จาก my.zerotier.com
sudo zerotier-cli join <NETWORK_ID>
# ตัวอย่าง
sudo zerotier-cli join 8056c2e21c000001
# ตรวจสอบสถานะ network
sudo zerotier-cli listnetworks
my.zerotier.com → Members → คลิก authorize checkbox ให้ node นั้นก่อน จึงจะได้รับ IPขั้นที่ 3: ดู IP ที่ได้รับ
# ดู IP ที่ได้จาก ZeroTier network
sudo zerotier-cli listnetworks
# ผลลัพธ์
# 200 listnetworks 8056c2e21c000001 MyNetwork 72:cc:... OK PRIVATE ztXXXXXXXX 10.147.17.1/24
# ดู interface
ip addr show ztXXXXXXXX
ขั้นที่ 4: ทดสอบ connectivity
# ping จาก node อื่นในเครือข่าย (แทน IP ด้วย ZeroTier IP ของ VPS)
ping 10.147.17.1
# หรือทดสอบ SSH ผ่าน ZeroTier IP
ssh [email protected]
ตั้งค่า IP Routing — ใช้ VPS เป็น gateway
กรณีต้องการให้ node อื่นๆ ส่ง traffic ผ่าน VPS ออก internet (เหมือน VPN gateway):
เปิด IP forwarding บน VPS
# เปิด IPv4 forwarding
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
# ตั้งค่า NAT ด้วย iptables (แทน eth0 ด้วย interface จริง)
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i ztXXXXXXXX -j ACCEPT
sudo iptables -A FORWARD -o ztXXXXXXXX -m state --state RELATED,ESTABLISHED -j ACCEPT
# บันทึก iptables rules
sudo apt install iptables-persistent -y
sudo netfilter-persistent save
ตั้งค่า Managed Route ใน ZeroTier Dashboard
# ใน my.zerotier.com → Network → Settings → Managed Routes
# เพิ่ม route:
# Destination: 0.0.0.0/0
# Via: 10.147.17.1 ← ZeroTier IP ของ VPS ที่เป็น gateway
Self-host ZeroTier Network Controller
ถ้าต้องการ control plane ส่วนตัว 100% สามารถรัน controller บน VPS เองได้โดยไม่ต้องพึ่ง my.zerotier.com:
ติดตั้ง ZeroTier-Network-Controller (ztncui)
# ติดตั้ง Node.js ก่อน
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
# ติดตั้ง ztncui (web UI สำหรับจัดการ network)
sudo npm install -g ztncui
ztncui
# หรือใช้ Docker
docker run -d --name ztncui \
-p 3000:3000 \
-v /var/lib/zerotier-one:/var/lib/zerotier-one \
-e NODE_ENV=production \
key-networks/ztncui
สร้าง Network บน self-hosted controller
# ดู NodeID ของ VPS เพื่อใช้เป็น controller address
sudo zerotier-cli info
# 200 info abcdef1234 1.14.0 ONLINE
# สร้าง network ผ่าน ZeroTier API
curl -s -H "X-ZT1-AUTH: $(sudo cat /var/lib/zerotier-one/authtoken.secret)" \
-X POST http://localhost:9993/controller/network/abcdef1234______
# format: controller_nodeid + 6 zeros แล้วกรอก config
ZeroTier กับ Docker Network
ใช้ ZeroTier เชื่อม container ระหว่าง VPS หลายเครื่อง โดยไม่ต้องตั้ง overlay network ซับซ้อน:
# รัน ZeroTier ใน container
docker run -d \
--name zerotier \
--cap-add NET_ADMIN \
--cap-add SYS_ADMIN \
--device /dev/net/tun \
-v /var/lib/zerotier-one:/var/lib/zerotier-one \
zerotier/zerotier:latest
# join network
docker exec zerotier zerotier-cli join <NETWORK_ID>
# ดู IP ที่ได้
docker exec zerotier zerotier-cli listnetworks
ตรวจสอบว่า ZeroTier ทำงานถูกต้อง
# ดูสถานะ daemon
sudo systemctl status zerotier-one
# ดูสถานะ node และเวอร์ชัน
sudo zerotier-cli status
# ดู network ที่ join ทั้งหมด
sudo zerotier-cli listnetworks
# ดู peers ที่เชื่อมต่ออยู่
sudo zerotier-cli listpeers
# ดู interface
ip addr show | grep zt
# ทดสอบ ping ผ่าน ZeroTier IP
ping -c 4 10.147.17.X
# ดู route
ip route | grep zt
แก้ปัญหาที่พบบ่อย
Error: "zerotier-cli: unable to connect to ZeroTier service"
Service ไม่ได้รันหรือ socket ไม่พร้อม
# เริ่ม service
sudo systemctl start zerotier-one
sudo systemctl enable zerotier-one
# ถ้ายังไม่ได้ ลบ lock file แล้วรีสตาร์ท
sudo rm -f /var/lib/zerotier-one/*.lck
sudo systemctl restart zerotier-one
Error: node ไม่ได้รับ IP หลัง join
ต้องไป authorize node ใน ZeroTier dashboard ก่อน
# ตรวจสอบสถานะ network
sudo zerotier-cli listnetworks
# ถ้าเห็น ACCESS_DENIED หรือ REQUESTING_CONFIG แสดงว่ายังไม่ authorize
# ไป my.zerotier.com → เลือก network → Members
# หา NodeID แล้วติ๊ก Auth checkbox
Error: peers แสดง RELAY ทำให้ latency สูง
UDP port 9993 ถูก block โดย firewall
# เปิด port 9993 UDP บน firewall
sudo ufw allow 9993/udp
# หรือ iptables
sudo iptables -A INPUT -p udp --dport 9993 -j ACCEPT
# ตรวจสอบว่า DIRECT แล้วหลังจากเปิด port
sudo zerotier-cli listpeers | grep DIRECT
Error: "ERROR: Unable to configure virtual network port"
kernel module tun ไม่ได้โหลด
# โหลด tun module
sudo modprobe tun
echo 'tun' | sudo tee -a /etc/modules
# ตรวจสอบ
lsmod | grep tun
Error: ไม่สามารถ ping ระหว่าง nodes ได้
Managed Routes หรือ Allow ใน client ยังไม่ถูกตั้งค่า
# ตรวจสอบ route ใน network controller ว่ามี subnet ครอบคลุมหรือไม่
sudo zerotier-cli listnetworks
# บน client ตรวจสอบ allow flags
sudo zerotier-cli set <NETWORK_ID> allowGlobal=true
sudo zerotier-cli set <NETWORK_ID> allowDefault=true
คำถามที่พบบ่อย
ZeroTier ปลอดภัยพอสำหรับ production ไหม?
ZeroTier ใช้ Curve25519 สำหรับ key exchange และ AES-256-GCM เข้ารหัส traffic — ระดับความปลอดภัยเทียบเท่า WireGuard สำหรับใช้ใน production ควรพิจารณา self-host network controller เพื่อไม่ต้องพึ่งพา ZeroTier Inc. และใช้ Moon ของตัวเองเพื่อ bootstrap โดยไม่ต้องผ่าน planet server ของบริษัท
ZeroTier ต่างจาก Tailscale อย่างไร?
ทั้งคู่เป็น mesh VPN แต่ Tailscale ใช้ WireGuard เป็น transport layer ทำให้ performance ดีกว่าเล็กน้อย ส่วน ZeroTier ใช้ protocol ของตัวเองที่ออกแบบมาเพื่อ SDN โดยเฉพาะ รองรับ Layer 2 bridging ได้ ซึ่ง Tailscale ไม่รองรับ Tailscale มี free tier จำกัดที่ 3 users ส่วน ZeroTier ให้ 25 nodes ฟรี
ใช้ ZeroTier กับ Raspberry Pi หรือ ARM device ได้ไหม?
ได้ ZeroTier รองรับ ARM, ARM64, MIPS และ x86 ทั้งหมด ใช้ installer script เดียวกัน ติดตั้งได้บน Raspberry Pi OS, Armbian, และ Ubuntu ARM ตามปกติ