EasyTier 私有虚拟网络搭建全流程
EasyTier简介
在国内复杂的网络环境中,内网穿透和异地组网始终是个棘手问题。之前折腾过 Zerotier、Tailscale 等工具的朋友可能深有体会,网络通畅时,P2P 直连体验流畅。可一旦遇到 NAT 复杂或网络波动,就不得不依赖国外中继服务器 —— 延迟飙升、速度骤降几乎成了常态。
最近接触到了国内的一个开源穿透软件EasyTier ,EasyTier是一个简单、安全、去中心化的内网穿透 SD-WAN 方案,使用 Rust 语言实现。它实现了零拷贝和全链路高性能,性能与主流组网软件相当。EasyTier 支持跨平台运行,包括 MacOS/Linux/Windows/FreeBSD/Android,未来还将支持 iOS。可执行文件静态链接,部署简单。
EasyTier的特点
- 去中心化:无需依赖中心化服务,节点平等且独立。
- 安全:支持利用 WireGuard 加密通信,也支持 AES-GCM 加密保护中转流量。
- 高性能:全链路零拷贝,性能与主流组网软件相当。
- 跨平台:支持 MacOS/Linux/Windows/FreeBSD/Android,未来将支持 iOS。
- 无公网 IP 组网:支持利用共享的公网节点组网。
- NAT 穿透:支持基于 UDP 的 NAT 穿透,在复杂的网络环境下也能建立稳定的连接。
- 子网代理(点对网):节点可以将可访问的网段作为虚拟网暴露给其他节点,允许其他节点通过这些节点访问子网。
- 智能路由:根据流量智能选择链路,减少延迟,提高吞吐量。
- TCP 支持:在 UDP 受限的情况下,通过并发 TCP 链接提供可靠的数据传输,优化性能。
- 高可用性:支持多路径和在检测到高丢包率或网络错误时切换到健康路径。
- IPV6 支持:支持利用 IPV6 组网。
安装(docker-compose)
服务端配置
创建配置目录
sudo mkdir -p /opt/easytier
创建一个docker-compose.yml和config.yaml文件:
vim /opt/easytier/docker-compose.yml
docker-compose.yml填入以下内容(注意#号标注相关提示):
services:
# 可选:自动更新镜像的watchtower
watchtower:
image: containrrr/watchtower:latest
container_name: easytier-watchtower
restart: unless-stopped
environment:
- TZ=Asia/Shanghai
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --interval 3600 --cleanup --label-enable
# easytier服务端
easytier-server:
image: easytier/easytier:latest # 国内:m.daocloud.io/docker.io/easytier/easytier:latest
container_name: easytier-server
hostname: easytier-server # 与配置文件中hostname一致
labels:
com.centurylinklabs.watchtower.enable: 'true' # 允许watchtower更新
restart: unless-stopped
network_mode: host # 必须用host模式,确保端口监听正常
cap_add:
- NET_ADMIN # 允许网络配置(如创建tun设备)
- NET_RAW
environment:
- TZ=Asia/Shanghai
devices:
- /dev/net/tun:/dev/net/tun # 提供WireGuard隧道支持
volumes:
- /opt/easytier:/root # 挂载配置目录到容器内/root
- /etc/machine-id:/etc/machine-id:ro # 保持机器标识一致
command: --config-file /root/config.yaml # 加载配置文件
config.yaml文件输入以下核心配置文件内容
# 服务端基础信息(唯一标识)
hostname = "easytier-server" # 服务端主机名(自定义,需唯一)
instance_name = "primary-server" # 实例名称(区分多个服务端)
instance_id = "f47ac10b-58cc-4372-a567-0e02b2c3d479" # 标准UUID(必填,需唯一,生成方法见下方)
ipv4 = "10.126.126.1/24" # 虚拟网络IP(建议用网段首个IP,如.1)
dhcp = false # 服务端固定IP,关闭DHCP
# 监听端口(客户端通过这些端口连接)
listeners = [
"tcp://0.0.0.0:11010", # TCP协议监听(推荐客户端优先使用)
"udp://0.0.0.0:11010", # UDP协议监听
"wg://0.0.0.0:11011" # WireGuard加密协议监听(需tun设备支持)
]
# RPC端口(0表示随机分配,服务端无需固定)
rpc_portal = "0.0.0.0:0"
# 网络标识(客户端必须完全匹配才能加入网络)
[network_identity]
network_name = "my-easytier-network" # 网络名称(自定义,如公司/项目名)
network_secret = "your-secure-secret-123" # 网络密钥(类似密码,建议复杂字符串)
# 服务端无需配置[[peer]](客户端会主动连接服务端)
# 若多服务端集群,可在此添加其他服务端的uri(如"tcp://server2-ip:11010")
在当前目录下,运行代码直接编排容器上线即可:
# 启动容器
docker-compose up -d
# 查看日志(确认启动成功)
docker logs -f easytier-server
开放防火墙端口
# 开放TCP/UDP 11010和WireGuard 11011端口
sudo ufw allow 11010/tcp
sudo ufw allow 11010/udp
sudo ufw allow 11011/udp
sudo ufw reload
# 若用云服务器(如阿里云/腾讯云),需在安全组中同步开放上述端口
客户端配置
客户端需连接服务端加入虚拟网络,配置核心是匹配服务端的网络标识,并指定服务端的连接地址。
安装配置文件docker-compose.yml与服务端一致,只需要修改和config.yaml文件
# 客户端基础信息(唯一标识)
hostname = "client-pc-01" # 客户端主机名(自定义,需唯一)
instance_name = "office-client" # 实例名称(区分多个客户端)
instance_id = "a1b2c3d4-5678-4f5e-8a9b-0c1d2e3f4a5b" # 客户端唯一UUID(与服务端不同)
ipv4 = "10.126.126.2/24" # 虚拟网络IP(与服务端同一网段,如.2、.3等)
dhcp = false # 客户端固定IP
# 客户端无需开放监听(若需被其他节点主动连接,可添加监听端口)
listeners = []
# RPC端口(随机分配)
rpc_portal = "0.0.0.0:0"
# 网络标识(必须与服务端完全一致)
[network_identity]
network_name = "my-easytier-network" # 与服务端network_name相同
network_secret = "your-secure-secret-123" # 与服务端network_secret相同
# 需连接的服务端地址(至少填写服务端的TCP/UDP地址)
[[peer]]
uri = "tcp://服务端公网IP:11010" # 替换为服务端的公网IP或域名
[[peer]]
uri = "udp://服务端公网IP:11010" # 可选,提高连接稳定性
客户端验证
日志中出现以下信息说明连接成功:
successfully connected to peer: tcp://服务端IP:11010
virtual network ip assigned: 10.126.126.2
测试虚拟网络通信,客户端执行ping 10.126.126.1(服务端虚拟 IP),能 ping 通则说明网络互通。
使用 easytier-cli peer 查看子网中的节点信息:
easytier-cli peer
输出示例:

使用 easytier-cli route 查看子网中的路由信息:
easytier-cli route
输出示例:

使用 easytier-cli node 查看本节点的信息:
easytier-cli node
输出示例:

这是windows下gui的配置情况

关闭转发
默认情况下,Easytier 的每个节点都允许为其他虚拟网提供转发服务,即使已加入一个虚拟网。若需改变此行为,可通过 --relay-whitelist 参数限定可转发的网络白名单(空格分隔的通配符列表)。当列表为空时,则不会为所有其他网络提供转发服务。例如:
easytier-core --relay-whitelist relay-all --relay-all-peer-rpc
只需设置参考白名单为空,同时仅允许转发 RPC 流量即可。
小结
用了一段时间了,从实际用下来的感受看,EasyTier 最关键的好处就是 ——特别适配咱们国内的网络环境。不管是面对复杂的 NAT 网络,穿透成功率,还是用 WireGuard 加密传输的速度和稳定性,都比那些依赖国外中继服务器的工具稳一些。
而且它是去中心化的 P2P 方案,不用怕单个服务器挂了整个网络就崩了,节点之间直接连接,还能最大程度减少延迟。另外它还支持多平台,不同设备组网特别方便。不管是个人异地办公、家里设备互联,还是小团队做内网穿透,都很合适。
感兴趣的小伙伴不妨来试试 EasyTier。