OpenWrt 部署 EasyTier 进行异地组网
一、前言
本人在研究使用内网穿透的过程中,先后使用了 frp 穿透和 ZeroTier 虚拟局域网组网两种方案,该两种方案各有优缺点。
frp 稳定但是需要公网节点中转,上下行带宽受节点限制,并且内网端口暴露繁琐且内网端口暴露至公网有一定风险。ZeroTier 解决了 frp 所展现的一些问题,得益于其优秀的算法,在很多时候可以对内网打洞成功,建立 p2p 直连隧道,并且在成功组建虚拟内网后能够安全暴露内网节点所有端口,通信流量也是加密的,保证安全。但 ZeroTier 由于其依赖在海外的根服务器,在严格对称型 NAT 环境下,通信环境需要经中继服务器转发,延迟暴增 400ms; 虽然可以通过搭建 Moon 服务器加速中继,但虚拟局域网的解析依旧取决于根服务器,还是会影响到组网的稳定性。
Easytier 可以看作 ZeroTier 的国内进阶版本,它拥有类似 ZeroTier 的 p2p 组网与虚拟局域网能力,能实现设备间的点对点能力和打洞失败下的服务端自动转发。其核心优势在于完全开源且去中心化,无需依赖中心服务器,所有节点平等独立,都可以参与转发和组网。且支持多种组网协议(如 TCP/UDP/WireGuard 等)以应对复杂的网络环境,同时多路径支持,可以自动切换健康链路,提升稳定性,其流量自动加密保证安全性。在保证连接灵活性的同时,极大降低了私有化部署和跨网通信的复杂度。
二、前置准备
1、环境准备
- 固件版本:OpenWrt 24.10.3
- 硬件选择: x86 架构 J3160 4G RAM
2、OpenWrt EasyTier 软件包准备
查看 OpenWrt 架构:
输入:
cat /etc/os-release | grep ARCH
输出:
root@OpenWrt:~# cat /etc/os-release | grep ARCH
OPENWRT_ARCH="x86_64"
可以进入 luci-app-easytier 的 Release 下载对应架构和系统版本预编译的软件包或是 frok 到自己的仓库使用 Github action 自动编译。本文选择使用 Github action 自动编译软件包,本文以 2.5.0 版本为例。OpenWrt 中依赖 kmod-tun 需要先在系统软件包里安装好。
首先 frok 到自己的仓库中,修改 .github/workflows/build.yml 在 jobs.build.strategy 中修改 arch 和 sdk 来匹配对应架构和 OpenWrt 版本。建议 arch 仅保留所需架构以节约编译时间。
如本文中的 x86 架构,OpenWrt 24.10.3 版本,build.yml 如下所示:
yaml
jobs:
build:
name: Build ${{ matrix.arch }}-${{ matrix.sdk }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
arch:
- x86_64
sdk:
- 24.10.3
然后到 action 中进行编译:

如下图所示填写 Release 版本号进行编译:

大约等待 10 分钟到 20 分钟左右后,得到编译完成的软件包,下载其压缩包:

3、安装 EasyTier 软件包
下载的压缩包内有以下三个文件:

easytier_2.5.0_x86_64.ipk, luci-app-easytier_2.5.0-r2_all.ipk, luci-i18n-easytier-zh-cn_26.018.35391~4534446_all.ipk
其中,easytier_2.5.0_x86_64.ipk 为 EasyTier 二进制文件,需要在 EasyTier 插件内上传;luci-app-easytier_2.5.0-r2_all.ipk 为 OpenWrt EasyTier 插件,luci-i18n-easytier-zh-cn_26.018.35391~4534446_all.ipk 为中文插件,二者需要在 OpenWrt 软件包页面安装。
在 OpenWrt 文件传输页面上传插件和中文包,上传路径为 /tmp/upload/:

在上传文件列表下点击安装:

或是在软件包安装页面中填入对应路径名称:/tmp/upload/luci-app-easytier_2.5.0-r2_all.ipk, /tmp/upload/luci-i18n-easytier-zh-cn_26.018.35391~4534446_all.ipk 后进行安装:

刷新 OpenWrt 管理页面后,在 VPN 栏目下能够看到 EasyTier 的管理页面,然后在此处上传 EasyTier 二进制文件:

同时,也可以在 github.com/EasyTier/EasyTier Release 页面下载 EasyTier 二进制文件(或直接 .zip)进行上传,与自行编译的 .ipk 文件二选一。
三、EasyTier 设置
1、OpenWrt EasyTier 设置


在 EasyTier 基本设置中,勾选启用 ,启动方式 选择为 Web 配置,Web 服务器地址 可以设置为:<tcp 或 udp>://<ip 地址>:<端口号>/<用户名>(协议可选 tcp 或 udp 但需要与下方的 Web 设置保持一致)。TCP/UDP , WSS , WS 端口号可自行设置不同端口,但需要在接下来的 EasyTier 网络设置中的TCP/UDP , WSS , WS 端口号保持一致。
在自建 Web 控制台中,勾选启用 ,监听协议 选择与上方Web 服务器地址 中的协议保持一致,服务端口 与上方Web 服务器地址 中的端口号保持一致。API 端口 与 Web 页面端口 需保持一致。
保存设置并应用。
可看到 EasyTier 正在运行。

点击下方的 Web 控制台即可进入 Web 页面。

在注册页面,使用在Web 服务器地址 中的用户名注册,若下方的验证码无法加载,则检查API 端口 与 Web 页面端口 是否保持一致。
注册并登录,进入 Web 页面后进入设备列表,点击设备右上角的"齿轮"进入设置页面,创建网络。


创建网络之后,在网络设置页面:

虚拟 IPV4 地址 一栏可以自定义本设备分配的 ip 地址也可以勾选 DHCP 选项自动分配。
网络名称 设置为自己所需网络,同时设置该网络名称下的网络密码,请设置复杂密码,不然其他用户也可以通过你的网络名称和密码加入你的网络中。
网络方式 默认为公共服务器,但是现在的 EasyTier 的公共服务器已经挂了,无法使用。如果你的 OpenWrt 拥有公网 IP 地址,可以使用独立模式,将本 OpenWrt 设备作为公网节点。若是想通过云服务器搭建 EasyTier 服务节点,请见下一章节。

展开该网络的高级设置 ,在本设置中,若是需要通过 OpenWrt 子网代理所处内网(在外网环境下可以直接通过内网 IP 地址访问内网设备,实现无缝流转内外网环境,且无需在每台内网设备中配置 EasyTier, 通过单台设备代理安全向外暴露整个内网环境),请勾选系统转发 选项,并在下方的子网代理CIDR 填写对应的内网 IP 段。在监听地址 一栏,默认端口如上图所示,tcp 和 udp 必填,wg 可选,请将端口与 EasyTier 插件中设置的TCP/UDP , WSS , WS 端口号保持一致,OpenWrt 系统在防火墙自动放行以上端口,使其能够对 EasyTier 组网的不同协议进行连接和转发。

同时,如果只是需要 OpenWrt 作为一个客户端加入网络,无需开启系统转发 ,也无需添加监听地址。
在完成上述设置后,运行网络。

2、云服务端 EasyTier 设置(以 Linux 为例)
a、服务器节点模式
本文云服务端环境如下:
__wgliliiligw_, gudi@VM-0-14-rockylinux
_williiiiiiliilililw, -----------------------
_%iiiiiilililiiiiiiiiiii_ OS: Rocky Linux 9.7 (Blue Onyx) x86_64
.Qliiiililiiiiiiililililiilm. Host: CVM (3.0)
_iiiiiliiiiiililiiiiiiiiiiliil, Kernel: Linux 5.14.0-570.58.1.el9_6.x86_64
.lililiiilililiiiilililililiiiii, Uptime: 35 days, 17 hours, 41 mins
_liiiiiiliiiiiiiliiiiiF{iiiiiilili, Packages: 724 (rpm)
jliililiiilililiiili@` ~ililiiiiiL Shell: bash 5.1.8
iiiliiiiliiiiiiili>` ~liililii Display (default): 3440x1440 in 39"
liliiiliiilililii` -9liiiil Cursor: Adwaita
iiiiiliiliiiiii~ "4lili Terminal: /dev/pts/0
4ililiiiiilil~| -w, )4lf CPU: Intel(R) Xeon(R) Platinum 8255C (4) @ 2.49 GHz
-liiiiililiF' _liig, )' GPU: Cirrus Logic GD 5446
)iiiliii@` _QIililig, Memory: 1.61 GiB / 3.63 GiB (44%)
)iiii>` .Qliliiiililw Swap: Disabled
)<>~ .mliiiiiliiiiiil, Disk (/): 11.57 GiB / 39.26 GiB (29%) - ext4
_gllilililiililii~ Local IP (eth0): 10.0.0.14/22
giliiiiiiiiiiiiT` Locale: en_US.UTF-8
-^~$ililili@~~'
在 EasyTier Release 发行页面 寻找对应架构的预编译包,下载至本地:
bash
wget -O easytier-linux-x86_64.zip <link>
# 例如:wget -O easytier-linux-x86_64.zip https://github.com/EasyTier/EasyTier/releases/download/v2.5.0/easytier-linux-x86_64-v2.5.0.zip
本文将 EasyTier 安装至 /opt 目录,解压软件包,并将软件包移动至 /opt 目录:
bash
sudo unzip easytier-linux-x86_64.zip && sudo mv easytier-linux-x86_64 /opt
进入目录:
bash
cd /opt/easytier-linux-x86_64
使用命令:
bash
sudo easytier-core -i <指定虚拟网的 IP 地址>
# 例如:sudo easytier-core -i 10.1.1.1
该节点启动后会默认监听以下端口,请在防火墙处放行所需端口:
| 协议 | 默认端口 |
|---|---|
| TCP | 11010 (TCP) |
| UDP | 11010 (UDP) |
| WebSocket | 11011 (TCP) |
| WebSocket SSL | 11012 (TCP) |
| WireGuard | 11011 (UDP) |
| QUIC | 11012 (UDP) |
| FakeTCP | 11013 |
若仅将此节点作为服务器而不加入其他网络则配置已完成,其他客户端连接该服务器的地址为:tcp://<公网 IP>:11010.
任何用户都可以使用该服务节点,但用户之间的网络独立互不可见。
其余配置请见:EasyTier 去中心化组网
b、服务器节点加入网络
若需要将此云服务器作为服务端的同时也作为客户端加入(使云服务器具有反向代理内网设备的能力),可以通过运行以下命令加入:
bash
sudo easytier-core \
-i <指定虚拟网的 IP 地址> \
--hostname <自定义设备名称> \
--network-name <网络名称> \
--network-secret <网络密码> \
-l tcp:<tcp 自定义端口> -l udp:<udp 自定义端口> -l wg:<wireguard 自定义端口>
c、配置 Linux 自启动服务
在支持 systemd 的 Linux 发行版中,可以通过以下方式将服务配置为随系统启动:
使用 root 权限创建服务文件 /etc/systemd/system/easytier.service:
bash
sudo nano /etc/systemd/system/easytier.service
写入以下内容:
bash
[Unit]
Description=EasyTier Service
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
# 请注意修改 easytier-core 为你实际的二进制文件路径
ExecStart=/opt/easytier-linux-x86_64/easytier-core \
-i <指定虚拟网的 IP 地址> \
--hostname <自定义设备名称> \
--network-name <网络名称> \
--network-secret <网络密码> \
-l tcp:<tcp 自定义端口> -l udp:<udp 自定义端口> -l wg:<wireguard 自定义端口>
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
完成文件编写后,执行以下命令使服务生效:
bash
# 重载 Systemd 配置
sudo systemctl daemon-reload
# 设置开机自启并立即启动
sudo systemctl enable --now easytier
# 查看运行状态
sudo systemctl status easytier
记得在防火墙放行自定义的端口,即可加入网络。
启动和停止服务可以使用以下命令:
bash
sudo systemctl start easytier.service
sudo systemctl stop easytier.service
3、客户端 EasyTier 设置
在 EasyTier 发行页面 下载对应客户端版本,同理创建一个网络:

设置虚拟网络 IP 地址 、网络名称 、网络密码 和服务器地址。

高级设置中的子网代理 和监听地址根据自身所需配置,设置方法同上。
运行网络即可加入网络。
四、结语
EasyTier 给虚拟局域网组网提供了一个更加灵活的方案。此方案可以与 frp 一起作为用户的内网穿透方案:EasyTier 负责灵活组网、p2p 直连,frp 提供稳定可靠的内网穿透隧道。
在成本上,EasyTier 在拥有公网 IP 设备的情况下可以直接省下租赁云服务器的费用,并且其去中心化组网的思想模糊了服务端和客户端之间的界限,使 EasyTier 可以拥有一个高可用的"蛛丝网络"。
版权声明: 本文为博主「张火火isgudi」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接: https://www.cnblogs.com/zbyisgudi/p/19901551