今天,星連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 授權。

延伸閱讀