跨平台的 ECH Workers 代理客户端,支持 Windows、macOS 和 Linux(ARM/x86),提供图形界面和命令行两种使用方式。
- ✅ ECH 加密 - 基于 TLS 1.3 ECH (Encrypted Client Hello) 技术,加密 SNI 信息
- ✅ 多协议支持 - 同时支持 SOCKS5 和 HTTP CONNECT 代理协议
- ✅ 智能分流 - 三种分流模式:全局代理、跳过中国大陆、直连模式
- ✅ IPv4/IPv6 双栈 - 完整支持 IPv4 和 IPv6 地址的分流判断
- ✅ 多服务器管理 - 支持多个服务器配置,快速切换
- ✅ 一键系统代理 - 自动设置系统代理,支持分流模式
- ✅ 系统托盘 - 最小化到系统托盘,不占用任务栏
- ✅ 开机自启 - 支持 Windows 和 macOS 开机自动启动
- ✅ 高 DPI 支持 - 完美支持高分辨率显示器
- ✅ 实时日志 - 查看代理运行状态和日志
- ✅ 配置持久化 - 自动保存配置,下次启动自动加载
- ✅ 自动 IP 列表更新 - 自动下载并应用完整的中国 IP 列表(IPv4/IPv6)
- ✅ DNS 优选 - 支持自定义 DoH 服务器进行 ECH 查询
- ✅ IP 直连 - 支持指定服务端 IP,绕过 DNS 解析
- ✅ 跨平台支持 - Windows、macOS、Linux(x86_64/ARM64)
-
IPv6 完整支持
- 新增 IPv6 地址分流判断功能
- 自动下载并加载中国 IPv6 IP 列表(
chn_ip_v6.txt) - 支持 IPv4/IPv6 双栈环境下的智能分流
-
智能 IP 列表管理
- 自动检测 IP 列表文件是否存在或为空
- 文件缺失时自动从 GitHub 下载最新列表
- 支持 IPv4 和 IPv6 列表的独立管理
- 列表来源:mayaxcn/china-ip-list
-
分流逻辑优化
- 分流判断逻辑移至 Go 核心程序,性能更优
- 支持域名解析后的多 IP 地址判断
- 改进的二分查找算法,提升查询效率
-
默认行为优化
- 命令行模式下,
-routing参数默认值改为global(全局代理) - 更符合命令行用户的使用习惯
- GUI 模式不受影响,仍使用配置的默认值
- 命令行模式下,
-
参数说明完善
- 更新帮助信息,明确各参数的作用和默认值
- 添加分流模式的详细说明
- 向后兼容
- 保持与旧版本配置文件的兼容性
- 自动迁移和升级配置格式
- 平滑升级体验
- 初始版本发布
- 基础代理功能
- 图形界面支持
- 系统代理设置
从 GitHub Releases 下载对应平台的压缩包:
- Windows x64:
ECHWorkers-windows-amd64.zip - macOS Intel:
ECHWorkers-darwin-amd64.zip - macOS Apple Silicon:
ECHWorkers-darwin-arm64.zip - Linux x86_64:
ECHWorkers-linux-amd64.tar.gz - Linux ARM64:
ECHWorkers-linux-arm64.tar.gz
- Linux x86_64:
ECHWorkers-linux-amd64-softrouter.tar.gz - Linux ARM64:
ECHWorkers-linux-arm64-softrouter.tar.gz
-
解压文件
# Windows: 解压到任意目录 # macOS/Linux: 解压到 /usr/local/bin 或自定义目录 tar -xzf ECHWorkers-linux-amd64.tar.gz
-
设置执行权限(Linux/macOS)
chmod +x ech-workers chmod +x ECHWorkersGUI # 如果使用 GUI -
运行程序
- Windows: 双击
ECHWorkersGUI.exe启动 GUI,或运行ech-workers.exe使用命令行 - macOS/Linux: 运行
./ECHWorkersGUI启动 GUI,或运行./ech-workers使用命令行
- Windows: 双击
注意: 预编译版本已包含所有依赖,无需安装 Python 或任何其他软件。
首次运行"跳过中国大陆"模式时,程序会自动下载 IP 列表文件。
ech-workers 支持纯命令行运行,适合服务器环境、软路由或无图形界面场景。
ech-workers [选项]| 参数 | 说明 | 示例 |
|---|---|---|
-f |
服务端地址(必需) | -f your-worker.workers.dev:443 |
| 参数 | 默认值 | 说明 | 示例 |
|---|---|---|---|
-l |
127.0.0.1:30000 |
本地监听地址 | -l 0.0.0.0:30001 |
-token |
空 | 身份验证令牌 | -token your-token-here |
-ip |
空 | 指定服务端 IP(绕过 DNS) | -ip 1.2.3.4 |
-dns |
dns.alidns.com/dns-query |
ECH 查询 DoH 服务器 | -dns dns.alidns.com/dns-query |
-ech |
cloudflare-ech.com |
ECH 查询域名 | -ech cloudflare-ech.com |
-routing |
global |
分流模式 | -routing bypass_cn |
| 模式 | 值 | 说明 |
|---|---|---|
| 全局代理 | global |
所有流量都走代理(默认模式) |
| 跳过中国大陆 | bypass_cn |
中国 IP 直连,其他走代理 |
| 直连模式 | none |
所有流量直连,不设置代理 |
注意:
- 使用
bypass_cn模式时,程序会自动下载中国 IP 列表(IPv4/IPv6)- 如果 IP 列表文件不存在或为空,程序会自动从 GitHub 下载
- IP 列表文件保存在程序目录:
chn_ip.txt(IPv4)和chn_ip_v6.txt(IPv6)
# Windows
ech-workers.exe -f your-worker.workers.dev:443
# macOS / Linux
./ech-workers -f your-worker.workers.dev:443# 监听所有网络接口(适合软路由)
./ech-workers -f your-worker.workers.dev:443 -l 0.0.0.0:30001
# 仅监听本地(默认)
./ech-workers -f your-worker.workers.dev:443 -l 127.0.0.1:30001# 全局代理模式(默认)
./ech-workers -f your-worker.workers.dev:443 -routing global
# 跳过中国大陆模式(自动下载 IP 列表)
./ech-workers -f your-worker.workers.dev:443 -routing bypass_cn
# 直连模式
./ech-workers -f your-worker.workers.dev:443 -routing none./ech-workers \
-f your-worker.workers.dev:443 \
-l 0.0.0.0:30001 \
-token your-token \
-ip saas.sin.fan \
-dns dns.alidns.com/dns-query \
-ech cloudflare-ech.com \
-routing bypass_cn./ech-workers -h
# 或
./ech-workers --help使用 nohup:
nohup ./ech-workers -f your-worker.workers.dev:443 -l 127.0.0.1:30001 > ech-workers.log 2>&1 &使用 screen:
screen -S ech-workers
./ech-workers -f your-worker.workers.dev:443 -l 127.0.0.1:30001
# 按 Ctrl+A 然后 D 分离会话使用 systemd (推荐):
创建服务文件 /etc/systemd/system/ech-workers.service:
[Unit]
Description=ECH Workers Proxy Client
After=network.target
[Service]
Type=simple
User=your-username
WorkingDirectory=/path/to/ech-workers
ExecStart=/path/to/ech-workers -f your-worker.workers.dev:443 -l 127.0.0.1:30001 -routing bypass_cn
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target启用并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable ech-workers
sudo systemctl start ech-workers
sudo systemctl status ech-workers查看日志:
sudo journalctl -u ech-workers -f使用 PowerShell:
Start-Process -FilePath "ech-workers.exe" `
-ArgumentList "-f", "your-worker.workers.dev:443", "-l", "127.0.0.1:30001" `
-WindowStyle Hidden使用任务计划程序:
- 打开"任务计划程序"
- 创建基本任务
- 设置触发器为"计算机启动时"
- 操作选择启动程序:
ech-workers.exe - 添加参数:
-f your-worker.workers.dev:443 -l 127.0.0.1:30001
启动代理后,配置应用程序使用 SOCKS5 代理:
- 代理地址:
127.0.0.1:30001(或你指定的监听地址) - 代理类型: SOCKS5
- 端口: 30001(或你指定的端口)
Chrome/Edge:
# Linux/macOS
google-chrome --proxy-server="socks5://127.0.0.1:30001"
# Windows
chrome.exe --proxy-server="socks5://127.0.0.1:30001"Firefox:
- 设置 → 网络设置 → 手动代理配置
- SOCKS 主机:
127.0.0.1 - 端口:
30001 - SOCKS v5
Linux/macOS:
export ALL_PROXY=socks5://127.0.0.1:30001
export HTTP_PROXY=socks5://127.0.0.1:30001
export HTTPS_PROXY=socks5://127.0.0.1:30001Windows (PowerShell):
$env:ALL_PROXY="socks5://127.0.0.1:30001"
$env:HTTP_PROXY="socks5://127.0.0.1:30001"
$env:HTTPS_PROXY="socks5://127.0.0.1:30001"程序会在控制台输出运行日志,包括:
- 启动信息和 ECH 配置状态
- 分流模式加载状态
- IP 列表下载和加载信息
- 代理连接和错误信息
将输出重定向到文件:
./ech-workers -f your-worker.workers.dev:443 -l 127.0.0.1:30001 > ech-workers.log 2>&1-
配置服务器
- 点击"新增"添加服务器配置
- 填写服务地址(如:
your-worker.workers.dev:443)和监听地址(如:127.0.0.1:30001) - 可选:填写身份令牌、优选IP、DOH服务器、ECH域名等高级选项
- 点击"保存"保存当前配置
-
选择分流模式
- 全局代理: 所有流量都走代理
- 跳过中国大陆: 中国网站直连,其他网站走代理(自动下载 IP 列表)
- 不改变代理: 不设置系统代理,手动配置
-
启动代理
- 点击"启动代理"按钮启动代理服务
- 查看日志区域了解运行状态
- 点击"停止"按钮停止代理服务
-
设置系统代理
- 启动代理后,点击"设置系统代理"按钮
- 系统会自动配置代理设置
- 停止代理或关闭程序时会自动清理系统代理
- 最小化到托盘: 关闭窗口时程序会最小化到系统托盘,不会退出
- 显示窗口: 双击托盘图标或右键菜单选择"显示窗口"
- 退出程序: 右键托盘图标选择"退出"
勾选"开机启动"复选框,程序会在系统启动时自动运行并启动代理。
# 通过 SCP 上传
scp ech-workers root@192.168.1.1:/usr/bin/
# 或通过 WinSCP、FileZilla 等工具上传ssh root@192.168.1.1
chmod +x /usr/bin/ech-workers创建 /etc/init.d/ech-workers:
#!/bin/sh /etc/rc.common
START=99
STOP=10
USE_PROCD=1
start_service() {
procd_open_instance
procd_set_param command /usr/bin/ech-workers \
-f your-worker.workers.dev:443 \
-l 0.0.0.0:30001 \
-token your-token \
-routing bypass_cn
procd_set_param respawn
procd_set_param stdout 1
procd_set_param stderr 1
procd_close_instance
}设置权限:
chmod +x /etc/init.d/ech-workers/etc/init.d/ech-workers enable
/etc/init.d/ech-workers start/etc/init.d/ech-workers status
logread | grep ech-workers在 PassWall、OpenClash 等插件中配置:
- 代理类型: SOCKS5
- 服务器:
软路由的IP - 端口:
30001
通过 iKuai 的 Web 管理界面或 SSH 上传 ech-workers 到 /bin/ 目录。
创建 /etc/init.d/ech-workers.sh:
#!/bin/sh
/bin/ech-workers -f your-worker.workers.dev:443 -l 127.0.0.1:30001 -routing bypass_cn &设置权限:
chmod +x /etc/init.d/ech-workers.sh编辑 /etc/rc.local,添加:
/etc/init.d/ech-workers.sh参数说明:
--network host #网络类型一般推荐直接host
-e ARG_F="" #填写你的workers域名和端口
-e ARG_ECH="cloudflare-ech.com" #ech查询域名,一般保持默认
-e ARG_TOKEN="" #你设置的token
-e ARG_IP="visa.com" #优选IP或域名
-e ARG_L="0.0.0.0:30000" #Socks5服务器的IP和端口,0.0.0.0为全局监听
-e ARG_ROUTING="global" #分流模式,global=全局代理 bypass_cn=绕过大陆
docker运行命令模板,按照上面的说明填写,然后复制到终端运行:
docker run -d \
--name cfech \
--restart always \
--network host \
-e ARG_F="" \
-e ARG_ECH="cloudflare-ech.com" \
-e ARG_TOKEN="" \
-e ARG_IP="visa.com" \
-e ARG_L="0.0.0.0:30000" \
-e ARG_ROUTING="global" \
cirnosalt/ech-workers-docker:latest
# 监听所有网络接口(推荐)
./ech-workers -f your-worker.workers.dev:443 -l 0.0.0.0:30001 -routing bypass_cn
# 或仅监听内网接口
./ech-workers -f your-worker.workers.dev:443 -l 192.168.1.1:30001 -routing bypass_cn确保防火墙允许代理端口:
# OpenWrt
uci add firewall rule
uci set firewall.@rule[-1].name='Allow-ECH-Workers'
uci set firewall.@rule[-1].src='lan'
uci set firewall.@rule[-1].dest_port='30001'
uci set firewall.@rule[-1].proto='tcp'
uci set firewall.@rule[-1].target='ACCEPT'
uci commit firewall
/etc/init.d/firewall reload- 使用
-ip参数指定固定 IP,减少 DNS 查询 - 调整系统资源限制(如文件描述符数量)
- 考虑使用
systemd或procd管理进程
# 查看进程状态
ps | grep ech-workers
# 查看日志
logread | grep ech-workers
# 测试连接
curl --socks5 127.0.0.1:30001 http://www.google.com- Windows: Windows 10+ (Windows 11 完全支持)
- macOS: macOS 10.13+
- Linux: Ubuntu 18.04+ / Debian 10+ / CentOS 7+ (支持 x86_64 和 ARM64)
- 预编译版本: 无需额外依赖,可直接运行
- 从源码编译:
- Python 3.6+ (仅 GUI 需要)
- Go 1.23+ (仅编译时需要,ECH 功能需要此版本)
- 能够访问 GitHub (用于自动下载 IP 列表)
- 能够访问 Cloudflare Workers 服务
问题: 程序无法下载中国 IP 列表
解决方案:
- 检查网络连接,确保能够访问 GitHub
- 手动下载 IP 列表文件:
# IPv4 列表 curl -L -o chn_ip.txt "https://raw.githubusercontent.com/mayaxcn/china-ip-list/refs/heads/master/chn_ip.txt" # IPv6 列表 curl -L -o chn_ip_v6.txt "https://raw.githubusercontent.com/mayaxcn/china-ip-list/refs/heads/master/chn_ip_v6.txt"
- 将文件放在程序目录下,程序会自动使用
问题: GUI 提示找不到 ech-workers 可执行文件
解决方案:
- 确保已编译 Go 程序:
go build -o ech-workers ech-workers.go
- 确保
ech-workers与 GUI 在同一目录 - 检查文件执行权限(Linux/macOS):
chmod +x ech-workers
问题: Windows 11 系统代理设置失败
解决方案:
- 确保以管理员权限运行程序
- 检查防火墙设置
- 程序会自动使用正确的代理格式(
127.0.0.1:端口)
问题: Linux 不支持自动设置系统代理
解决方案:
- 在系统设置中配置 SOCKS5 代理为
127.0.0.1:端口 - 或使用环境变量:
export ALL_PROXY=socks5://127.0.0.1:端口
问题: 在 macOS 上运行时报错 "bad CPU type"
解决方案:
- Intel Mac 请下载
darwin-amd64版本 - Apple Silicon Mac 请下载
darwin-arm64版本
问题: GUI 无法启动,提示 PyQt5 未安装
解决方案:
# macOS
pip3 install --user PyQt5
# Windows
pip install PyQt5
# Linux (Debian/Ubuntu)
sudo apt install python3-pyqt5问题: 软路由重启后代理服务未启动
解决方案:
- 检查启动脚本权限:
chmod +x /etc/init.d/ech-workers
- 确保服务已启用:
/etc/init.d/ech-workers enable - 检查系统日志:
logread | grep ech-workers
ECH 是 TLS 1.3 的扩展功能,用于加密 TLS 握手中的 SNI(服务器名称指示),提供更强的隐私保护。这是本程序的核心功能,需要 Go 1.23+ 支持。
程序会自动从 mayaxcn/china-ip-list 下载完整的中国 IP 列表,用于"跳过中国大陆"分流模式。
- IPv4 列表:
chn_ip.txt- 包含约 8000+ 个 IPv4 地址段 - IPv6 列表:
chn_ip_v6.txt- 包含完整的中国 IPv6 地址段
列表文件保存在程序目录,如果文件不存在或为空,程序会自动下载。
分流判断在 Go 核心程序中实现,使用高效的二分查找算法:
- 域名解析: 如果目标是域名,先解析为 IP 地址
- IP 检查: 检查所有解析到的 IP(IPv4/IPv6)
- 范围匹配: 使用二分查找在 IP 列表中查找匹配
- 决策: 根据分流模式决定是否走代理
- Windows: 通过注册表设置系统代理,支持 SOCKS5 代理
- macOS: 使用
networksetup命令设置所有网络服务的 SOCKS 代理 - Linux: 暂不支持自动设置,需要手动配置
配置文件保存在:
- Windows:
%APPDATA%\ECHWorkersClient\config.json - macOS:
~/Library/Application Support/ECHWorkersClient/config.json - Linux:
~/.config/ECHWorkersClient/config.json
本项目的客户端和 Go 核心程序均基于 CF_NAT 的原始代码开发。
- 原始项目来源: CF_NAT - 中转
- Telegram 频道: @CF_NAT
- 中国 IP 列表: mayaxcn/china-ip-list
本项目基于 CF_NAT 的原始代码开发。
- Telegram 交流群: https://t.me/+ft-zI76oovgwNmRh
- GitHub Issues: 提交问题
欢迎提交 Issue 和 Pull Request!
注意: 本项目仅供学习和研究使用,请遵守当地法律法规。