欢迎来到 Mulvad VPN 客户端应用程序源代码存储库。这是 Mulvad VPN 服务的 VPN 客户端软件。有关该服务的更多信息,请访问我们的网站 mullvad.net(也可以通过我们的洋葱服务上的 Tor 访问)。
该存储库包含该应用程序的桌面和移动版本的所有源代码。对于桌面,这包括系统服务/守护程序 ( mullvad-daemon
)、图形用户界面 (GUI) 和命令行界面 (CLI)。 Android 应用程序使用相同的支持系统服务来实现隧道和安全,但在 android/. iOS 由驻留在 ios/ 中的完全独立的实现组成。
我们的网站和 Github 上提供了适用于 macOS、Windows、Linux 和 Android 的构建和签名版本。 Android 应用程序还可在 Google Play 和 F-Droid 上下载,iOS 版本则可在 App Store 上下载。
您可以在 Mulvad 的开源页面上找到我们的代码签名密钥以及有关如何以加密方式验证您的下载的说明。
这些是应用程序官方支持的操作系统及其版本。它可能适用于更多版本,但我们不会对这些版本进行测试,也无法保证质量或安全性。
操作系统/平台 | 支持的版本 |
---|---|
视窗 | 10 和 11 |
macOS | 最新的三个主要版本 |
Linux(Ubuntu) | 两个最新的 LTS 版本和最新的非 LTS 版本 |
Linux(软呢帽) | 尚未 EOL 的版本 |
Linux(Debian) | 11 及更新版本 |
安卓 | 8 及更新版本 |
iOS系统 | 15.0 及更高版本 |
在 Linux 上,我们使用 Gnome 桌面环境进行测试。该应用程序应该而且可能确实可以在其他桌面环境中运行,但我们不会定期测试这些。
这是一个包含跨平台应用程序功能的表格。这旨在反映 git 中最新代码的当前状态,而不一定是任何现有版本。
视窗 | Linux | macOS | 安卓 | iOS系统 | |
---|---|---|---|---|---|
开放VPN | ✓ | ✓ | ✓ | ||
线卫 | ✓ | ✓ | ✓ | ✓ | ✓ |
抗量子隧道 | ✓ | ✓ | ✓ | ✓ | ✓ |
戴塔 | ✓ | ✓ | ✓ | ✓ | ✓ |
WireGuard 多跳 | ✓ | ✓ | ✓ | ✓ | |
基于 TCP 的 WireGuard | ✓ | ✓ | ✓ | ✓ | ✓ |
Shadowsocks 上的 WireGuard | ✓ | ✓ | ✓ | ✓ | |
基于 Shadowsocks 的 OpenVPN | ✓ | ✓ | ✓ | ||
分裂隧道 | ✓ | ✓ | ✓ | ✓ | |
自定义 DNS 服务器 | ✓ | ✓ | ✓ | ✓ | ✓ |
内容拦截器(广告等) | ✓ | ✓ | ✓ | ✓ | ✓ |
可选本地网络访问 | ✓ | ✓ | ✓ | ✓ | ✓* |
外部审核 | ✓ | ✓ | ✓ | ✓ | ✓ |
* 在当前实现的 iOS 上,本地网络始终可访问
这个应用程序是一个保护隐私的 VPN 客户端。因此,它不遗余力地阻止流量泄漏。基本上所有设置都默认为更安全/私密的选项。如果需要,用户必须明确允许更宽松的规则。有关应用程序阻止和允许的内容以及其操作方式的详细信息,请参阅专用的安全文档。
该存储库包含构建应用程序所需的子模块。但是,其中一些子模块还具有其他非常大的子模块,不需要构建应用程序。因此,除非您想要 OpenSSL、OpenVPN 和其他一些项目的源代码,否则您应该避免对存储库进行递归克隆。相反,正常克隆存储库,然后获取一级子模块:
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
分支上的每个提交以及发布标签进行签名。如果您想验证您的结帐,您可以在 Mulvad 的开源页面上找到我们的开发人员密钥。
该存储库在dist-assets/binaries
中有一个 git 子模块。该子模块包含我们需要与应用程序捆绑的第三方代码的二进制文件和构建脚本。如OpenVPN、Wintun等。
该子模块符合与该存储库相同的完整性/安全标准。每个合并提交都应该签名。这个主存储库应该只指向二进制子模块的签名合并提交。
有关该存储库的更多详细信息,请参阅二进制子模块的自述文件。
请参阅构建说明以帮助在桌面平台上构建应用程序。
要构建 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 帮助器 APInetsh
:使用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
。
从提升的 shell 中使用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 实现的,并在多个 crate 中实现。构建最终守护程序二进制文件的主要或顶级包是mullvad-daemon
,它依赖于其他包。
一般来说,我们可以将守护进程分为两部分,以talpid
开头的 crate 和以mullvad
开头的 crate。这些talpid
板条箱应该与穆尔瓦德的具体事物完全无关。例如,一个talpid
crate 不允许了解有关守护进程获取 Mullvad 帐户详细信息或下载 VPN 服务器列表的 API 的任何信息。 talpid
组件应被视为具有额外隐私和匿名保护功能的通用 VPN 客户端。另一方面,名称中带有mullvad
的箱子则利用talpid
组件来构建安全且 Mullvad 特定的 VPN 客户端。
对此存储库中的文档和代码中使用的一些常用单词的解释。
mullvad-daemon
Rust 程序。这个无头程序公开了一个管理接口,可用于控制守护进程mullvad
Rust 程序,它是 Mullvad VPN 应用程序的基于终端的前端。 Mulvad 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() |
可以通过设置MULLVAD_RPC_SOCKET_PATH
环境变量来更改 RPC 地址文件的完整路径。
平台 | 小路 |
---|---|
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 中 |
有关图标的信息,请参阅图形自述文件。
有关如何处理语言环境和翻译的说明可在此处找到。
有关 Android 应用程序的特定说明,请参阅此处。
Mulvad 已使用外部渗透测试公司来对该 VPN 应用程序进行安全审核。请在审计自述文件中阅读有关它们的更多信息。
版权所有 (C) 2024 Mulvad VPN AB
该程序是自由软件:您可以根据自由软件基金会发布的 GNU 通用公共许可证(许可证的第 3 版)或(由您选择)任何更高版本的条款重新分发和/或修改它。
有关完整许可协议,请参阅 LICENSE.md 文件
iOS 应用程序的源代码与此存储库中的其他所有内容一样均获得 GPL-3 许可。但Apple App Store 上的分布式应用程序并未获得GPL 许可,它属于Apple App Store EULA 的管辖范围。