释放小七猫的分享欲

EasyTier-Edge 部署与客户端配置指南

categories: 技术 tags: VPN
@小七猫 16/10/2026

EasyTier-Edge 部署与客户端配置指南

EasyTier-Edge 是一个运行在 Cloudflare 边缘网络上的安全 WebSocket 中继,基于 Rust/WASM 实现 EasyTier 协议核心,为 EasyTier 客户端提供 P2P 打洞协调和流量中继服务。

通过这种方式,你不需要传统的服务器和公网 IP 地址,就能利用 Cloudflare 的免费资源搭建自己的 Easytier 服务器

本文将介绍如何通过 GitHub Actions 自动部署 EasyTier-Edge,以及如何在多台设备上配置 EasyTier 客户端接入该中继网络,整个流程只需一个浏览器,即可完成,不需要将代码拉取到本地。

相关链接

EasyTier-Edge 开源项目:fordes123/easytier-edge

EasyTier 官方文档:EasyTier 组网指南

一、部署 EasyTier-Edge 到 Cloudflare Workers

1.1 准备工作

在部署之前,你需要准备以下内容:

  • Cloudflare 账号(免费计划即可)
  • GitHub 账号,用于 Fork 项目仓库和运行 Actions
  • Cloudflare API Token,权限需包含 Workers Scripts: Edit

1.2 Fork 项目仓库

访问 https://github.com/fordes123/easytier-edge,点击右上角的 Fork 按钮,将项目复制到你的 GitHub 账号下。

1.3 生成服务器密钥对

EasyTier-Edge 需要一个固定的 X25519 密钥对作为中继节点的身份标识。在中继节点侧,如果未显式指定私钥,EasyTier 每次启动都会随机生成新密钥,导致客户端的公钥锁定失效。

这个私钥只能用于加密流量,不能防中间人攻击,推荐进行配置。

在网上找一个 X25519 密钥对生成工具,例如:Ed25519 / X25519 密钥生成与签名验证器 | 在线免费工具 | Elysia Tools

记录下生成结果中的:

    "publicKey": "YZF8QA8WjSc8aeETTl1AFBLREbYetV4C+MAZe/PuCHU=",
    "secretKey": "dabYyRArM2x2WRrRI1tmQczQVIiPip/hJb58X4XGd8c=",

这个密钥对要保存好,后续能用上

1.4 配置 GitHub Secrets

首先去 Cloudflare 创建 Token

创建时,选择 “Edit Cloudflare Workers” 模板即可。它会自动带上部署 Worker 所需的全部权限,包括:

权限 资源 作用
Workers Scripts Write Account 核心权限,用于上传和部署 Worker 脚本
Workers Routes Write Zone 管理 Worker 的路由(如果你绑定了自定义域名)
Workers KV Storage Write Account 管理 KV 存储(如果项目用到)
Workers Tail Read Account 查看实时日志(用于调试)
Account Settings Read Account 读取账户基础信息

注意:Workers Scripts Write 权限是必须的。如果只给 Read 权限,Wrangler 部署时会报 Authentication error 或 Invalid access token。

进入你的 Fork 仓库,依次添加以下 Secrets(位置:Settings → Secrets and variables → Actions):

Secret 名称 值
CLOUDFLARE_API_TOKEN 你的 Cloudflare API Token
CLOUDFLARE_ACCOUNT_ID 你的 Cloudflare 账户 ID
EASYTIER_NETWORKS JSON 格式的网络配置,如 [{"network_name":"office","network_secret":"你的强密码"}]
LOCAL_PRIVATE_KEY 上一步生成的私钥
LOCAL_PUBLIC_KEY 上一步生成的公钥

1.5 添加 Deploy 工作流

将 .github/workflows/ci.yml 中的内容复制一份,新建 .github/workflows/deploy.yml ,粘贴ci.yml中内容,并在尾部添加部署任务,如下所示:

name: Deploy

  ...保持不动

  deploy:
      name: Deploy to Cloudflare
      needs: verify
      runs-on: ubuntu-latest
      if: github.event_name == 'push' || github.event_name == 'workflow_dispatch'
      timeout-minutes: 20
  
      steps:
        - name: Check out repository
          uses: actions/checkout@v6
  
        - name: Set up pnpm
          uses: pnpm/action-setup@v6
  
        - name: Set up Node.js
          uses: actions/setup-node@v7
          with:
            node-version: 24
            cache: pnpm
  
        - name: Install dependencies
          run: pnpm install --frozen-lockfile
  
        - name: Install Rust toolchain
          run: rustup toolchain install 1.95.0 --profile minimal --target wasm32-unknown-unknown
  
        - name: Build WebAssembly core
          run: pnpm run build:wasm
  
        - name: Deploy Worker
          uses: cloudflare/wrangler-action@v3
          with:
            apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
            accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
            command: deploy
            secrets: |
              EASYTIER_NETWORKS
              LOCAL_PRIVATE_KEY
              LOCAL_PUBLIC_KEY
          env:
            EASYTIER_NETWORKS: ${{ secrets.EASYTIER_NETWORKS }}
            LOCAL_PRIVATE_KEY: ${{ secrets.LOCAL_PRIVATE_KEY }}
            LOCAL_PUBLIC_KEY: ${{ secrets.LOCAL_PUBLIC_KEY }}

1.6 触发部署

提交并推送修改后,GitHub Actions 会自动运行。你也可以在 Actions 页面手动触发 workflow_dispatch。

部署成功后,在 Actions 日志末尾会输出 Worker 地址,格式类似:

https://easytier-edge.<你的子域>.workers.dev

访问这个域名:

可以访问则部署成功了。此外,建议绑定自己的域名,不要用 worker URL,国内打不开。

二、客户端配置

2.1 配置文件模板

在每台需要接入的客户端上,创建 config.toml:

# 适用于 CloudFlare Workers 部署的 wss 服务端和云服务器使用二进制部署的服务端
hostname = "{你的主机名}"
instance_name = "{给这个配置/实例起个名字,方便在同一台机器上区分不同的 VPN 实例。}"
instance_id = "{UUID 格式,在同一个 VPN 网络中必须唯一。留空可自动生成。}"
dhcp = true
listeners = [
    "tcp://0.0.0.0:11010",
    "udp://0.0.0.0:11010",
    # "wg://0.0.0.0:11011",
    # "quic://0.0.0.0:11012",
    # "ws://0.0.0.0:11011/",
    # "wss://0.0.0.0:11012/",
    # "faketcp://0.0.0.0:11013",
]

# CloudFlare Workers wss 服务端 peer,最好不混用协议
[[peer]]
uri = "wss://easytier-edge.550293.xyz/"
peer_public_key = "<中继的公钥>"

# CloudFlare Workers wss 服务端必须配置
[secure_mode]
enabled = true
local_private_key = "5V0C....kMlfWY="
local_public_key = "I9zIg....VEg="

[flags]
dev_name = "et_8_5ayx"
enable_kcp_proxy = true
enable_quic_proxy = true
local_private_key = "5V0C....kMlfWY="
local_public_key = "I9zIg....VEg="

密钥对仍然可以用网页工具生成。

2.2 锁定中继公钥(推荐)

由于你使用的是公网中继(Cloudflare Workers),只开启 secure_mode 只能保证流量加密,并不能确保你连到的就是正确的中继节点。要防止连接被中间人替换,必须在客户端锁定中继的公钥:

[[peer]]
uri = "wss://easytier-edge.<你的子域>.workers.dev/"
peer_public_key = "<中继的公钥>"

这里的 peer_public_key 就是你在部署时生成的 LOCAL_PUBLIC_KEY(中继的公钥)。

2.2 启动客户端

# Linux/macOS
./easytier-core -c ./config.toml

# Windows (需要管理员权限)
.\easytier-core.exe -c .\config.toml

三、验证连接

启动客户端后,新开一个终端窗口,运行:

./easytier-cli peer

你应该能看到中继节点(peer ID 10000001)出现在列表中。如果有多个客户端在线,它们也会显示在列表中。

查看路由表:

./easytier-cli route

如果看到其他客户端的虚拟 IP,说明网络已经互通。

四、后续更新

上游项目有更新时:

  1. 在 GitHub 上执行 Sync fork
  2. GitHub Actions 会自动重新编译和部署

GitHub Secrets 中的配置不需要重复设置。