Mullvad VPN クライアント アプリのソース コード リポジトリへようこそ。 Mullvad VPN サービス用の VPN クライアント ソフトウェアです。このサービスの詳細については、当社の Web サイト mullvad.net をご覧ください (当社の onion サービスの Tor 経由でもアクセスできます)。
このリポジトリには、アプリのデスクトップ バージョンとモバイル バージョンのすべてのソース コードが含まれています。デスクトップの場合、これにはシステム サービス/デーモン ( mullvad-daemon
)、グラフィカル ユーザー インターフェイス (GUI)、およびコマンド ライン インターフェイス (CLI) が含まれます。 Android アプリは、トンネルとセキュリティに同じバッキング システム サービスを使用しますが、android/ に専用のフロントエンドがあります。 iOS は、ios/ に存在する完全にスタンドアロンの実装で構成されています。
macOS、Windows、Linux、Android 用にビルドおよび署名されたリリースが、当社の Web サイトおよび Github で入手可能です。 Android アプリは Google Play および F-Droid からも入手でき、iOS バージョンは App Store からも入手できます。
コード署名キーと、ダウンロードを暗号的に検証する方法の手順は、Mullvad のオープンソース ページでご覧いただけます。
これらは、アプリが公式にサポートするオペレーティング システムとそのバージョンです。さらに多くのバージョンで動作する可能性がありますが、それらのバージョンについてはテストしていないため、品質やセキュリティを保証できません。
OS/プラットフォーム | サポートされているバージョン |
---|---|
窓 | 10と11 |
macOS | 最新の 3 つのメジャー リリース |
Linux (Ubuntu) | 最新の 2 つの LTS リリースと最新の非 LTS リリース |
Linux (Fedora) | まだ EOL になっていないバージョン |
Linux (Debian) | 11 以降 |
アンドロイド | 8以降 |
iOS | 15.0以降 |
Linux では、Gnome デスクトップ環境を使用してテストします。このアプリは他の DE でも動作するはずですし、おそらく動作しますが、定期的にテストすることはありません。
以下は、プラットフォームごとのアプリの機能をまとめた表です。これは、必ずしも既存のリリースではなく、git の最新コードの現在の状態を反映することを目的としています。
窓 | Linux | macOS | アンドロイド | iOS | |
---|---|---|---|---|---|
OpenVPN | ✓ | ✓ | ✓ | ||
ワイヤーガード | ✓ | ✓ | ✓ | ✓ | ✓ |
耐量子トンネル | ✓ | ✓ | ✓ | ✓ | ✓ |
だいた | ✓ | ✓ | ✓ | ✓ | ✓ |
WireGuard マルチホップ | ✓ | ✓ | ✓ | ✓ | |
TCP 経由の WireGuard | ✓ | ✓ | ✓ | ✓ | ✓ |
Shadowsocks 上の WireGuard | ✓ | ✓ | ✓ | ✓ | |
Shadowsocks 上の OpenVPN | ✓ | ✓ | ✓ | ||
スプリットトンネリング | ✓ | ✓ | ✓ | ✓ | |
カスタムDNSサーバー | ✓ | ✓ | ✓ | ✓ | ✓ |
コンテンツブロッカー(広告など) | ✓ | ✓ | ✓ | ✓ | ✓ |
オプションのローカル ネットワーク アクセス | ✓ | ✓ | ✓ | ✓ | ✓* |
外部監査済み | ✓ | ✓ | ✓ | ✓ | ✓ |
* 現在の実装では、iOS ではローカル ネットワークに常にアクセスできます
このアプリはプライバシーを保護する VPN クライアントです。そのため、トラフィックの漏洩を阻止するために多大な努力が払われます。そして、基本的にすべての設定は、より安全/プライベートなオプションにデフォルト設定されます。ユーザーは、必要に応じて、より緩やかなルールを明示的に許可する必要があります。アプリがブロックおよび許可する内容、およびその仕組みの詳細については、専用のセキュリティに関するドキュメントを参照してください。
このリポジトリには、アプリの構築に必要なサブモジュールが含まれています。ただし、これらのサブモジュールの一部には、非常に大きく、アプリの構築には必要のない追加のサブモジュールもあります。したがって、OpenSSL、OpenVPN、およびその他のいくつかのプロジェクトのソース コードが必要でない限り、リポジトリの再帰的クローンは避けるべきです。代わりに、リポジトリを通常どおりクローンしてから、1 レベルのサブモジュールを取得します。
git clone https://github.com/mullvad/mullvadvpn-app.git
cd mullvadvpn-app
git submodule update --init
Android、Linux、macOS では、wireguard-go サブモジュールを再帰的にチェックアウトすることもできます。
git submodule update --init --recursive --depth=1 wireguard-go-rs
これが必要な理由の詳細については、wireguard-go-rs クレートを参照してください。
main
ブランチ上のすべてのコミットとリリース タグに署名します。チェックアウトを確認したい場合は、Mullvad のオープンソース ページで開発者キーを見つけることができます。
このリポジトリにはdist-assets/binaries
に git サブモジュールがあります。このサブモジュールには、アプリにバンドルする必要があるサードパーティ コードのバイナリとビルド スクリプトが含まれています。 OpenVPN、Wintunなど。
このサブモジュールは、このリポジトリと同じ整合性/セキュリティ標準に準拠しています。すべてのマージ コミットには署名する必要があります。そして、このメイン リポジトリは、バイナリ サブモジュールの署名付きマージ コミットのみを指す必要があります。
リポジトリの詳細については、バイナリ サブモジュールの README を参照してください。
デスクトップ プラットフォームでのアプリの構築については、ビルド手順を参照してください。
Android アプリの構築については、Android の手順を参照してください。
iOS アプリの構築については、iOS の手順を参照してください。
新しいリリースを作成する方法については、これを参照してください。
TALPID_FIREWALL_DEBUG
- ファイアウォールのデバッグに役立ちます。プラットフォームに応じて異なることを行います。
"1"
に設定します。pflog0
インターフェイスに記録するようにします。"all"
に設定します。"pass"
に設定します。"drop"
に設定します。 TALPID_FIREWALL_DONT_SET_SRC_VALID_MARK
- Linux 上でsrc_valid_mark
構成を設定しないようにデーモンに強制します。カーネル構成オプションが設定されているのは、厳密なリバース パス フィルタリングによってリレー トラフィックがデーモンに到達できなくなる可能性があるためです。リレー トラフィックを受信するインターフェイスでrp_filter
が1
に設定されており、 src_valid_mark
が1
に設定されていない場合、デーモンはリレー トラフィックを受信できません。
TALPID_DNS_MODULE
- DNS 構成に使用される方法を変更できます。デフォルトでは、これは自動的に検出されますが、以下のオプションのいずれかに設定して、特定の方法を選択することができます。
Linux
"static-file"
: /etc/resolv.conf
ファイルを直接変更します"resolvconf"
: resolvconf
プログラムを使用します。"systemd"
: DBus を介して systemd のresolved
サービスを使用します"network-manager"
: DBus 経由でNetworkManager
サービスを使用します窓
iphlpapi
: IP ヘルパー API を使用するnetsh
: netsh
プログラムを使用しますtcpip
: レジストリに TCP/IP パラメータを設定しますTALPID_FORCE_USERSPACE_WIREGUARD
- Linux 上の WireGuard のユーザー空間実装をデーモンに強制的に使用させます。
TALPID_DISABLE_OFFLINE_MONITOR
- ホストが常にオンラインであるとデーモンに強制します。
TALPID_NET_CLS_MOUNT_DIR
- Linux では、指定されたディレクトリにnet_cls
コントローラーがまだマウントされていない場合、デーモンに強制的にマウントさせます。
MULLVAD_MANAGEMENT_SOCKET_GROUP
- Linux および macOS では、管理インターフェイス UDS ソケットへのアクセスを、指定されたグループ内のユーザーに制限します。これは、そのグループ内のユーザーのみが CLI と GUI を使用できることを意味します。デフォルトでは、全員がソケットにアクセスできます。
MULLVAD_API_HOST
- API リクエストで使用するホスト名を設定します。たとえば、 api.mullvad.net
。
MULLVAD_API_ADDR
- API リクエストで使用する IP アドレスとポートを設定します。例: 10.10.1.2:443
。
MULLVAD_API_DISABLE_TLS
- API リクエストにはプレーン HTTP を使用します。
MULLVAD_CONNCHECK_HOST
- 接続チェック要求で使用するホスト名を設定します。たとえば、 am.i.mullvad.net
。
昇格されたシェルからsetx
を使用します。
setx TALPID_DISABLE_OFFLINE 1 /m
変更を有効にするには、デーモンを再起動します。
sc.exe stop mullvadvpn
sc.exe start mullvadvpn
systemctl edit mullvad-daemon.service
を使用して systemd ユニット ファイルを編集します。
[Service]
Environment = " TALPID_DISABLE_OFFLINE_MONITOR=1 "
変更を有効にするには、デーモンを再起動します。
sudo systemctl restart mullvad-daemon
launchctl
を使用します。
sudo launchctl setenv TALPID_DISABLE_OFFLINE_MONITOR 1
変更を有効にするには、デーモンを再起動します。
launchctl unload -w /Library/LaunchDaemons/net.mullvad.daemon.plist
launchctl load -w /Library/LaunchDaemons/net.mullvad.daemon.plist
MULLVAD_PATH
- 開発モードでの実行時にmullvad-problem-report
ツールを使用してフォルダーへのパスを変更できるようにします。デフォルトは/target/debug/
です。MULLVAD_DISABLE_UPDATE_NOTIFICATION
- 1
に設定すると、アップデートが利用可能になったときに GUI 通知が無効になります。 $ npm run develop
- ライブリロードを有効にしてアプリを開発します$ npm run lint
- lint コード$ npm run pack:
- プラットフォーム用に配布するアプリを準備します。
はlinux
、 mac
またはwin
です。$ npm test
- テストを実行しますトレイ アイコンを表示するための要件は、デスクトップ環境によって異なります。トレイ アイコンが表示されない場合は、次のいずれかのパッケージをインストールしてみてください。
libappindicator3-1
libappindicator1
libappindicator
GNOME を使用している場合は、次の GNOME Shell 拡張機能のいずれかをインストールしてみてください。
TopIconsFix
TopIcons Plus
electron-builder
の構成このデーモンは Rust に実装されており、いくつかのクレートに実装されています。最終的なデーモン バイナリを構築するメインまたはトップレベルのクレートはmullvad-daemon
であり、他のクレートに依存します。
一般に、デーモンはtalpid
で始まるクレートとmullvad
で始まるクレートの 2 つの部分に分割されていると見ることができます。 talpid
木箱は、ムルバド固有のものとはまったく無関係であると考えられています。 talpid
クレートは、デーモンが Mullvad アカウントの詳細を取得したり、VPN サーバー リストをダウンロードしたりする際に使用する API について何も知ることはできません。 talpid
コンポーネントは、追加のプライバシーおよび匿名性保持機能を備えた汎用 VPN クライアントと見なす必要があります。一方、名前にmullvad
が含まれるクレートは、 talpid
コンポーネントを利用して、安全な Mullvad 固有の VPN クライアントを構築します。
このリポジトリのドキュメントとコードで使用されるいくつかの一般的な用語の説明。
mullvad-daemon
Rust プログラムを指します。このヘッドレス プログラムは、デーモンの制御に使用できる管理インターフェイスを公開します。mullvad
という名前の Rust プログラム。 Mullvad VPN アプリのさまざまなコンポーネントによって読み書きされるファイル パスのリスト
Windows では、プロセスがシステム サービスとして実行されると、変数%LOCALAPPDATA%
はC:Windowssystem32configsystemprofileAppDataLocal
に展開されます。
すべてのディレクトリ パスは、 mullvad-paths
クレートで定義され、そこから取得されます。
設定ディレクトリは、 MULLVAD_SETTINGS_DIR
環境変数を設定することで変更できます。
プラットフォーム | パス |
---|---|
Linux | /etc/mullvad-vpn/ |
macOS | /etc/mullvad-vpn/ |
窓 | %LOCALAPPDATA%Mullvad VPN |
アンドロイド | getFilesDir() |
ログ ディレクトリは、 MULLVAD_LOG_DIR
環境変数を設定することで変更できます。
プラットフォーム | パス |
---|---|
Linux | /var/log/mullvad-vpn/ + systemd |
macOS | /var/log/mullvad-vpn/ |
窓 | C:ProgramDataMullvad VPN |
アンドロイド | getFilesDir() |
キャッシュ ディレクトリは、 MULLVAD_CACHE_DIR
環境変数を設定することで変更できます。
プラットフォーム | パス |
---|---|
Linux | /var/cache/mullvad-vpn/ |
macOS | /Library/Caches/mullvad-vpn/ |
窓 | C:ProgramDataMullvad VPNcache |
アンドロイド | getCacheDir() |
RPC アドレス ファイルへのフル パスは、 MULLVAD_RPC_SOCKET_PATH
環境変数を設定することで変更できます。
プラットフォーム | パス |
---|---|
Linux | /var/run/mullvad-vpn |
macOS | /var/run/mullvad-vpn |
窓 | //./pipe/Mullvad VPN |
アンドロイド | getNoBackupFilesDir() |
GUI には、ユーザーごとに構成される特定の設定ファイルがあります。パスはgui/packages/desktop/main/gui-settings.ts
ファイルに設定されます。
プラットフォーム | パス |
---|---|
Linux | $XDG_CONFIG_HOME/Mullvad VPN/gui_settings.json |
macOS | ~/Library/Application Support/Mullvad VPN/gui_settings.json |
窓 | %LOCALAPPDATA%Mullvad VPNgui_settings.json |
アンドロイド | Android のlogcat に存在します |
アイコンの詳細については、グラフィックスの README を参照してください。
ロケールと翻訳の処理方法については、こちらをご覧ください。
Android アプリ固有の手順については、こちらを参照してください。
Mullvad は外部の侵入テスト会社を利用して、この VPN アプリのセキュリティ監査を実施しました。詳細については、監査の Readme をご覧ください。
著作権 (C) 2024 Mullvad VPN AB
このプログラムはフリー ソフトウェアです。Free Software Foundation が発行する GNU General Public License の条件 (ライセンスのバージョン 3、または (ユーザーの選択による) 以降のバージョン) に基づいて再配布したり、変更したりすることができます。
完全なライセンス契約については、LICENSE.md ファイルを参照してください。
iOS アプリのソース コードは、このリポジトリ内の他のすべてのものと同様に GPL-3 ライセンスを受けています。ただし、Apple App Store で配布されるアプリは GPL ライセンスを受けておらず、Apple App Store EULA の対象となります。