跨平台的 ECH Workers 代理客户端,支持 Windows、macOS 和 Linux(ARM/x86),提供图形界面和命令行两种使用方式。
chn_ip_v6.txt)支持 IPv4/IPv6 双栈环境下的智能分流
智能 IP 列表管理
分流逻辑优化
-routing 参数默认值改为 global(全局代理)GUI 模式不受影响,仍使用配置的默认值
参数说明完善
从 GitHub Releases 下载对应平台的压缩包:
ECHWorkers-windows-amd64.zipECHWorkers-darwin-amd64.zipECHWorkers-darwin-arm64.zipECHWorkers-linux-amd64.tar.gzECHWorkers-linux-arm64.tar.gzECHWorkers-linux-amd64-softrouter.tar.gzECHWorkers-linux-arm64-softrouter.tar.gz解压文件
bash
# Windows: 解压到任意目录
# macOS/Linux: 解压到 /usr/local/bin 或自定义目录
tar -xzf ECHWorkers-linux-amd64.tar.gz
设置执行权限(Linux/macOS)
bash
chmod +x ech-workers
chmod +x ECHWorkersGUI # 如果使用 GUI
运行程序
ECHWorkersGUI.exe 启动 GUI,或运行 ech-workers.exe 使用命令行./ECHWorkersGUI 启动 GUI,或运行 ./ech-workers 使用命令行注意: 预编译版本已包含所有依赖,无需安装 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
使用任务计划程序:
1. 打开"任务计划程序"
2. 创建基本任务
3. 设置触发器为"计算机启动时"
4. 操作选择启动程序:ech-workers.exe
5. 添加参数:-f your-worker.workers.dev:443 -l 127.0.0.1:30001
启动代理后,配置应用程序使用 SOCKS5 代理:
127.0.0.1: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:30001
Windows (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)点击"保存"保存当前配置
选择分流模式
不改变代理: 不设置系统代理,手动配置
启动代理
点击"停止"按钮停止代理服务
设置系统代理
勾选"开机启动"复选框,程序会在系统启动时自动运行并启动代理。
# 通过 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
# 监听所有网络接口(推荐)
./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
问题: 程序无法下载中国 IP 列表
解决方案: 1. 检查网络连接,确保能够访问 GitHub 2. 手动下载 IP 列表文件: ```bash # 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" ``` 3. 将文件放在程序目录下,程序会自动使用
问题: GUI 提示找不到 ech-workers 可执行文件
解决方案:
1. 确保已编译 Go 程序:
bash
go build -o ech-workers ech-workers.go
2. 确保 ech-workers 与 GUI 在同一目录
3. 检查文件执行权限(Linux/macOS):
bash
chmod +x ech-workers
问题: Windows 11 系统代理设置失败
解决方案:
1. 确保以管理员权限运行程序
2. 检查防火墙设置
3. 程序会自动使用正确的代理格式(127.0.0.1:端口)
问题: Linux 不支持自动设置系统代理
解决方案:
- 在系统设置中配置 SOCKS5 代理为 127.0.0.1:端口
- 或使用环境变量:
bash
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
问题: 软路由重启后代理服务未启动
解决方案:
1. 检查启动脚本权限:
bash
chmod +x /etc/init.d/ech-workers
2. 确保服务已启用:
bash
/etc/init.d/ech-workers enable
3. 检查系统日志:
bash
logread | grep ech-workers
ECH 是 TLS 1.3 的扩展功能,用于加密 TLS 握手中的 SNI(服务器名称指示),提供更强的隐私保护。这是本程序的核心功能,需要 Go 1.23+ 支持。
程序会自动从 mayaxcn/china-ip-list 下载完整的中国 IP 列表,用于"跳过中国大陆"分流模式。
chn_ip.txt - 包含约 8000+ 个 IPv4 地址段chn_ip_v6.txt - 包含完整的中国 IPv6 地址段列表文件保存在程序目录,如果文件不存在或为空,程序会自动下载。
分流判断在 Go 核心程序中实现,使用高效的二分查找算法:
networksetup 命令设置所有网络服务的 SOCKS 代理配置文件保存在:
- Windows: %APPDATA%\ECHWorkersClient\config.json
- macOS: ~/Library/Application Support/ECHWorkersClient/config.json
- Linux: ~/.config/ECHWorkersClient/config.json
本项目的客户端和 Go 核心程序均基于 CF_NAT 的原始代码开发。
本项目基于 CF_NAT 的原始代码开发。
欢迎提交 Issue 和 Pull Request!
注意: 本项目仅供学习和研究使用,请遵守当地法律法规。
$ claude mcp add ech-wk \
-- python -m otcore.mcp_server <graph>