EasyTier-Edge 部署与客户端配置指南
categories: 技术 tags: VPNEasyTier-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权限是必须的。如果只给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,说明网络已经互通。

四、后续更新
上游项目有更新时:
- 在 GitHub 上执行 Sync fork
- GitHub Actions 会自动重新编译和部署
GitHub Secrets 中的配置不需要重复设置。