ZeroTier mesh network diagram

ติดตั้ง ZeroTier VPN บน VPS สร้าง SDN ส่วนตัว

อัปเดต 9 ตุลาคม 2569 · อ่าน 8 นาที

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 ชั้น:

FeatureZeroTierWireGuardTailscale
ModelMesh SDNPoint-to-pointMesh (WireGuard-based)
NAT traversalอัตโนมัติต้องตั้งค่าเองอัตโนมัติ
Free nodes25ไม่จำกัด (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
Note: หลัง join แล้วต้องไป 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
Tip: สำหรับการใช้งาน production ให้ตั้ง Allow Global / Allow Default ใน ZeroTier client ของแต่ละ node ด้วย ไม่เช่นนั้น traffic จะไม่วิ่งผ่าน 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
Tip: ถ้าใช้ Docker Swarm หรือ Kubernetes ข้าม VPS ให้ใช้ ZeroTier เชื่อม node ก่อน แล้วค่อยตั้ง overlay network บน ZeroTier IP — ง่ายกว่าการเปิด port ระหว่าง datacenter มาก

ตรวจสอบว่า 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
Tip: ถ้า peer แสดงสถานะ RELAY แทน DIRECT ให้ตรวจสอบ firewall ว่า UDP port 9993 เปิดอยู่ — ZeroTier ใช้ port นี้สำหรับ direct P2P

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

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 ตามปกติ