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.ymljobs.build.strategy 中修改 archsdk 来匹配对应架构和 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

相关推荐
草木红2 小时前
Docker常用命令
运维·docker·容器
姜太小白2 小时前
【Ollama】Docker部署Ollama完整指南
运维·docker·容器
佩洛君2 小时前
Ubuntu22.04系统apt换国内源
linux·运维·ubuntu
凤年徐2 小时前
Vim编辑器使用详解:多模式、常用命令与配置技巧
linux·编辑器·vim
工作log2 小时前
从 Ubuntu 22.04 到 ROS 2 Humble 完整环境搭建与 Java 控制指南
java·linux·ubuntu
七夜zippoe2 小时前
OpenClaw 浏览器自动化实战
运维·chrome·自动化·浏览器·playwright·openclaw
Giggle12182 小时前
从零解构一套校园外卖系统:架构设计、技术选型与核心难点剖析
java·运维·微服务
淮北4942 小时前
AppImage转变成APP-》ubuntu22.04
运维·服务器
D4c-lovetrain2 小时前
Linux个人心得28(OSI 7 层模型全解析)
linux·运维·网络