Blog
Development·7 min read

打造一键式 VPN 来翻越防火长城

我即将搬到中国,防火长城屏蔽了一切。所以我用 Tauri 和 Rust 构建了一个桌面应用,通过 VLESS + Reality 隧道传输流量——完全无法被检测

Jo Vinkenroye·March 8, 2026
打造一键式 VPN 来翻越防火长城

我要搬去中国住一段时间了。如果你了解那里的互联网状况,你就知道防火长城基本上屏蔽了一切——Google、YouTube、WhatsApp、Twitter,甚至 ChatGPT。常见的 VPN 应用也很快就会被检测和封锁

所以我自己造了一个

一个桌面应用,一键就能连接到代理服务器。不需要配置文件,不需要手动设置,不需要终端命令。只要点击一下,你的流量就被加密、混淆,并通过一个防火墙无法与正常网页流量区分的服务器进行路由

为什么不直接用普通 VPN

商业 VPN 是中国最先封锁的东西。他们知道协议,知道服务器 IP,对所有流量进行深度包检测。大多数 VPN 连接在几秒内就会被限速或切断

防火长城其实非常精密。它不只是封锁 IP——它分析流量模式、TLS 指纹、数据包时序。如果你的连接看起来不像正常的网页浏览,就会被标记

所以我需要一个看起来完全不像 VPN 的东西

关键技巧:VLESS + Reality

这就是有意思的地方了。我使用的是 VLESS 协议配合 Reality 传输——而 Reality 做了一件很巧妙的事

它让你的代理流量看起来像是到一个合法网站的正常 HTTPS 连接。在这个方案里,TLS 握手模拟的是到 www.microsoft.com 443 端口的连接。防火墙看到的就像是有人在浏览微软的网站。毫无可疑之处

加密技术栈:

  • Reality 处理 TLS 层面的加密和混淆
  • xtls-rprx-vision 用于流量控制
  • Chrome TLS fingerprint 伪造以匹配真实浏览器流量
  • Curve25519 public key 加密用于握手

VLESS 本身将加密设置为 "none",因为 Reality 已经在传输层处理了一切。没有双重加密,没有额外开销,没有可检测的 VPN 特征

技术栈

  • Tauri 2 — 桌面应用框架(Rust 后端,Web 前端)
  • React 19 + TypeScript — 前端 UI
  • xray-core — 运行 VLESS + Reality 的代理引擎
  • 3x-ui — 服务器端管理面板

Tauri 是显而易见的选择。Electron 也能用,但为了本质上就是一个连接按钮的东西而打包一个完整的 Chromium 太过分了。Tauri 给了我一个体积很小的原生应用和一个能启动进程、修改系统路由表的 Rust 后端

工作原理

当你点击连接时,大约 2 秒内会发生很多事

自动注册

应用内置了运行在我服务器上的 3x-ui 管理面板的凭据。首次连接时,它会为你的设备生成一个 UUID 并将自己注册为客户端。不需要任何手动步骤

App launch → Generate UUID → Login to panel → Register device → Save identity

之后每次连接只需要检查注册信息是否仍然存在。我追求的是零摩擦——尤其是考虑到可能也需要用这个的家人

代理链路

Your browser
→ System SOCKS proxy (127.0.0.1:1080)
→ xray-core (local process)
VLESS + Reality encrypted tunnel (TCP:443)
→ Remote server (outside China)
→ Internet

xray-core 作为子进程运行。应用写入一个 JSON 配置文件,启动二进制文件,然后轮询 1080 端口直到 SOCKS5 代理就绪。接着它告诉 macOS 或 Windows 将所有流量通过本地代理路由

系统集成

最棘手的部分不是代理——而是让操作系统配合

在 macOS 上,应用以管理员权限运行 networksetup 来设置系统 SOCKS 代理。在 Windows 上,它写入注册表。两者都需要权限提升

应用在连接前会对你的网络状态做快照——默认网关、网络接口、DNS 服务器。如果应用在连接状态下崩溃,下次启动时会自动恢复一切

共享访问

这一点很重要。不只是我一个人需要这个

应用可以将 VLESS URI 导出为二维码。用 Android 上的 v2rayNG 或 iOS 上的 Streisand 扫描就能获得相同的连接。URI 包含了一切——服务器地址、UUID、公钥、Reality 设置。扫一下,就连上了

所以我只需要配置一次服务器,就能跟任何需要的人共享访问。不用解释代理配置怎么用,不用在微信上指导别人敲终端命令

需要改进的地方

面板凭据是硬编码的。面板连接使用 HTTP 而没有 TLS 验证。配置文件以明文存储凭据。作为个人工具这没问题,但我知道在更广泛地分享之前应该修复这些

Rust 代码使用了一些 unsafe 的静态可变状态来处理进程句柄。能跑,但用 Arc/Mutex 的方式会更干净。有时候发布比完美更重要——尤其是当你还有一趟航班要赶的时候

最终成果

一个 15MB 的桌面应用,把一个每月 5 美元的 VPS 变成了防火长城无法检测的个人 VPN。一键连接,一键断开。在任何监控者看来,流量就像正常的网页浏览

有时候最好的工具就是那个没人需要多想的工具。而当你即将失去对半个互联网的访问权时,你就去造你需要的东西

Stay Updated

Get notified about new posts on automation, productivity tips, indie hacking, and web3.

No spam, ever. Unsubscribe anytime.

Comments

Related Posts