/static/codemoomoo2.png

EasyTier: คู่มือติดตั้งและใช้งาน Mesh VPN สำหรับเชื่อมต่อเครือข่ายข้าม NAT

ครอบคลุมการติดตั้งบน openSUSE Tumbleweed, Ubuntu และ Arch Linux


Table of Contents


What is EasyTier

EasyTier เป็น mesh VPN แบบ decentralized เขียนด้วย Rust บน Tokio framework จุดต่างจาก VPN ทั่วไปคือไม่มี server กลางที่ทำหน้าที่ควบคุมเครือข่าย โหนดทุกตัวมีสถานะเท่าเทียมกัน สามารถเชื่อมต่อกันโดยตรงแบบ P2P ได้ทันทีที่มองเห็นกัน

คุณสมบัติหลัก:

โครงการนี้อยู่ในกลุ่มเดียวกับ ZeroTier และ Tailscale แต่เป็น open source เต็มรูปแบบ (LGPL-3.0) และ self-host ได้ทั้งระบบโดยไม่ต้องพึ่ง coordination server ของบริษัทใดบริษัทหนึ่ง


How It Works

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 ตลอดเวลา


Use Cases

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


Installation

มีวิธีติดตั้งหลัก 3 แบบในทุก distro:

  1. สคริปต์ติดตั้งอัตโนมัติ (แนะนำสำหรับผู้เริ่มต้น ใช้ได้ทุก distro ที่เป็น Linux)
  2. Build จาก source ด้วย cargo (ได้เวอร์ชันล่าสุดจาก main branch แต่ต้องมี build dependencies)
  3. ดาวน์โหลด pre-built binary จากหน้า Releases (ไม่ต้อง compile เลย)
# วิธีที่ 1: สคริปต์ติดตั้งอัตโนมัติ (ใช้ได้ทุก distro)
curl -fsSL "https://github.com/EasyTier/EasyTier/blob/main/script/install.sh?raw=true" | sudo bash -s install

ด้านล่างนี้คือรายละเอียดเฉพาะแต่ละ distro สำหรับวิธีที่ 2 และ 3

openSUSE Tumbleweed

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 ก่อน จะเจอ error Could not find protoc ตอน compile crate prost-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

Ubuntu

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/ ได้เลย

Arch Linux

วิธีที่ง่ายที่สุด — ใช้ 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

Basic Usage

เชื่อมต่อผ่าน Shared Node (ง่ายที่สุด ไม่ต้องมี public IP)

รันคำสั่งเดียวกันบนทุกโหนด ใช้ --network-name และ --network-secret เดียวกันเป็นตัวระบุเครือข่าย:

sudo easytier-core -d --network-name mynet --network-secret mysecret -p tcp://<SharedNodeIP>:11010

Decentralized (กำหนด IP เอง ไม่พึ่ง shared node)

# โหนดแรก
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      # ทดสอบเชื่อมต่อ

Configuration File

แทนที่จะรันด้วย 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 สำคัญ:

รันด้วยพารามิเตอร์ CLI ปกติก่อนก็ได้ ระบบจะพิมพ์ config ที่ใช้งานจริงออกมาทาง log ให้คัดลอกไปเก็บเป็นไฟล์ .toml ภายหลังได้เช่นกัน


Systemd Service

ทั้ง 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

Subnet Proxy

ถ้าโหนด 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 ที่แชร์

WireGuard Integration

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 บนมือถือได้ทันที


Troubleshooting

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)


Summary

EasyTier เหมาะกับใครที่อยากเชื่อมเครื่องหลายที่เข้าด้วยกันเป็น overlay network เดียว โดยไม่ต้องพึ่ง coordination server ของบริษัทไหน ติดตั้งง่ายที่สุดด้วยสคริปต์อัตโนมัติหรือ pre-built binary ส่วนใครอยากได้เวอร์ชันล่าสุดหรือ custom build ก็ compile จาก source เองได้ในทุก distro เพียงแค่ต้องเตรียม protobuf/protoc ไว้ก่อน สำหรับการใช้งานจริงระยะยาวแนะนำให้ย้ายจาก CLI flag ไปเป็น config.toml แล้วตั้งเป็น systemd service เพื่อให้เริ่มทำงานอัตโนมัติทุกครั้งที่ boot