今天,星连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 许可证。
