OpenWrt 部署 EasyTier 进行异地组网

OpenWrt 部署 EasyTier 进行异地组网

一、前言

本人在研究使用内网穿透的过程中,先后使用了 frp 穿透和 ZeroTier 虚拟局域网组网两种方案,该两种方案各有优缺点。

frp 稳定但是需要公网节点中转,上下行带宽受节点限制,并且内网端口暴露繁琐且内网端口暴露至公网有一定风险。ZeroTier 解决了 frp 所展现的一些问题,得益于其优秀的算法,在很多时候可以对内网打洞成功,建立 p2p 直连隧道,并且在成功组建虚拟内网后能够安全暴露内网节点所有端口,通信流量也是加密的,保证安全。但 ZeroTier 由于其依赖在海外的根服务器,在严格对称型 NAT 环境下,通信环境需要经中继服务器转发,延迟暴增 400ms; 虽然可以通过搭建 Moon 服务器加速中继,但虚拟局域网的解析依旧取决于根服务器,还是会影响到组网的稳定性。

Easytier 可以看作 ZeroTier 的国内进阶版本,它拥有类似 ZeroTier 的 p2p 组网与虚拟局域网能力,能实现设备间的点对点能力和打洞失败下的服务端自动转发。其核心优势在于完全开源且去中心化,无需依赖中心服务器,所有节点平等独立,都可以参与转发和组网。且支持多种组网协议(如 TCP/UDP/WireGuard 等)以应对复杂的网络环境,同时多路径支持,可以自动切换健康链路,提升稳定性,其流量自动加密保证安全性。在保证连接灵活性的同时,极大降低了私有化部署和跨网通信的复杂度。

二、前置准备

1、环境准备

  1. 固件版本:OpenWrt 24.10.3
  2. 硬件选择: 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

相关推荐
一个风轻云淡4 小时前
GCC 和 GDB命令简单解读
java·linux·前端
爱跳舞的烤冷面4 小时前
Linux篇——网络编程
网络
H.莓飛4 小时前
【数据结构】二叉树_OJ题
linux·开发语言·数据结构·算法
资料库014 小时前
Linux 8个常见运维故障排查
java·linux·运维
Knight_AL5 小时前
基于 Netty 实现的 WebSocket 服务端
网络·websocket·网络协议
机核研创社5 小时前
睡裤明橡筋自动化选型指南与落地四步走
运维·自动化
志栋智能5 小时前
超自动化运维,告别复杂系统的新范式
运维·自动化
零基础1235 小时前
Ubuntu 常用命令汇总
linux·运维·开发语言
Android系统攻城狮5 小时前
Linux Gstreamer深度解析之gst_audio_sink_get_type调用流程与实战(六十五)
linux·运维·服务器·音视频·gstreamer音视频·音视频进阶·gstreamer音视频进阶
xiaoqiMikko5 小时前
Linux 实战(一):CentOS 7、Rocky 9、Ubuntu 24.04 三台真机实测 —— 认清系统、换源、装包的版本坑
linux·centos