ติดตั้ง ZeroTier Mesh VPN บน VPS Linux
ZeroTier คือซอฟต์แวร์ Open Source ที่ช่วยสร้าง Virtual LAN (VLAN) ข้ามอินเทอร์เน็ต ได้ในไม่กี่นาที — เหมือนนำ VPS หลายตัวที่อยู่คนละ datacenter มาเสียบสายเครือข่ายเดียวกัน โดยไม่ต้องเจาะ firewall หรือตั้งค่า port forwarding ซับซ้อน
เมื่อเทียบกับ WireGuard หรือ OpenVPN, ZeroTier มีจุดเด่นที่ ไม่ต้องมี server กลาง — ทุก node เชื่อมหากันแบบ peer-to-peer ผ่าน protocol ที่เรียกว่า ZeroTier Protocol (ZTP) พร้อม NAT traversal ในตัว
ZeroTier ทำงานอย่างไร
ZeroTier แบ่งออกเป็น 3 ส่วนหลัก:
| ส่วนประกอบ | หน้าที่ | ที่อยู่ |
|---|---|---|
| Planet / Moon | Root server สำหรับ bootstrap peer discovery | my.zerotier.com (หรือ self-hosted) |
| Controller | จัดการ Network ID และ authorize members | my.zerotier.com หรือ ZeroTierOne local |
| Node (Member) | แต่ละ VPS / laptop ที่ join network | เซิร์ฟเวอร์ของคุณ |
เมื่อ node 2 ตัว join network เดียวกัน, ZeroTier จะพยายามสร้าง direct P2P tunnel ก่อน (ถ้าทำได้) หรือผ่าน relay server ถ้า NAT ปิดกั้น — แต่ในทั้งสองกรณี traffic เข้ารหัสด้วย Curve25519/AES-256-GCM ตลอด
เตรียม VPS ก่อนติดตั้ง
ต้องการ VPS อย่างน้อย 2 ตัว (หรือ VPS + laptop) รัน Ubuntu 22.04/24.04 หรือ Debian 11/12:
- RAM อย่างน้อย 512 MB ต่อ node
- kernel 3.10+ (Ubuntu 20.04+ มาพร้อมกัน)
- port UDP 9993 ต้องไม่ถูก block โดย firewall ขาออก
- สมัครบัญชีฟรีที่ my.zerotier.com เพื่อสร้าง Network ID
ขั้นตอนที่ 1: สร้าง ZeroTier Network
ไปที่ my.zerotier.com → คลิก Create A Network → ระบบจะสร้าง Network ID ให้โดยอัตโนมัติ (16 hex characters เช่น a09acf02337b9b1c)
ตั้งค่าเบื้องต้นในหน้า Network:
- Access Control: เลือก Private (แนะนำ — ต้อง approve สมาชิกทุกคน)
- Managed Routes: ZeroTier จัดการให้อัตโนมัติ (subnet เริ่มต้น 172.22.0.0/16)
- IPv4 Auto-Assign: เปิดไว้ เพื่อให้ ZeroTier แจก IP ให้แต่ละ node อัตโนมัติ
ขั้นตอนที่ 2: ติดตั้ง ZeroTier บน VPS
ทำซ้ำขั้นตอนนี้บน ทุก VPS ที่ต้องการเชื่อมต่อกัน:
# ติดตั้ง ZeroTier (รองรับ Ubuntu, Debian, RHEL, Alpine ฯลฯ)
curl -s https://install.zerotier.com | sudo bash
# ตรวจสอบ service
sudo systemctl status zerotier-one
# ดู ZeroTier address ของ node นี้
sudo zerotier-cli info
คำสั่ง zerotier-cli info จะแสดงผลประมาณนี้:
200 info 1a2b3c4d5e 1.14.0 ONLINE
ตัวเลข 1a2b3c4d5e คือ Node ID ของ VPS ตัวนี้ (10 hex characters) จดไว้เพื่อใช้ authorize ในขั้นตอนถัดไป
ขั้นตอนที่ 3: Join Network
บนแต่ละ VPS รันคำสั่งนี้โดยแทน NETWORK_ID ด้วย Network ID ของคุณ:
sudo zerotier-cli join a09acf02337b9b1c
จากนั้นไปที่ my.zerotier.com → เลือก network → เลื่อนลงมาที่ Members — จะเห็น node ใหม่ปรากฏขึ้น ให้ tick checkbox ที่ Auth column เพื่อ authorize
ขั้นตอนที่ 4: ตรวจสอบ Peer Connection
หลัง authorize แล้ว ตรวจสอบว่า ZeroTier IP ถูกกำหนดให้ node และ peer เชื่อมต่อกันได้:
# ดู IP ที่ได้รับจาก ZeroTier network
ip addr show ztxxxxxx
# หรือ
sudo zerotier-cli listnetworks
# ดูสถานะ peer ทั้งหมด
sudo zerotier-cli peers
ผลลัพธ์ listnetworks จะแสดง:
200 listnetworks a09acf02337b9b1c OK PRIVATE zt7xxxxxxx 172.22.0.1/16
ขั้นตอนที่ 5: ทดสอบการเชื่อมต่อ
จาก VPS ตัวแรก ลอง ping ไปยัง ZeroTier IP ของ VPS ตัวที่สอง:
# VPS 1 → VPS 2 ผ่าน ZeroTier IP
ping 172.22.0.2
# SSH ผ่าน ZeroTier IP โดยตรง
ssh [email protected]
# ทดสอบ bandwidth
iperf3 -s # บน VPS 2
iperf3 -c 172.22.0.2 # บน VPS 1
ใช้ ZeroTier เป็น Private Network สำหรับ Database
ประโยชน์สำคัญของ ZeroTier คือการทำให้ database ไม่ต้อง expose port ออก public internet — แทนที่จะ bind 0.0.0.0, bind เฉพาะ ZeroTier interface แทน:
# แก้ MariaDB/MySQL ให้ bind เฉพาะ ZeroTier IP
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
# เปลี่ยน bind-address
bind-address = 172.22.0.1 # ZeroTier IP ของ DB server
sudo systemctl restart mariadb
# ทดสอบจาก app server (ผ่าน ZeroTier)
mysql -h 172.22.0.1 -u myuser -p
ตั้งค่า UFW ให้อนุญาต ZeroTier
ถ้าใช้ UFW ต้องเพิ่ม rule สำหรับ ZeroTier:
# อนุญาต ZeroTier network interface
sudo ufw allow in on ztxxxxxxxx
sudo ufw allow out on ztxxxxxxxx
# หรืออนุญาต subnet ทั้งหมด
sudo ufw allow from 172.22.0.0/16
# ตรวจสอบ
sudo ufw status verbose
Self-Hosted Controller ด้วย ZeroTierOne Moon
สำหรับองค์กรที่ต้องการ ไม่พึ่ง ZeroTier cloud สามารถตั้ง Moon (relay server ส่วนตัว) บน VPS:
# บน VPS ที่จะเป็น Moon
cd /var/lib/zerotier-one
sudo zerotier-idtool initmoon identity.public > moon.json
# แก้ไขไฟล์ moon.json — ใส่ IP จริงของ VPS ใน stableEndpoints
sudo nano moon.json
# "stableEndpoints": ["203.0.113.10/9993"]
# สร้าง moon file
sudo zerotier-idtool genmoon moon.json
# สร้างไฟล์ 000000xxxxxxxxxx.moon
# รับ Moon ID
sudo zerotier-cli info | awk '{print $3}'
# บน node ที่ต้องการ orbit moon นี้
sudo mkdir -p /var/lib/zerotier-one/moons.d
sudo cp 000000xxxxxxxxxx.moon /var/lib/zerotier-one/moons.d/
sudo systemctl restart zerotier-one
# ตรวจสอบว่า orbit moon สำเร็จ
sudo zerotier-cli listpeers | grep MOON
ตรวจสอบว่า ZeroTier ทำงานถูกต้อง
# ตรวจสอบ service status
sudo systemctl status zerotier-one
# ดูรายการ network ที่ join อยู่
sudo zerotier-cli listnetworks
# ดูสถานะ peer ทั้งหมด + ประเภทการเชื่อมต่อ
sudo zerotier-cli peers
# ดู ZeroTier interface และ IP
ip addr show | grep zt
# ทดสอบ ping ผ่าน ZeroTier
ping -c 4 172.22.0.2
# ดู log
sudo journalctl -u zerotier-one -f
peers ถ้าเห็น DIRECT แสดงว่าเชื่อมต่อ peer-to-peer ได้โดยตรง (latency ต่ำ) — ถ้าเห็น RELAY แสดงว่าผ่าน relay ซึ่ง latency สูงกว่า พิจารณาตั้ง Moon เพื่อแก้ปัญหาแก้ปัญหาที่พบบ่อย
Error: "Unable to connect to ZeroTier service"
เกิดจาก ZeroTier service ไม่ได้รัน หรือ socket ไม่ตอบสนอง:
# ตรวจสอบและ restart service
sudo systemctl status zerotier-one
sudo systemctl restart zerotier-one
# ตรวจสอบ socket
ls -la /var/lib/zerotier-one/zerotier-one.port
Error: node join สำเร็จแต่ไม่ได้รับ IP (REQUESTING_CONFIGURATION)
โดยมากเกิดเพราะยังไม่ได้ authorize node ในหน้า my.zerotier.com:
# ตรวจสอบสถานะ network
sudo zerotier-cli listnetworks
# ผลที่ถูกต้องหลัง authorize: OK PRIVATE
# ผลที่ยังไม่ authorize: ACCESS_DENIED PRIVATE
Error: ping ได้แต่ latency สูง (>100ms)
แสดงว่าเชื่อมต่อผ่าน relay แทน P2P direct — มักเกิดจาก symmetric NAT หรือ firewall บน UDP 9993:
# ตรวจสอบประเภทการเชื่อมต่อ
sudo zerotier-cli peers
# RELAY = ผ่าน relay, DIRECT = peer-to-peer
# เปิด UDP 9993 บน firewall
sudo ufw allow 9993/udp
# ถ้า VPS อยู่หลัง strict NAT ให้ตั้ง Moon server
Error: "zerotier-cli: not found" หลังติดตั้ง
Binary อาจอยู่ใน path ที่ต่างออกไป:
which zerotier-cli
ls /usr/sbin/zerotier-cli
# ถ้าไม่พบให้ติดตั้งใหม่
curl -s https://install.zerotier.com | sudo bash
Error: ZeroTier interface หาย หลัง reboot
Service ไม่ได้ตั้งให้ start อัตโนมัติ:
sudo systemctl enable zerotier-one
sudo systemctl start zerotier-one
คำถามที่พบบ่อย
ZeroTier ต่างจาก WireGuard อย่างไร?
WireGuard ต้องการ server กลาง (hub) ที่มี public IP ทุก node ต้องเชื่อมผ่าน server นั้น และต้องตั้งค่า key exchange ด้วยตนเอง ส่วน ZeroTier ทำงานแบบ full mesh — node เชื่อมหากันโดยตรง ไม่มี single point of failure และตั้งค่าง่ายกว่ามาก แต่ WireGuard มี overhead ต่ำกว่าเล็กน้อยและ throughput สูงกว่าในเครือข่ายที่ทราบ topology ชัดเจน
ZeroTier ปลอดภัยพอสำหรับ production หรือไม่?
ใช่ — ZeroTier ใช้ Curve25519 สำหรับ key exchange และ AES-256-GCM สำหรับ encryption ซึ่งเป็นมาตรฐานความปลอดภัยระดับสูง องค์กรใหญ่หลายแห่งใช้ ZeroTier ใน production โดยเฉพาะการเชื่อมต่อ multi-cloud และ hybrid infrastructure แนะนำให้ตั้ง Private network เสมอ และ review member list สม่ำเสมอ
ถ้าต้องการความเป็นส่วนตัวสูง ควรทำอย่างไร?
ตั้ง Moon (self-hosted relay) บน VPS ของคุณเอง เพื่อลด dependency กับ ZeroTier cloud infrastructure จากนั้นใช้ ztncui หรือ network-controller-ui สำหรับ self-hosted network controller ครบวงจร — วิธีนี้ทำให้ traffic metadata ไม่ผ่าน third-party server เลย
หากคุณกำลังมองหา VPS ราคาดีที่ในเอเชียสำหรับรัน ZeroTier node หรือ Moon server dnsxray.com เป็นเครื่องมือฟรีสำหรับตรวจสอบสุขภาพโดเมนและ DNS ที่มีประโยชน์ก่อนจะ deploy network ข้ามหลาย VPS — ช่วยยืนยันว่า DNS record ของแต่ละ node ชี้ถูกต้องก่อนเริ่ม configure ZeroTier