本日、SingLinkVPNを開発するチームSingLinkLabsは、SingLinkVPNアプリの初代プロトタイプのソースコードをApache-2.0ライセンスのもとGitHubで公開しました。Windows、macOS、Android、iOSに対応した一般ユーザー向けのVPNアプリで、新たにオープンソース化したSingLinkプロトコルの上に、1つのコードベースで構築されています。

このアプリはプロトコル本体と同時に公開します。詳しくは「SingLinkプロトコルをオープンソース化しました」をご覧ください。両者を合わせて見れば、接続ボタンから暗号化されたパケットに至るまで、オープンなVPNプロトコルと完全なクライアントがどう組み合わさるのかがわかります。

リポジトリ: SingLinkLabs / singlink-vpn-app · ステータス: 初代プロトタイプ · ライセンス: Apache-2.0 · 技術スタック: インターフェースはFlutter(Dart)、コアはGo

公式サイトからダウンロードするアプリとは別物です

公式サイトからダウンロードできる公式SingLinkVPNアプリや、アプリストアで配信しているアプリは、別の製品です。これらはSingLink 2.0をはじめとする当社の本番用プロトコルで動作しており、そのコアソースコードは今回の公開に含まれていません。既存のユーザーにとっては何も変わりません。

このプロトタイプは、オープンなSingLinkプロトコルのリファレンスクライアントです。このプロトコルに対応したサーバーにしか接続できず、アカウントのサインイン機能もありません。サーバーは、サーバーリンクを貼り付けるか、クリップボードから読み込んで自分で追加します。どのアプリストアでも公開していません。

アプリでできること

  • ワンタップで接続・切断。 大きな丸いボタンが、未接続・接続中・接続済みの3つの状態を表示します。

  • 保護ステータス(「Not protected」または「Protected」)と接続タイマー。

  • あなたのIP。 接続後、ウェブサイトから見える出口IPアドレスを表示します。

  • ロケーションの選択。 サーバーは国旗付きで一覧表示され、先頭には「Quick connect (auto)」があります。接続中にロケーションを切り替えると、自動的に再接続します。

  • 正直なレイテンシ表示。 実際に測定した値だけを表示します。未測定のサーバーには、でっち上げの数値ではなく「—」を表示します。

  • リアルタイムの速度。 ダウンロード速度とアップロード速度に加え、現在のセッションで使ったデータ量を表示します。

  • わかりやすいエラーメッセージ。 次に何をすればよいかを示し、技術的な詳細もワンタップで確認できます。

  • ライトモードとダークモード。システムの設定に合わせて切り替わります。

2つの接続モード

スマートフォンでは、デバイス全体のVPN。 AndroidはシステムのVpnServiceを、iOSはNetwork Extensionを使います。すべてのアプリの通信がトンネルを通り、DNSの名前解決もトンネル内で行われます。

コンピューターでは、システムプロキシモード。 接続するとアプリがシステムプロキシを設定し、切断または終了すると以前の設定に戻します。接続中にアプリが強制終了された場合は、次回の起動時に設定を元に戻します。ブラウザやほとんどのアプリはシステムプロキシに従いますが、プロキシ設定を無視する一部のプログラムは対象外です。デスクトップ向けのパケットレベルVPN(macOSではNetwork Extension、WindowsではWintun)が次の計画です。

構成

  • 1つのFlutterコードベースから4つのアプリすべてを生成し、どのプラットフォームでも同じインターフェースを提供します。インターフェースは英語です。

  • GoのコアにはSingLinkプロトコルが含まれ、プラットフォームごとにネイティブライブラリとしてコンパイルされて、アプリから直接呼び出されます。

  • スマートフォンでは、コアにGoogleのgVisorユーザー空間ネットワークスタック(Apache-2.0)が加わり、デバイス全体の通信をSingLink接続に変換します。

  • ゼロから開発。 Flutterが新規プロジェクト用に生成する空のテンプレートを除き、コードはすべて新たに書いたものです。他のVPNアプリからコード、アイコン、画像を流用してはいません。

プラットフォームごとの状況

  • macOS 13以降(Apple silicon): システムプロキシモード。ビルド済みで、実際の接続でテストしました。

  • Android 7以降: デバイス全体のVPN。APKはビルド済みで、Androidエミュレーター上で実際の接続をテストしました。

  • iOS 15以降: デバイス全体のVPN。iOSシミュレーターでビルド・実行できますが、シミュレーターではVPNトンネルを作成できません。実機のiPhoneで動かすにはApple Developerアカウントが必要です。

  • Windows 10 / 11(x64): システムプロキシモード。コアライブラリはビルド済みです。アプリ本体はWindows上でコンパイルする必要があり、そのためのGitHub Actionsワークフローをリポジトリに同梱しています。

正直な制限事項

  • これはプロトタイプです。 開発者や研究者、各部分がどう動くのかを見てみたい方のためのもので、公式アプリの代わりにはなりません。

  • 配布には追加の手順が必要です。 Mac向けに一般公開するにはAppleの署名と公証が、実機のiPhoneにはApple Developerアカウントが必要です。また、Androidビルドはテスト用の鍵で署名されています。

  • macOSのサポートは現在、Apple silicon(M-series)搭載MacのmacOS 13以降に限られます。

  • デスクトップはシステムプロキシモードのため、プロキシ設定を無視するプログラムにはまだ対応していません。

  • 土台のプロトコルはドラフト段階です。 内部セキュリティレビューは実施済みですが、第三者監査はまだで、中国本土での実地検証も行っていません。

  • サーバー名は、サーバーから送られてきたとおりに表示されます。 インターフェースをすべて英語にしたい場合は、サーバー名を英語で付けてください。

ビルドして参加する

各プラットフォーム向けのコアとアプリのビルド方法は、リポジトリのREADMEで説明しています。プロトコルのコアは、独立したリポジトリSingLinkLabs / singlink-protocolにあります。

質問、バグ報告、Pull RequestはGitHubでお待ちしています。セキュリティ脆弱性は公開のIssueではなく、非公開で報告してください。手順はプロトコルリポジトリのSECURITY.mdに記載しています。

ライセンスと商標

コードはApache-2.0ライセンスで提供します。ライセンスの条件に従えば、商用を含めて使用、改変、再配布できます。「SingLink」「SingLinkVPN」の名称、その中国語名、およびロゴはSingLinkLabsの商標であり、ライセンスはこれらを使用する許可を与えるものではありません。フォークでは独自の名称とアイコンを使う必要があります。アプリにはgVisorネットワークスタックが含まれており、こちらもApache-2.0ライセンスです。

あわせて読みたい