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