EasyTier 公共节点频繁掉线、高峰期带宽拥塞、数据流经第三方服务器存在隐私风险——这些问题唯一的根治方案,就是拥有一台完全属于自己的 EasyTier 节点。本文将以 Docker Compose 为核心工具,从头演示在 Linux 服务器上部署带 Web 管理后台的私有 EasyTier 节点的完整流程。全程只需复制粘贴命令,无需 Docker 或 Linux 基础。
一、技术栈简介
| 组件 | 作用 |
|---|---|
| Docker | 容器化运行时,将服务与环境依赖打包为独立单元,消除”在我机器上能跑”的问题 |
| Docker Compose | 多容器编排工具,通过 YAML 文件定义服务关系,一条命令完成全部容器的启动与停止 |
| EasyTier | 去中心化 SD-WAN 组网工具,支持 P2P 打洞与中继转发,使分布在不同网络中的设备互联互通 |
| Watchtower | Docker 镜像自动更新工具,定时拉取最新镜像并重启容器,保持服务版本最新 |
二、准备工作
2.1 服务器要求
- 配置:1 核 CPU / 2 GB 内存即可满足基本使用
- 系统:Ubuntu 20.04 / 22.04 或 Debian 11+
- 网络:必须具备公网 IPv4 地址(腾讯云轻量、阿里云 ECS 等均可)
2.2 端口放行(重要)
部署前需在云服务器控制台的安全组/防火墙中放行以下端口:
| 端口 | 协议 | 用途 |
|---|---|---|
| 12121 | TCP | Web 管理面板(浏览器访问) |
| 21212 | UDP | 配置下发服务(设备注册连接用) |
| 11010 | TCP + UDP | EasyTier 节点通信端口(Peer 之间的组网流量) |
其中 11010 是 easytier-core 的默认监听端口。如果后续在 Web 面板中修改了监听端口,需同步更新防火墙规则。如果未放行此端口,其他节点将无法与你的服务器建立 P2P 连接或中继连接。
2.3 SSH 客户端
Windows 用户可使用 Termius、FinalShell 或系统自带终端;macOS / Linux 用户直接使用终端即可。
三、第一步:连接服务器
通过 SSH 登录服务器:
ssh root@你的服务器IP
登录后更新系统软件包:
apt update && apt upgrade -y
四、第二步:安装 Docker 与 Docker Compose
4.1 一键安装 Docker
curl -fsSL https://get.docker.com | bash
执行完成后验证:
docker --version
预期输出:Docker version 27.x.x 或更高。
4.2 启动并设为开机自启
systemctl enable docker
systemctl start docker
4.3 验证 Docker Compose
docker compose version
预期输出:Docker Compose version v2.x.x。注意新版本命令为 docker compose(空格),而非旧版的 docker-compose(连字符)。
五、第三步:理解部署架构
本方案共启动三个容器,拓扑关系如下:
┌──────────────────────────────────────────────────┐
│ 你的服务器 │
│ │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ easytier- │ │ easytier │ │ watchtower │ │
│ │ web │ │ (core) │ │ │ │
│ │ │ │ │ │ │ │
│ │ :12121 TCP │ │ 虚拟组网 │ │ 自动更新 │ │
│ │ Web 管理页 │◄─┤ 节点服务 │ │ Docker镜像 │ │
│ │ │ │ │ │ │ │
│ │ :21212 UDP │ │ :11010 │ │ │ │
│ │ 配置下发 │──┤ 对等通信 │ │ │ │
│ └────────────┘ └────────────┘ └────────────┘ │
│ ▲ │
│ │ 浏览器访问 http://IP:12121 │
└───────┼───────────────────────────────────────────┘
│
┌────┴────┐
│ 你的电脑 │
└─────────┘
容器一:easytier-web
提供 Web 管理后台,核心组件 easytier-web-embed 是一个全栈二进制文件,同时承载三个功能:
| 功能模块 | 端口 | 说明 |
|---|---|---|
| Web 前端 | 12121 (TCP) | 浏览器中的可视化管理界面 |
| API 后端 | 12121 (TCP) | 账号注册、验证码、数据接口 |
| 配置下发服务 | 21212 (UDP) | 设备注册与配置同步 |
容器二:easytier
EasyTier 组网核心进程 easytier-core,负责:
- 通过
/dev/net/tun创建虚拟网卡,构建二层/三层覆盖网络 - 执行 P2P NAT 穿透与中继转发
- 向配置下发服务注册并同步策略
启动参数 --config-server udp://127.0.0.1:21212/admin 中,admin 为 Web 面板中的注册用户名,需保持一致。
容器三:watchtower
可选的辅助容器。每隔 3600 秒检查一次镜像更新,自动拉取新版本并清理旧镜像。如不需要可删除此段配置。
六、第四步:编写 docker-compose.yml
6.1 创建项目目录
mkdir -p /root/ET
cd /root/ET
6.2 创建配置文件
nano docker-compose.yml
将以下完整内容粘贴进去(nano 编辑器:粘贴后按 Ctrl+O → 回车保存 → Ctrl+X 退出):
version: '3.8'
services:
# ==========================================
# 容器 1:EasyTier Web 管理后台
# 提供可视化管理界面 + API + 配置下发
# ==========================================
easytier-web:
image: easytier/easytier:latest
container_name: easytier-web
restart: always
network_mode: host
labels:
com.centurylinklabs.watchtower.enable: 'true'
entrypoint: easytier-web-embed
command:
- "-a"
- "12121" # Web 前端与 API 后端共用端口
- "-l"
- "12121" # API 监听端口
- "-c"
- "21212" # 配置下发端口 (UDP)
# ==========================================
# 容器 2:Watchtower 自动更新(可选)
# 如不需要,删除整个 watchtower 段落
# ==========================================
watchtower:
image: containrrr/watchtower
container_name: watchtower
restart: unless-stopped
environment:
- TZ=Asia/Shanghai
- WATCHTOWER_NO_STARTUP_MESSAGE
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --interval 3600 --cleanup --label-enable
# ==========================================
# 容器 3:EasyTier 组网核心
# 创建虚拟网络,提供 P2P 与中继服务
# ==========================================
easytier:
image: easytier/easytier:latest
# 国内网络慢可换 DaoCloud 镜像:
# image: m.daocloud.io/docker.io/easytier/easytier:latest
hostname: "tencent-vm"
container_name: easytier
labels:
com.centurylinklabs.watchtower.enable: 'true'
restart: unless-stopped
network_mode: host
cap_add:
- NET_ADMIN
- NET_RAW
environment:
- TZ=Asia/Shanghai
devices:
- /dev/net/tun:/dev/net/tun
volumes:
- /etc/easytier:/root
- /etc/machine-id:/etc/machine-id:ro
command: --config-server udp://127.0.0.1:21212/admin
# ↑ ↑
# 本机:配置端口 你的 Web 用户名
6.3 关键配置说明
network_mode: host—— 容器直接使用宿主机网络栈,避免 Docker NAT 导致的二次地址转换问题。EasyTier 涉及大量 P2P 与 UDP 通信,host 模式是最优选择。此模式下ports映射无效。cap_add: NET_ADMIN + NET_RAW——NET_ADMIN授予容器管理网络接口的权限(创建 TUN 虚拟网卡所需);NET_RAW允许原始套接字操作(P2P NAT 穿透所需)。/dev/net/tun—— Linux 内核 TUN/TAP 虚拟网络设备。EasyTier 通过此设备创建虚拟网卡,实现跨网络的二层互联。此项为必需配置,移除将导致容器无法启动。command: --config-server udp://127.0.0.1:21212/admin——easytier-core的启动参数。末尾的admin必须与 Web 面板中注册的用户名一致,否则设备无法正确关联。- 节点通信端口 ——
easytier-core默认监听 11010 端口(TCP + UDP)用于 Peer 间通信。部署后务必在云服务器安全组中放行此端口,否则其他节点无法连接。
七、第五步:启动服务
cd /root/ET
docker compose up -d
首次执行将从 Docker Hub 拉取镜像,耗时取决于网络状况。预期输出:
[+] Running 3/3
✔ Container easytier-web Started
✔ Container watchtower Started
✔ Container easytier Started
验证容器运行状态:
docker ps
若某容器 STATUS 显示 Restarting 或 Exited,使用以下命令查看日志定位问题:
docker logs easytier # 组网核心日志
docker logs easytier-web # Web 后台日志
八、第六步:访问 Web 管理面板
浏览器打开:
http://你的服务器IP:12121
首次部署后系统会自动创建一个默认管理员账户(用户名 admin,密码 admin)。登录后请立即修改密码。
如需创建新账户,点击 Register 注册。用户名需与 compose 文件中 command 末尾的用户名保持一致。若验证码无法加载,请检查 compose 中 -l 参数配置,并确保通过公网 IP 或域名(而非 127.0.0.1)访问面板。
九、日常维护
9.1 查看运行状态
docker ps # 查看容器运行状态
docker logs easytier # 查看组网核心日志
docker logs easytier-web # 查看 Web 后台日志
docker logs -f easytier # 实时跟踪日志(Ctrl+C 退出)
9.2 重启服务
cd /root/ET
docker compose restart # 重启全部容器
docker restart easytier # 仅重启组网核心
9.3 停止服务
cd /root/ET
docker compose down # 停止并移除全部容器(持久化配置不受影响)
9.4 手动升级
cd /root/ET
docker compose pull # 拉取最新镜像
docker compose up -d # 以新镜像重启
9.5 端口维护提醒
日常使用中需确保以下端口在云服务器安全组中保持放行状态:
- 12121 (TCP) — Web 管理面板
- 21212 (UDP) — 配置下发服务
- 11010 (TCP+UDP) — 节点通信端口(默认值,如 Web 面板中修改了监听端口则需同步更新防火墙)
十、常见问题
Q1:注册时验证码无法加载
确认 compose 中 -l 参数正确,且使用公网 IP(非 127.0.0.1)访问 Web 面板。如仍无法加载,在浏览器中手动设置 API 地址为 http://公网IP:12121。
Q2:easytier 容器反复重启,日志显示 connection refused
按以下步骤排查:
# 1. 确认 easytier-web 容器在运行
docker ps | grep easytier-web
# 2. 确认 21212 UDP 端口处于监听状态
ss -tuln | grep 21212
# 3. 确认 compose 中的用户名与 Web 注册的一致
docker inspect easytier | grep config-server
Q3:设备无法连接自建节点
逐一排查:① 安全组是否放行 21212 UDP 和 11010 TCP+UDP;② 连接命令中的用户名与密码是否与 Web 面板注册的一致;③ 连接协议为 udp://,非 tcp://。
Q4:国内服务器拉取镜像缓慢或超时
将两处 image: easytier/easytier:latest 替换为 DaoCloud 国内镜像源:
image: m.daocloud.io/docker.io/easytier/easytier:latest
Q5:不需要自动更新,如何移除 Watchtower
删除 compose 中 watchtower: 整段内容,同时删除 easytier-web 和 easytier 容器中的 labels 配置项。
十一、结语
至此,你已拥有一个完全自主可控的 EasyTier 私有节点。回顾整个部署流程:
- 安装 Docker 运行环境
- 编写
docker-compose.yml - 一条命令启动全部服务
- 通过 Web 面板管理设备与策略
私有节点意味着带宽独占、延迟可控、数据路径透明。无需依赖公共基础设施的可用性,所有流量经过你自己的服务器。
如部署中遇到本文未覆盖的问题,欢迎在评论区留言交流,或前往 EasyTier GitHub 提交 Issue。
QQ群技术交流:1017257623


