只给选中的网站开一条快车道 —— macOS / Windows 分流加速工具
SpeedLane 通过你自己的境外服务器加速访问 GitHub、Google 等指定网站,而其他所有网站保持直连、完全不经过代理。也可在 macOS 开启全局 TCP 代理。没有订阅、没有第三方节点 —— 一台能 SSH 登录的 VPS 就够了。
- ⚡ 白名单分流:基于 PAC 自动代理,只有你开启的站点走加速,其余流量一律直连
- 🖥 服务器零配置:默认用 SSH 动态端口转发(
ssh -D)建立加密隧道,服务器上不需要安装任何软件;也支持连接服务器上已有的 SOCKS5 / HTTP 代理 - 🗂 多服务器管理:可添加多台服务器,一键切换默认连接,支持密码(存 macOS 钥匙串)和 SSH 密钥两种登录方式,内置连接测试
- ✅ 站点开关自由组合:内置 ChatGPT、Claude、Gemini、Perplexity、Grok、GitHub(含 Copilot)、Go 模块代理、Kubernetes 镜像、crates.io、VS Code 插件市场、Vercel、Google、YouTube、Reddit、Discord、X、Medium、Stack Overflow、Hugging Face、Docker Hub、npm、Wikipedia、Udemy、Internet Archive 等预设(含相关 CDN 域名),支持添加自定义域名,每个站点独立滑块开关
- 🗃 两层分组:站点按"AI 助手 / 开发工具 / Google 服务 / 社区 / 资料 / 自定义站点"分组,每组可一键全开或全关,组内站点仍可单独控制
- ✏️ 域名可查看可编辑:设置里点开任意站点即可看到它包含的域名,预设域名可以增删(随时可恢复默认),自定义站点支持"一个名称对应多个域名"
- 🌐 macOS 全局 TCP 代理:通过 TUN 虚拟网卡接管流量;TCP 走现有 SSH / SOCKS5 链路,DNS 经代理,其余 UDP 被拒绝。独立安装经校验的 sing-box 内核,启用时需管理员授权
- 📊 实时流量显示:菜单栏图标旁显示当前速率(定宽显示,如
98K、1.2M),空闲时显示0,鼠标悬停可看上下行明细与本次累计;不想要这个数字可在"通用"设置里关掉 - 🧾 连接日志:设置里的"日志"标签页逐条列出时间、访问的域名、上下行流量与状态;日志只保留在内存中,最多 500 条,退出即清,不写入任何文件
- 🧰 git 命令行加速:自动按域名为 git 配置代理,只影响所选域名的 clone/push
- 🖱 右键快捷菜单:右键点击菜单栏图标可快速连接/断开、打开设置、切换开机自动运行
- 🚀 开机自动运行 + 启动后自动连接:两者配合实现无感使用
- 🧹 干净退出:关闭开关或退出 App 自动还原系统代理设置
浏览器 / 系统 ──> PAC 自动代理判断
├─ 命中开启的域名 ──> 本地中继 (127.0.0.1:1080) ──> SSH 加密隧道 ──> 你的服务器 ──> 目标网站
│ └ 统计流量、记录访问的域名
└─ 其他所有域名 ──> 直连(不经过任何代理)
- 开启后 App 运行
ssh -N -D <端口> user@your-server建立加密隧道 - App 自己在
127.0.0.1:1080起一个 SOCKS5 中继,夹在浏览器和隧道之间,流量统计与连接日志都来自这里 - 本地起一个只监听
127.0.0.1的微型 HTTP 服务,向系统提供按你的站点选择动态生成的 PAC 文件 - 通过
networksetup把系统"自动代理配置"指向该 PAC;修改站点选择即时生效 - 关闭/退出时自动恢复原有网络设置
选择"服务器上的 HTTP 代理"模式时,浏览器直接与该代理通信、不经过本地中继,因此没有流量统计和日志。SSH 隧道与 SOCKS5 模式都有。
- macOS 13 (Ventura) 及以上;构建需要 Xcode / Swift 5.9+
- Windows 10 及以上(需自带 OpenSSH 客户端,Win10 1809+ 默认包含);构建需要 .NET 8 SDK
- 一台境外 VPS(任意可 SSH 登录的 Linux 服务器即可)
从 Releases 下载最新的 SpeedLane-x.x.x.dmg,打开后把 SpeedLane 拖入 Applications 文件夹。
首次打开提示"无法验证开发者"或"已损坏"? 项目未购买 Apple 开发者证书,系统会拦截来自网络的未签名应用。任选其一解除:
- 右键点击 App → 打开 → 再点"打开";或
- 终端执行
xattr -cr /Applications/SpeedLane.app后正常双击打开
git clone https://github.com/openzirun/SpeedLane.git
cd SpeedLane
./build_app.sh # 打包出 dist/SpeedLane.app
./make_dmg.sh # (可选)生成 DMG
open dist/SpeedLane.app想直接跑起来试功能,用 ./run.sh:一条命令完成编译、打包、启动,并自动弹出主面板和设置窗口。
./run.sh # 编译并启动
./run.sh --backup # 启动前先备份配置,随便折腾后可 --restore 还原
./run.sh --stop # 停止实例、还原系统代理、清理残留隧道Windows 上对应 .\windows\run.ps1(PowerShell 中运行,-Stop / -Backup / -Restore 同理)。
从 Releases 下载 SpeedLane-win-x64-x.x.x.zip,解压后运行 SpeedLane.exe,图标出现在系统托盘。
- 右键托盘图标:选择服务器、勾选加速站点、连接/断开、设置、开机自动运行
- 双击托盘图标打开设置窗口
- 首次运行如遇 SmartScreen 提示,点"更多信息 → 仍要运行"(未购买代码签名证书)
- 系统代理通过注册表 PAC 设置(对 Edge/Chrome 等使用系统代理的浏览器生效),退出时自动还原
- 密码使用 Windows DPAPI 加密存储,仅当前用户可解密
- 提示:Windows 10 自带的 OpenSSH 较旧(8.1),密码登录依赖的
SSH_ASKPASS_REQUIRE需要 8.4+;如密码登录失败,请改用 SSH 密钥,或升级 OpenSSH
源码构建:
dotnet publish windows/SpeedLane.Win.csproj -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true- 点击菜单栏 ⚡ 图标 → 设置… → "服务器"标签页,添加你的服务器(IP、SSH 端口、用户名、密码或密钥),可用"测试连接"验证,★ 为默认连接
- 在"加速站点"标签页或菜单弹窗中,用滑块开启要加速的站点(每个分组右侧的"全开 / 全关"可批量操作);设置里点击站点名可展开查看和增删域名,也可以添加自定义站点(名称 + 一个或多个域名)
- 点击 连接选中站点,状态变绿即生效
- 右键菜单栏图标可快速连接/断开、打开设置、开启"开机自动运行";"通用"设置里还可开启"启动后自动连接"
登录方式二选一:
- 密码:直接在设置中填写,保存在 macOS 钥匙串(经 SSH_ASKPASS 传递,不出现在命令行参数和配置文件中)
- SSH 密钥:先在终端执行一次
ssh-copy-id user@your-server-ip
ChatGPT / Claude 桌面版怎么用? 先尝试打开对应站点开关、连接后完全退出并重启客户端。系统 PAC 只对遵循系统代理的请求生效,不能保证所有桌面客户端都使用它。
macOS 上仍无法连接时,可使用 设置 → 全局代理:
打开 开启全局 TCP 代理:通过 TUN 将全机捕获的 TCP 送入当前代理,DNS 使用代理内的 HTTPS DNS,其余 UDP 拒绝。无需依赖应用进程识别或站点名单。SSH 不能承载全部 UDP,因此这不等于所有网络协议都可用;回环、局域网的更具体路由和代理服务器连接除外。全局开关默认关闭,只能在断开时切换。
建议先点 测试 20 秒。正式更改路由前会验证本地代理及 HTTPS DNS;检测失败则不启用 TUN。试用到时自动断开,root 守护进程有独立计时,即使 UI 卡住也会停止内核。正常持续连接不会自动断开。设置顶部始终显示连接状态和错误,并提供直接连接/断开按钮。
- 点击“下载并安装”,安装官方 sing-box 1.12.0(支持 Apple Silicon / Intel,固定 SHA-256 校验)。下载受限时可使用页内“官方归档下载”,然后“从文件安装”。内核独立保存在
~/Library/Application Support/SpeedLane/NetworkCore/1.12.0/,遵循 GPLv3,对应源码。 - 打开“开启全局 TCP 代理”,无需逐个添加应用或域名。
- 使用 SSH 隧道或 SOCKS5 服务器连接;macOS 会请求管理员授权以创建虚拟网卡。HTTP 服务器模式暂不支持全局代理。
- 显示“全局 TCP 代理已启用”后,完全退出并重新打开 Claude。已建立的连接不会自动迁移。
代理 DNS 通过隧道访问 Cloudflare 的 HTTPS DNS,使用 IPv4 解析,不修改系统 DNS 配置。服务器 IP 被排除,避免上游回流造成循环。支持回退的 QUIC 客户端可以改用 TCP,UDP 专用功能不可用。断开、退出或内核故障后会还原路由并恢复直连。
临时提权会话仅运行内核,不安装常驻 root 服务。停止信号移除或 SpeedLane 进程结束后,守护循环会停止内核;异常关闭也由此清理。授权取消、配置校验失败或启动超时会回滚本次连接。Windows 版本暂未加入此功能。
菜单栏的数字代表什么?
当前这一秒经过加速的流量速率,上下行合计,没有流量时显示 0。数字固定占 3 位加一个单位(B / K / M / G),宽度不会来回跳。鼠标悬停可以看到上下行分别是多少以及本次连接的累计量。只有 SSH 隧道和 SOCKS5 模式有这个数字;在"设置 → 通用 → 菜单栏显示实时流量"里可以关掉,关掉后日志和统计照常工作。
日志里为什么有些记录显示的是 IP 而不是域名? 取决于发起请求的程序。浏览器通过 PAC 使用 SOCKS5 时会把域名交给代理,所以能看到域名;有些命令行工具会先自己解析 DNS 再连接,那种情况代理只拿得到 IP。
浏览器生效了,终端里 curl 却不走代理?
命令行工具不读系统 PAC。git 已自动覆盖(连接时按所选域名配置);其他工具可临时 export https_proxy=socks5://127.0.0.1:1080(该终端所有请求都会走代理,用完 unset)。
App 异常退出后网络设置残留?
系统设置 → Wi-Fi → 详细信息 → 代理,关闭"自动代理配置";或执行 networksetup -setautoproxystate Wi-Fi off。
为什么每次重新编译后读取钥匙串会弹授权框? 本地构建使用 ad-hoc 签名,二进制指纹每次变化。点"始终允许"即可;正式分发版本使用固定的 Developer ID 签名则无此问题。
连接失败显示红色? 常见原因:密码错误、SSH 密钥未配置、服务器防火墙未放行 SSH 端口。用设置里的"测试连接"可看到具体错误信息。
| 文件 | 职责 |
|---|---|
| Models.swift | 站点预设、服务器模型、设置持久化 |
| SSHTunnel.swift | SSH 动态转发进程管理、连接测试 |
| SOCKS5Relay.swift | 本地 SOCKS5 中继,流量统计与域名记录的来源 |
| TrafficMonitor.swift | 速率采样与连接日志(仅内存) |
| PACServer.swift | 本地 PAC 服务与 PAC 脚本生成 |
| SystemProxy.swift | 系统代理(networksetup)开关 |
| KeychainStore.swift | 服务器密码钥匙串存取 |
| GitProxy.swift | git 按域名代理配置 |
| AppController.swift | 总控制流程 |
| StatusBarController.swift | 菜单栏图标、左键弹窗/右键菜单 |
| MenuView.swift / SettingsView.swift | 菜单栏弹窗与设置窗口 |
| LaunchAtLogin.swift | 开机自动运行(SMAppService) |
| windows/ | Windows 版(C# / .NET 8 WinForms 托盘应用,功能对等) |
SpeedLane 是一个连接用户自有服务器的网络工具,面向开发者访问开发资源(代码托管、包镜像、技术文档)的场景。本项目不提供任何服务器、节点或网络服务。请遵守你所在国家/地区的法律法规,使用本工具产生的一切后果由使用者自行承担。
运行 swift test 验证旧配置清理、全局 DNS 路由、UDP 拒绝顺序、服务器回路排除、归档篡改拒绝、路径转义、守护退出及独立试用超时。生成的配置还应使用固定版本内核执行 sing-box check -c config.json。
发布前需在真实 macOS 网络上验证:管理员授权取消与成功、Claude 重启后联网、未选中软件直连、UDP 拒绝、切换 Wi-Fi、断开及强制退出后路由恢复。配置检查和单元测试不能代替这组实机验证。

