
ครอบคลุมการติดตั้งบน openSUSE Tumbleweed, Ubuntu และ Arch Linux
EasyTier เป็น mesh VPN แบบ decentralized เขียนด้วย Rust บน Tokio framework จุดต่างจาก VPN ทั่วไปคือไม่มี server กลางที่ทำหน้าที่ควบคุมเครือข่าย โหนดทุกตัวมีสถานะเท่าเทียมกัน สามารถเชื่อมต่อกันโดยตรงแบบ P2P ได้ทันทีที่มองเห็นกัน
คุณสมบัติหลัก:
โครงการนี้อยู่ในกลุ่มเดียวกับ ZeroTier และ Tailscale แต่เป็น open source เต็มรูปแบบ (LGPL-3.0) และ self-host ได้ทั้งระบบโดยไม่ต้องพึ่ง coordination server ของบริษัทใดบริษัทหนึ่ง
EasyTier พยายาม เชื่อมต่อแบบ P2P โดยตรงก่อนเสมอ โดยดีฟอลต์จะ hole-punch กับทุกโหนดในเครือข่ายแบบ active อยู่เบื้องหลัง ทำให้เป็น full mesh จริง ๆ ไม่ใช่แค่ star topology ผ่านโหนดเดียว
เมื่อ P2P ไม่สำเร็จ (เช่นเจอ symmetric NAT ทั้งสองฝั่ง) ระบบจะ relay ข้อมูลผ่านโหนดอื่นในเส้นทางโดยอัตโนมัติ และมี routing protocol แบบคล้าย OSPF คอยเลือกเส้นทางที่ดีที่สุดให้ ค่า cost ที่เห็นใน routing table ไม่ตายตัว — ช่วงแรกอาจไปทาง relay (cost สูงกว่า) แล้วเมื่อมี traffic จริงเกิดขึ้น ระบบจะค่อย ๆ อัพเกรดเป็น direct connection เอง (cost ลดลง)
ตรวจสอบสถานะจริงได้ด้วย:
easytier-cli peer # cost: Local / p2p / relay, latency, NAT type
easytier-cli route # เส้นทางและ subnet ที่ sync กันในเครือข่าย
หากเครือข่ายมีโหนดจำนวนมากแต่ไม่จำเป็นต้องคุยกันตรงทุกคู่ ใช้ flag --lazy-p2p เพื่อให้ hole-punch เฉพาะตอนมี traffic จริงแทนการทำ background ตลอดเวลา
1. เชื่อม homelab / self-hosted infra ที่กระจายหลายที่ ถ้ามีเครื่องหลายเครื่อง (บ้าน, VPS, ห้อง lab) อยู่คนละเครือข่ายกัน แล้วอยากให้ node ในระบบ cluster (เช่น Nomad, Consul, TiKV) มองเห็นกันเป็น subnet เดียว EasyTier ช่วยตัดปัญหาการเปิด port forward ตรง ๆ ที่บ้านหรือ router แต่ละที่ออกไปได้
2. Remote access เข้าเครื่องหลังบ้าน เข้าถึง NAS, dev server หรือเครื่องที่บ้านจากข้างนอกโดยไม่ต้องมี public IP
3. แชร์ subnet ทั้งวง (Subnet Proxy) expose เครือข่าย LAN ทั้งวงให้โหนดอื่นเข้าถึงได้ผ่านโหนดเดียวที่ทำหน้าที่เป็น gateway
4. ให้อุปกรณ์ที่มีแค่ WireGuard client เข้าร่วมเครือข่ายได้ เช่นมือถือ iOS/Android ที่ยังไม่รองรับ EasyTier โดยตรง
5. เล่นเกม LAN ข้ามอินเทอร์เน็ต กรณีใช้งานยอดฮิตในคอมมูนิตี้ผู้ใช้ทั่วไป
6. ใช้สอน/สาธิตเรื่อง overlay network, NAT traversal, mesh topology โค้ดเปิดและมี protocol ให้ศึกษาได้จริง เหมาะเป็นตัวอย่างประกอบวิชา Network Security หรือ Computer Networks
มีวิธีติดตั้งหลัก 3 แบบในทุก distro:
# วิธีที่ 1: สคริปต์ติดตั้งอัตโนมัติ (ใช้ได้ทุก distro)
curl -fsSL "https://github.com/EasyTier/EasyTier/blob/main/script/install.sh?raw=true" | sudo bash -s install
ด้านล่างนี้คือรายละเอียดเฉพาะแต่ละ distro สำหรับวิธีที่ 2 และ 3
Build จาก source:
# ติดตั้ง build dependencies ที่จำเป็น
sudo zypper install -y protobuf gcc make pkg-config git
# compile และติดตั้งผ่าน cargo
cargo install --git https://github.com/EasyTier/EasyTier.git easytier
หมายเหตุ: ถ้าไม่ติดตั้ง
protobufก่อน จะเจอ errorCould not find protocตอน compile crateprost-wkt-typesเพราะ build script ต้องใช้ตัวprotoc(Protocol Buffers compiler) — แพ็กเกจนี้อยู่ใน repo มาตรฐานของ Tumbleweed แล้ว ไม่ต้องเพิ่ม repo เสริม
Pre-built binary:
ดาวน์โหลดจาก Releases เลือกไฟล์ x86_64-unknown-linux-musl หรือ gnu ตามระบบ แตกไฟล์แล้ววางไบนารี easytier-core และ easytier-cli ไว้ที่ /usr/local/bin/ แล้ว chmod +x
Build จาก source:
sudo apt update
sudo apt install -y protobuf-compiler build-essential pkg-config git
cargo install --git https://github.com/EasyTier/EasyTier.git easytier
แพ็กเกจ protobuf-compiler บน Ubuntu ทำหน้าที่เดียวกับ protobuf บน openSUSE คือให้ตัว protoc มาใช้ตอน build
Pre-built binary: เหมือนกับ openSUSE คือโหลดจากหน้า Releases มาวางใน /usr/local/bin/ ได้เลย
วิธีที่ง่ายที่สุด — ใช้ AUR แบบ prebuilt:
yay -S easytier-bin
# หรือ
paru -S easytier-bin
Build จาก source ผ่าน AUR:
yay -S easytier-git
pkgbuild ของ easytier-git จะดึง protobuf, cargo, git, rust-bindgen มาเป็น build dependency ให้อัตโนมัติ
Build เองด้วย cargo (ไม่ผ่าน AUR):
sudo pacman -S --needed protobuf base-devel git
cargo install --git https://github.com/EasyTier/EasyTier.git easytier
รันคำสั่งเดียวกันบนทุกโหนด ใช้ --network-name และ --network-secret เดียวกันเป็นตัวระบุเครือข่าย:
sudo easytier-core -d --network-name mynet --network-secret mysecret -p tcp://<SharedNodeIP>:11010
# โหนดแรก
sudo easytier-core -i 10.144.144.1
# โหนดที่สอง เชื่อมผ่าน public IP ของโหนดแรก
sudo easytier-core -i 10.144.144.2 -p udp://FIRST_NODE_PUBLIC_IP:11010
easytier-cli peer # ดู peer ที่เชื่อมอยู่ พร้อม latency และ NAT type
easytier-cli route # ดู routing table
easytier-cli node # ดูข้อมูลโหนดตัวเอง
ping 10.144.144.2 # ทดสอบเชื่อมต่อ
แทนที่จะรันด้วย CLI flag ยาว ๆ ทุกครั้ง สามารถเขียนเป็นไฟล์ config.toml แล้วโหลดด้วย -c แทนได้ เหมาะกับตอนตั้งเป็น service ระยะยาว
instance_name = "default"
instance_id = "c0871c03-2a55-4708-a3b9-426666f46b1c" # สุ่มค่า UUID ให้ไม่ซ้ำกันในแต่ละโหนด
hostname = "lab-node-01"
ipv4 = "10.144.144.2"
dhcp = false
listeners = [
"tcp://0.0.0.0:11010",
"udp://0.0.0.0:11010",
]
rpc_portal = "127.0.0.1:15888"
[network_identity]
network_name = "my-network"
network_secret = "change-me-to-something-strong"
[[peer]]
uri = "tcp://<PUBLIC_NODE_IP>:11010"
[flags]
dev_name = "easytier0"
enable_ipv6 = true
field สำคัญ:
instance_id — ต้องไม่ซ้ำกันในแต่ละโหนด (ใช้แยกโหนดในเครือข่ายเดียวกัน)ipv4 / dhcp — กำหนด IP เอง หรือให้ EasyTier จ่ายให้อัตโนมัติlisteners — พอร์ตที่เปิดรับการเชื่อมต่อเข้ามา ถ้าเป็นเครื่องหลัง NAT ที่ไม่มี public IP สามารถปล่อยว่าง [] ได้ เพราะจะเป็นฝ่ายเชื่อมออกไปหา peer เท่านั้น[[peer]] — โหนดปลายทางที่จะเชื่อมออกไปหาตอนเริ่มทำงาน (ใส่ได้หลายบล็อกถ้าต้องการต่อหลายโหนด)rpc_portal — พอร์ตสำหรับ easytier-cli เรียก RPC เข้ามาคุยกับ daemonรันด้วยพารามิเตอร์ CLI ปกติก่อนก็ได้ ระบบจะพิมพ์ config ที่ใช้งานจริงออกมาทาง log ให้คัดลอกไปเก็บเป็นไฟล์ .toml ภายหลังได้เช่นกัน
ทั้ง openSUSE, Ubuntu และ Arch ใช้ systemd เหมือนกัน จึงตั้งค่าได้ด้วยไฟล์ unit เดียวกัน
สร้างไฟล์ /etc/systemd/system/easytier.service:
[Unit]
Description=EasyTier Mesh VPN
After=network.target syslog.target
Wants=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/easytier-core -c /etc/easytier/config.toml
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
จากนั้นเปิดใช้งาน:
sudo systemctl daemon-reload
sudo systemctl enable --now easytier
sudo systemctl status easytier
ดู log แบบ real-time เวลามีปัญหา:
journalctl -u easytier -f
ถ้าโหนด B มองเห็น subnet 10.1.1.0/24 (เช่น LAN ทั้งวงที่บ้านหรือห้อง lab) และอยากแชร์ให้โหนดอื่นในเครือข่าย EasyTier เข้าถึงได้ ใช้ flag -n:
sudo easytier-core -i 10.144.144.2 -n 10.1.1.0/24
โหนดอื่นในเครือข่ายจะได้ route ไปยัง subnet นี้อัตโนมัติ ตรวจสอบด้วย:
easytier-cli route # คอลัมน์ proxy_cidrs จะโชว์ subnet ที่ถูกแชร์
ping 10.1.1.2 # ทดสอบเข้าถึงเครื่องใน subnet ที่แชร์
EasyTier ทำหน้าที่เป็น WireGuard server ได้ ทำให้อุปกรณ์ที่มีแค่ WireGuard client (เช่นมือถือ) เข้าร่วมเครือข่ายได้โดยไม่ต้องติดตั้ง EasyTier เอง
# ฟัง 0.0.0.0:11013 และใช้ subnet 10.14.14.0/24 สำหรับ WireGuard client
sudo easytier-core -i 10.144.144.1 --vpn-portal wg://0.0.0.0:11013/10.14.14.0/24
ดึง config สำหรับ WireGuard client:
easytier-cli vpn-portal
นำ config ที่ได้ไปแก้ Interface.Address และ Peer.Endpoint ให้ตรงกับ IP ที่ต้องการ แล้ว import เข้าแอป WireGuard บนมือถือได้ทันที
Could not find protoc ตอน compile จาก source
ขาดตัว Protocol Buffers compiler — ติดตั้งตามแต่ละ distro:
sudo zypper install protobuf # openSUSE
sudo apt install protobuf-compiler # Ubuntu
sudo pacman -S protobuf # Arch
ถ้ายังหาไม่เจอ ให้ set export PROTOC=$(which protoc) ก่อนรัน cargo install อีกครั้ง
ping ไม่ผ่านทั้งที่ peer เชื่อมกันแล้ว มักเป็นเพราะ firewall บล็อก incoming traffic ตรวจสอบและเปิด rule ให้พอร์ตที่ใช้ (ดีฟอลต์ TCP/UDP 11010)
เชื่อมต่อ P2P ไม่สำเร็จเลย ต้อง relay ตลอด
มักเจอในกรณี symmetric NAT ทั้งสองฝั่ง ตรวจ NAT type ด้วย easytier-cli peer ถ้าเป็นไปได้ให้ตั้งค่า port forwarding ที่ router หรือใช้ IPv6 ช่วย หรือพิจารณา self-host public shared node ที่มี public IP แน่นอนไว้เป็น fallback
Service ไม่ยอม start
เช็ก log ด้วย journalctl -u easytier -f ส่วนมากเกิดจาก path ของ binary หรือ config file ผิด หรือรันโดยไม่มีสิทธิ์ root (ต้องมีสิทธิ์จัดการ network interface)
EasyTier เหมาะกับใครที่อยากเชื่อมเครื่องหลายที่เข้าด้วยกันเป็น overlay network เดียว โดยไม่ต้องพึ่ง coordination server ของบริษัทไหน ติดตั้งง่ายที่สุดด้วยสคริปต์อัตโนมัติหรือ pre-built binary ส่วนใครอยากได้เวอร์ชันล่าสุดหรือ custom build ก็ compile จาก source เองได้ในทุก distro เพียงแค่ต้องเตรียม protobuf/protoc ไว้ก่อน สำหรับการใช้งานจริงระยะยาวแนะนำให้ย้ายจาก CLI flag ไปเป็น config.toml แล้วตั้งเป็น systemd service เพื่อให้เริ่มทำงานอัตโนมัติทุกครั้งที่ boot