今天,星连VPN 背后的团队 SingLinkLabs 在 GitHub 上以 Apache-2.0 许可证公开了 星连VPN App 初代原型 的源代码。这是一款面向普通用户设计的 VPN App,用同一套代码支持 Windows、macOS、Android 和 iOS 四个平台,底层使用同时开源的 SingLink 开源协议。

它与协议本身同时发布,详见SingLink 开源协议正式公开。两者放在一起,完整展示了一套开放的 VPN 协议如何与一个完整的客户端配合运作:从连接按钮一路到加密的数据包。

代码仓库:SingLinkLabs / singlink-vpn-app · 状态:初代原型 · 许可证:Apache-2.0 · 技术:界面用 Flutter(Dart),核心用 Go

这不是你在官网下载的那款 App

你在官网下载页和各大应用商店下载的星连VPN 官方 App 是另外的产品。它们运行在我们的正式协议上,包括 SingLink 2.0,核心源代码不在这次公开范围内。对现有用户来说一切照旧。

这款原型是 SingLink 开源协议的参考客户端,只能连接支持该协议的服务器,也没有账号登录功能:服务器需要你自己粘贴服务器链接,或从剪贴板导入。它没有在任何应用商店上架。

App 能做什么

  • 一键连接与断开:中间的大圆按钮有三种状态:未连接、连接中、已连接。

  • 保护状态(界面显示 “Not protected” 或 “Protected”)和连接计时。

  • 你的 IP:连接后显示网站看到的出口 IP 地址。

  • 选择地区:服务器带国旗列出,最上方是 “Quick connect (auto)”。连接中切换地区会自动重新连接。

  • 如实显示延迟:只显示真正测到的数值,没测到的服务器显示“—”,不会编造数字。

  • 实时速度:下载与上传速度,以及本次连接已使用的流量。

  • 清楚的错误提示:告诉你下一步该怎么做,技术细节点开就能看。

  • 浅色与深色模式,自动跟随系统设置。

两种连接方式

手机上是整机 VPN。Android 使用系统的 VpnService,iOS 使用 Network Extension。所有 App 的流量都会走隧道,DNS 查询也在隧道内完成。

电脑上是系统代理模式。连接时 App 会设置系统代理,断开或退出时恢复你原来的设置;如果 App 在连接中被强制关闭,下次启动时也会自动恢复。浏览器和大部分 App 都会遵循系统代理,少数忽略代理设置的程序则不会。电脑版的下一步计划是数据包层级的 VPN(macOS 用 Network Extension,Windows 用 Wintun)。

它是怎么做出来的

  • 一套 Flutter 代码同时产出四个平台的 App,各平台界面一致,界面语言为英文。

  • Go 语言核心包含 SingLink 开源协议,为每个平台编译成原生库,由 App 直接调用。

  • 手机端的核心另外加入了 Google 开发的 gVisor 用户态网络栈(Apache-2.0),把整部手机的流量转换成 SingLink 连接。

  • 从零编写。除了 Flutter 新建项目时自动生成的空白模板,其余代码都是新写的,没有使用其他 VPN App 的代码、图标或图片。

各平台进度

  • macOS 13 或更新版本(Apple 芯片):系统代理模式。已构建,并通过真实连接测试。

  • Android 7 或更新版本:整机 VPN。已构建 APK,并在 Android 模拟器上通过真实连接测试。

  • iOS 15 或更新版本:整机 VPN。可以构建并在 iOS 模拟器中运行;模拟器无法建立 VPN 隧道,要在真实 iPhone 上运行需要 Apple 开发者账号。

  • Windows 10 和 11(x64):系统代理模式。核心库已构建;App 本身必须在 Windows 上编译,代码仓库中附有完成这一步的 GitHub Actions 工作流。

如实说明限制

  • 它是原型。它面向开发者、研究人员,以及想了解各个环节如何运作的人,不是用来取代官方 App 的。

  • 对外发布还需要额外步骤。Mac 版公开发布需要 Apple 签名与公证,在真实 iPhone 上运行需要 Apple 开发者账号,Android 版目前使用测试密钥签名。

  • macOS 支持范围目前是 macOS 13 或更新版本、搭载 Apple 芯片(M 系列)的 Mac。

  • 电脑版是系统代理模式,忽略代理设置的程序目前还不在保护范围内。

  • 底层协议仍是草案。它做过内部安全审查,但还没有第三方审计,也尚未在中国大陆实地测试。

  • 服务器名称按服务器发送的内容显示。如果想要全英文界面,服务器请用英文命名。

自己构建,一起参与

代码仓库里的 README 说明了如何为各个平台构建核心和 App。协议核心在另一个代码仓库:SingLinkLabs / singlink-protocol。

欢迎在 GitHub 上提问、报告问题和提交 Pull Request。发现安全漏洞时,请私下报告,不要公开发 Issue,流程见协议代码仓库中的 SECURITY.md。

许可证与商标

代码采用 Apache-2.0 许可证:在遵守许可证条款的前提下,你可以使用、修改和再发布,包括商业用途。“SingLink”“SingLinkVPN”、中文名称「星连」「星連」及标志是 SingLinkLabs 的商标,许可证并不授权使用这些名称。分支必须使用自己的名称与图标。App 内含的 gVisor 网络栈同样采用 Apache-2.0 许可证。

延伸阅读