Skip to content

Commit f5a8964

Browse files
committed
2026-08-31 21:25:30 commit
1 parent 197464f commit f5a8964

2 files changed

Lines changed: 83 additions & 91 deletions

File tree

README.md

Lines changed: 82 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -1,90 +1,89 @@
1-
# free-proxy — 零成本私人独享代理
1+
# free-proxy — 零成本私人专属代理
22

3-
> 不用买 VPS、不用买域名、不用备案,只用 **Cloudflare 免费的 Worker**,就能部署一个私人且几乎无限流量的代理节点
3+
> 无需购买 VPS,无需注册域名,无需备案,仅借助 **Cloudflare 免费 Worker** 服务,即可部署一个专属于个人使用、流量几乎不受限的代理节点
44
55
---
66

7-
## 一、这是什么?
7+
## 一、项目简介
88

9-
`free-proxy` 是一个「客户端 + 免费中转服务」组成的私人代理方案
9+
`free-proxy` 是一套由「客户端 + 免费中转服务」构成的私人代理方案
1010

11-
- **服务端**跑在 Cloudflare Worker 上——这是 Cloudflare **免费**服务,按免费额度提供日常请求量,个人上网绰绰有余
12-
- **客户端**是桌面 / 手机上的一个小应用,负责加密、压缩、加速,并把流量交给你的 Worker 转发
11+
- **服务端**部署于 Cloudflare Worker 之上——该服务为 Cloudflare 提供的**免费**产品,其免费额度足以满足个人日常使用需求
12+
- **客户端**为运行于桌面或移动设备上的应用程序,负责数据的加密、压缩与加速处理,并通过 Worker 完成流量转发
1313

1414
<div><img alt="" src="./image/screenshot-20260821-194431.png"></div>
1515
<div><img alt="" src="./image/screenshot-20260818-164913.png"></div>
1616

17-
### 它能给你带来什么
17+
### 核心特性
1818

19-
- **免费**全部依赖 Cloudflare 免费额度,零月租、零维护成本
20-
- **独享**节点只属于你,认证密钥只在你和设备两端
21-
- **省流量**内置压缩(zstd / lz4),相同内容传得少、跑得快
22-
- **更安全**多种加密算法可选(ChaCha20-Poly1305 / Ascon-AEAD128 等),传输内容被加密
23-
- **自动挑最快的路**:内置「优选 IP」测速工具,帮你找到与 Worker 之间最快的网络路径
24-
- **全家桶通用**客户端可一键导出订阅链接,Clash / sing-box / v2rayN 等工具都能用
25-
- **WebSocket支持**:内置 WebSocket 隧道,聊天 / 推送 / 在线协作等基于 `ws://` / `wss://` 的应用同样走加密代理
26-
- **跨平台**桌面(Windows / macOS / Linux)+ 手机(Android和iOS 实验性支持)。
19+
- **零成本**全部功能依托 Cloudflare 免费额度实现,无需支付月租或维护费用
20+
- **专属独享**节点仅供个人使用,认证密钥仅存在于用户本人与设备之间
21+
- **流量优化**内置 zstd / lz4 压缩算法,有效降低传输数据量,提升访问速度
22+
- **传输加密**支持多种加密算法(ChaCha20-Poly1305Ascon-AEAD128 等),保障传输内容的安全性
23+
- **智能选路**:内置「优选 IP」测速工具,自动探测与 Worker 之间延迟最低的网络路径
24+
- **广泛兼容**客户端支持导出订阅链接,可直接用于 Clash、sing-boxv2rayN 等主流代理工具
25+
- **WebSocket 支持**:内置 WebSocket 隧道,`ws://` / `wss://` 协议下的即时通信、消息推送、协同办公等应用均可正常经由加密代理访问
26+
- **跨平台适配**支持桌面端(Windows / macOS / Linux)及移动端(实验性支持)。
2727

2828
---
2929

30-
## 二、你需要准备什么
31-
32-
1. 一个 **Cloudflare 账号**(免费注册);
33-
2. 一台**电脑**
34-
3. 电脑上装好:**Node.js****Rust 工具链****pnpm**
30+
## 二、前置条件
3531

32+
1. 一个 **Cloudflare 账号**
33+
2. 一台可用于操作的**计算机**
34+
3. 该计算机需预先安装 **Node.js****Rust 工具链****pnpm**
3635

3736
---
3837

39-
## 三、快速上手
38+
## 三、快速部署指南
4039

41-
### 第 1 步:部署你的免费 Worker
40+
### 第一步:部署 Worker 服务端
4241

4342
```bash
44-
# 安装构建工具(只需一次
43+
# 安装构建工具(仅需执行一次
4544
cargo install -q "worker-build@^0.8"
4645

47-
# 部署到 Cloudflare(首次会让你登录并选择账号
46+
# 部署至 Cloudflare(首次执行时需登录并选择目标账号
4847
cd server-rs
4948
wrangler deploy
5049
```
5150

52-
部署完成后, Worker 配置两个密钥(在 Cloudflare 控制台对应 Worker 的「设置 → 变量」里添加,或命令行执行):
51+
部署完成后,需为 Worker 配置以下两项密钥(可在 Cloudflare 控制台对应 Worker 的「设置 → 变量」中添加,或通过命令行完成):
5352

54-
| 密钥 | 填什么 | 说明 |
55-
|----------|--------------|-----------------------------------------------|
56-
| `key` | 你自己随便编一串字符 | 认证密钥,**请记好**客户端要用同一个 |
57-
| `domain` | 你的 Worker 域名 | 形如 `free-proxy.xxxx.workers.dev`**注意不要带端口号** |
53+
| 密钥 | 填写内容 | 说明 |
54+
|----------|--------------|----------------------------------------------|
55+
| `key` | 自定义字符串 | 认证密钥,**请妥善保存**客户端需使用同一密钥 |
56+
| `domain` | Worker 的域名 | 格式类似 `free-proxy.xxxx.workers.dev`**注意不含端口号** |
5857

59-
### 第 2 步:启动客户端
58+
### 第二步:启动客户端
6059

6160
```bash
6261
cd client_tauri
63-
pnpm tauri build # 桌面端(Windows / macOS / Linux)
64-
# 然后安装运行构建的程序
62+
pnpm tauri build # 编译桌面端应用(支持 Windows / macOS / Linux)
63+
# 编译完成后,安装并运行生成的应用程序
6564
```
6665

67-
打开应用后,进入「代理」页填写
66+
打开应用程序后,进入「代理设置」页面并填写以下信息
6867

69-
- **域名**和上面 `domain` 一致(如 `free-proxy.xxxx.workers.dev`);
70-
- **认证密钥**和上面 `key` 一致
71-
- **协议**默认 HTTP 即可(走 HTTPS 一般没必要)
72-
- **本地端口**默认 `8081`
73-
- **算法**一般默认即可
68+
- **域名**与上述配置的 `domain` 保持一致(如 `free-proxy.xxxx.workers.dev`);
69+
- **认证密钥**与上述配置的 `key` 保持一致
70+
- **协议**默认使用 HTTP 即可,通常无需启用 HTTPS;
71+
- **本地端口**默认为 `8081`
72+
- **算法**一般保持默认设置即可
7473

75-
回到「仪表盘」,点击**启动代理**等待「链路正常」+ 显示出口 IP
74+
返回「仪表盘」页面,点击**启动代理**等待显示「链路正常」及当前出口 IP 即表示配置成功。
7675

76+
### 第三步:导入订阅或设置代理
7777

78-
### 第 3 步:导入订阅或设置代理
79-
- 复制仪表板中的订阅链接,使用你你的代理客户端(如clash,v2rayN)导入。
80-
- 或者在系统或浏览器(通过FoxyProxy或类似插件)直接设置http代理。
78+
- 复制仪表盘中提供的订阅链接,通过代理客户端(如 Clash、v2rayN)导入使用;
79+
- 或直接在操作系统或浏览器(借助 FoxyProxy 等插件)中配置 HTTP 代理。
8180

82-
### 第 4 步:信任 CA 证书(访问 HTTPS 网站必需
81+
### 第四步:安装信任 CA 证书(访问 HTTPS 站点必需
8382

84-
客户端要能解密 HTTPS,需要把应用生成的本地证书信任为系统根证书
83+
若需通过客户端解密 HTTPS 流量,须将应用生成的本地证书添加至系统受信任的根证书列表
8584

86-
- 打开客户端的「CA 证书安装」,点击**一键安装**
87-
- **Linux 用户**需要先安装 `certutil`,各发行版命令
85+
- 打开客户端「CA 证书安装」页面,点击**一键安装**
86+
- **Linux 用户**需预先安装 `certutil` 工具,各发行版对应命令如下
8887

8988
```bash
9089
# Debian / Ubuntu
@@ -95,79 +94,78 @@ sudo dnf install nss-tools
9594
sudo pacman -S nss
9695
```
9796

98-
> 该证书由你的设备本地生成并加密保存,只影响你自己的设备;换设备需重新导入
97+
> 该证书由本地设备生成并加密存储,仅对当前设备生效;更换设备后需重新导入
9998
10099
---
101100

102-
## 四、优选 IP
103-
101+
## 四、优选 IP 使用说明
104102

105-
在「IP 优选测速」页点击开始,应用会自动对一批候选 IP 做两轮测速(连通性 + Worker 健康检查),并给出最优结果。把最优 IP 填进「代理」页的**优选 IP** 栏(或直接一键应用),下次启动即生效——网络不好时这一步往往立竿见影
103+
在「IP 优选测速」页面点击开始测速,应用将对一批候选 IP 地址依次执行两轮测试(连通性检测与 Worker 健康检查),并给出最优结果。将测速得出的最优 IP 填入「代理设置」页面的**优选 IP** 一栏(或直接应用测速结果),重新启动即可生效。在网络状况不佳的情况下,该操作通常能显著改善连接质量
106104

107-
> 优选ip时请关闭tun或其他代理,否则将导致优选失败
105+
> 执行优选 IP 测速期间,请关闭 TUN 模式或其他代理工具,否则可能导致测速失败。
108106
109107
---
110108

111-
## 五、常见问题(FAQ)
109+
## 五、常见问题
112110

113-
**为什么连不上 / 无法上网**
114-
按顺序排查:① 域名和密钥是否与 Worker 一致;② 本地端口是否被占用;③ HTTPS 站点是否已信任 CA 证书;④ 「验证 Worker」是否提示连接正常。
111+
**无法连接或无法正常上网**
112+
请按以下顺序逐项排查:① 域名与密钥是否与 Worker 端配置一致;② 本地端口是否被其他程序占用;③ 是否已完成 HTTPS 站点所需的 CA 证书信任设置;④ 「验证 Worker」是否提示连接正常。
115113

116-
**免费额度够用吗**
117-
Cloudflare Workers 免费版每天提供约 10 万次请求额度,个人日常浏览、看网页、刷社交足够。大流量下载请留意用量,超限会暂停当天服务,次日自动恢复
114+
**免费额度是否足够使用**
115+
Cloudflare Workers 免费版每日提供约 10 万次请求额度,可满足日常浏览、网页访问及社交媒体使用需求。若进行大流量下载,请留意用量情况,超出限额将导致当日服务暂停,次日额度自动恢复
118116

119-
**为什么有的网站打不开**
120-
部分站点对代理访问有限制,属正常现象;另外可尝试切换「优选 IP」或更换算法组合
117+
**部分网站无法访问**
118+
个别站点可能对代理访问设有限制,属正常现象。可尝试更换「优选 IP」或调整算法组合以改善访问情况
121119

122-
**大文件上传总是失败 / 很慢**
123-
本地客户端与 Worker 对请求体做流式加解密,Cloudflare 免费版每个请求的 CPU 时间有限,超大请求体的累计解密/解压开销可能触顶导致传输中断。建议先压缩文件再上传,或升级 Workers Paid 提升上限
120+
**大文件上传经常失败或速度较慢**
121+
本地客户端与 Worker 之间对请求体采用流式加解密处理,而 Cloudflare 免费版对每次请求的 CPU 时间存在限制,超大文件累计的加解密开销可能触及该限制,导致传输中断。建议在上传前先对文件进行压缩,或升级至 Workers 付费版以提升处理上限
124122

125-
**为什么首次启动链路异常**
126-
需要去「IP 优选测速」页点测速选择一个ip,否则无优选ip会回退到DNS解析,将导致获得受DNS污染的ip或tls握手时受到sni阻断
123+
**首次启动时链路状态异常**
124+
请前往「IP 优选测速」页面执行测速并选择合适的 IP。若未设置优选 IP,程序将回退至默认 DNS 解析方式,可能获取到受 DNS 污染影响的 IP 地址,或在 TLS 握手阶段遭遇基于 SNI 的连接阻断
127125

128-
**在哪里看日志 / 怎么开启 debug 日志**
129-
客户端统一使用 `lib/log` 日志(`RUST_LOG` 控制等级与过滤,如 `RUST_LOG=debug`)。GUI 日志写入应用数据目录的 `logs/freeproxy.log`(1MB 轮转,ANSI 关闭);命令行客户端输出到终端 stderr(带颜色)。Worker 端日志打印到控制台
126+
**如何查看日志或开启调试日志**
127+
客户端统一使用 `lib/log` 模块进行日志记录(可通过环境变量 `RUST_LOG` 控制日志级别及过滤条件,如 `RUST_LOG=debug`)。图形界面版本的日志写入应用数据目录下的 `logs/freeproxy.log` 文件(单文件上限 1MB,超出后自动轮转,不含 ANSI 颜色代码);命令行版本的日志直接输出至终端标准错误流(带颜色标注)。Worker 端日志则输出至控制台
130128

131129
---
132130

133131
## 六、工作原理
134132

135-
### 普通Http请求
133+
### 普通 HTTP 请求
136134

137-
普通 HTTP 请求走 `/api/{version}/{target}` 转发。
135+
普通 HTTP 请求经由 `/api/{version}/{target}` 路径完成转发:
138136

139137
```
140138
浏览器
141-
│ (HTTP/HTTPS 明文交给本地客户端
139+
│ (HTTP/HTTPS 明文形式交付本地客户端
142140
143141
本地客户端 ── 压缩 + 加密 ──▶ 免费 Worker ──▶ 目标网站
144142
▲ │
145143
└────────── 加密返回 ────────────────┘
146144
```
147145

148-
- 浏览器把流量交给本地客户端
149-
- 客户端**压缩 + 加密**后,通过Worker转发到目标网站
150-
- Worker 拿到网站响应,再加密传回客户端解密,写回浏览器
151-
- 通过http2请求worker
146+
- 浏览器将流量转交给本地客户端处理
147+
- 客户端对数据进行**压缩与加密**后,经由 Worker 转发至目标网站
148+
- Worker 获取网站响应结果后,加密回传至客户端,客户端解密后写回浏览器
149+
- 客户端与 Worker 之间的通信基于 HTTP/2 协议
152150

153151
### WebSocket 隧道
154152

155-
浏览器发起 `ws://` / `wss://` 升级请求时,会自动切换到独立的 WebSocket 隧道(`/ws/{version}/{target}`):
153+
当浏览器发起 `ws://` / `wss://` 协议升级请求时,系统将自动切换至独立的 WebSocket 隧道(路径为 `/ws/{version}/{target}`):
156154

157155
```
158156
浏览器 ── ws/wss 升级请求 + RFC 6455 帧 ──▶ 本地客户端 ── 加密隧道消息 ──▶ Worker ──▶ 上游 WS 服务器
159157
▲ │
160158
└────────── 原始 WS 帧(101 响应头 / 数据帧 / close 帧)零解析回写 ───────────────┘
161159
```
162160

163-
- **本地客户端**负责 RFC 6455 协议细节:帧解析、掩码解掩码、分片重组;浏览器的 Ping 帧本地直接回 Pong,不占用隧道带宽
164-
- **Worker 端**与上游完成真正的 WebSocket 握手(含按客户端 key 计算 `Sec-WebSocket-Accept`),之后全双工转发,浏览器收到的仍是原始 WS 帧,text / binary / close 语义完整保留
165-
- **保活**隧道侧每 60 秒发一次 Ping(低于 Cloudflare 约 100 秒的空闲断开阈值),避免长连接被空闲回收
166-
- 升级请求必须走 HTTP/1.1(HTTP/2 不支持 Upgrade 语义),客户端连接 Worker 的隧道通道已强制 HTTP/1.1。
161+
- **本地客户端**负责处理 RFC 6455 协议相关细节,包括帧解析、掩码处理及分片重组;浏览器发出的 Ping 帧由本地直接回复 Pong,不占用隧道带宽资源
162+
- **Worker 端**与上游服务器完成实际的 WebSocket 握手过程(包括依据客户端密钥计算 `Sec-WebSocket-Accept`),随后执行全双工数据转发,浏览器所接收到的仍为原始 WS 帧,text / binary / close 等语义完整保留
163+
- **连接保活机制**隧道每隔 60 秒发送一次 Ping(低于 Cloudflare 约 100 秒的空闲断开阈值),以避免长连接因空闲而被中断回收
164+
- 由于协议升级请求必须基于 HTTP/1.1(HTTP/2 不支持 Upgrade 语义),客户端与 Worker 之间的隧道通信通道已强制采用 HTTP/1.1 协议
167165

168-
### 请求核心
169-
通过worker::Fetch 接口发送请求,而不是worker::Socket,不受限制,可以连接使用了cf服务的站点,能够解锁更多内容。
166+
### 核心请求机制
170167

168+
系统通过 `worker::Fetch` 接口发送请求,而非 `worker::Socket`,因此不受相关限制,可正常连接使用 Cloudflare 服务的站点,从而实现更广泛的内容访问支持。
171169

172170
---
173171

@@ -256,12 +254,9 @@ npm run test-e2e
256254

257255
### 安全模型
258256

259-
- 密钥由 `auth_key + domain` 经 Sha256 哈希 + HKDF 派生,客户端与 Worker 两端独立推导出同一组密钥,无需网络传输密钥;
260-
- 每次请求的快速认证令牌由Ascon128 + 时间戳 + nonce 组成,服务端仅接受 ±30 秒内的令牌;
261-
- 本地 CA 私钥使用设备唯一标识 + 随机盐派生密钥加密存储,换设备需重新导入证书。
262-
263-
264-
257+
- 密钥经由 `auth_key + domain` 依次执行 SHA-256 哈希与 HKDF 派生,客户端与 Worker 各自独立推导出相同的密钥组,全程无需通过网络传输密钥本身;
258+
- 每次请求所使用的快速认证令牌由 Ascon128、时间戳及随机数(nonce)共同构成,服务端仅接受时间窗口在 ±30 秒以内的有效令牌;
259+
- 本地 CA 私钥采用设备唯一标识与随机盐值派生出的密钥进行加密存储,更换设备后需重新导入证书。
265260

266261
### 客户端界面
267262

@@ -270,12 +265,9 @@ npm run test-e2e
270265

271266
---
272267

273-
## 许可
268+
## 许可协议
274269

275-
本项目采用 **MIT OR Apache-2.0** 双许可
270+
本项目采用 **MIT OR Apache-2.0** 双重许可协议
276271

277272
- [MIT License](LICENSE-MIT) — Copyright (c) 2026 ZEROLINGG
278-
- [Apache License 2.0](LICENSE-APACHE) — Copyright 2026 ZEROLINGG
279-
280-
贡献即视为同意以相同双许可分发。
281-
273+
- [Apache License 2.0](LICENSE-APACHE) — Copyright 2026 ZEROLINGG

server-rs/Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)