百科.dev
全部条目AI 编程趋势榜开源项目技术资讯提交条目
登录
< 返回工具列表
M

mullvadvpn-app

> 编程语言
开源

Mullvad VPN 客户端应用程序,适用于桌面和移动设备

7.4K stars0 点赞0 次浏览
访问官网GitHub

工具介绍

Mullvad VPN 客户端应用程序,适用于桌面和移动设备

Mullvad VPN desktop and mobile app

Welcome to the Mullvad VPN client app source code repository. This is the VPN client software for the Mullvad VPN service. For more information about the service, please visit our website, mullvad.net (Also accessible via Tor on our onion service).

This repository contains all the source code for the desktop and mobile versions of the app. For desktop this includes the system service/daemon (mullvad-daemon), a graphical user interface (GUI) and a command line interface (CLI). The Android app uses the same backing system service for the tunnel and security but has a dedicated frontend in android/. iOS consists of a completely standalone implementation that resides in ios/.

Releases

There are built and signed releases for macOS, Windows, Linux and Android available on our website and on GitHub. The Android app is also available on Google Play and F-Droid and the iOS version on App Store.

You can find our code signing keys as well as instructions for how to cryptographically verify your download on [Mullvad's Open Source page].

Platform/OS support

See Supported Platforms for details on which operating systems, versions and architectures are supported, and which ones are covered by our automated test suite.

Features

Here is a table containing the features of the app across platforms. This is intended to reflect the current state of the latest code in git, not necessarily any existing release.

Windows Linux macOS Android iOS
WireGuard ✓ ✓ ✓ ✓ ✓
Quantum-resistant tunnels ✓ ✓ ✓ ✓ ✓
DAITA ✓ ✓ ✓ ✓ ✓
WireGuard multihop ✓ ✓ ✓ ✓ ✓
WireGuard over TCP ✓ ✓ ✓ ✓ ✓
WireGuard over Shadowsocks ✓ ✓ ✓ ✓ ✓
WireGuard over QUIC ✓ ✓ ✓ ✓ ✓
Lightweight WireGuard Obfuscation (LWO) ✓ ✓ ✓ ✓ ✓
Split tunneling ✓ ✓ ✓ ✓
Custom DNS server ✓ ✓ ✓ ✓ ✓
Content blockers (Ads etc) ✓ ✓ ✓ ✓ ✓
Optional local network access ✓ ✓ ✓ ✓ ✓*
Externally audited ✓ ✓ ✓ ✓ ✓

* The local network is always accessible on iOS with the current implementation

User security, privacy and anonymity

This app is a privacy preserving VPN client. As such it goes to great lengths to stop traffic leaks. And basically all settings default to the more secure/private option. The user has to explicitly allow more loose rules if desired. See the dedicated security document for details on what the app blocks and allows, as well as how it does it.

Secure development

Since the security of the users of the app is a top priority, by extension the security of the development and release process also becomes a top priority. This is something we work actively on.

Git signatures

All merge commits to the main branch must be PGP (gpg) signed in git. This signs off the entire feature branch. The individual commits in the feature branch do not need to be signed, unless they change one or more of the files deemed extra important.

The list of files requiring signatures to every commit that change them is defined in the verify-locked-down-signatures workflow.

Audits, pentests and external security reviews

This app is audited by external security experts and penetration testers every second year. We also carry out feature specific audits for certain security critical features and changes.

The results of these audits are always made public in their unredacted original form, for full transparency towards the users. See the audits readme for this.

Moreover, we welcome any individual to review the security of this app and submit any found issue to us. See SECURITY.md for more.

Checking out the code

This repository contains submodules needed for building the app. However, some of those submodules also have further submodules that are quite large and not needed to build the app. So unless you want the source code for all submodules you should avoid a recursive clone of the repository. Instead clone the repository normally and then get one level of submodules:

git clone https://github.com/mullvad/mullvadvpn-app.git
cd mullvadvpn-app
git submodule update --init

We sign every merge commit to the main branch as well as our release tags. If you would like to verify your checkout, you can find our developer keys on [Mullvad's Open Source page].

Binaries submodule

This repository has a git submodule at dist-assets/binaries. This submodule contains binaries and build scripts for third party code we need to bundle with the app, such as Wintun.

This submodule conforms to the same integrity/security standards as this repository. Every merge commit should be signed. And this main repository should only ever point to a signed merge commit of the binaries submodule.

See the binaries submodule's README for more details about that repository.

Building the app

See the build instructions for help building the app on desktop platforms.

For building the Android app, see the instructions for Android.

For building the iOS app, see the instructions for iOS.

Releasing the app

See this for instructions on how to make a new release.

Environment variables used by the service

  • TALPID_FIREWALL_DEBUG - Helps debugging the firewall. Does different things depending on platform:

    • Linux: Set to "1" to add packet counters to all firewall rules.
    • macOS: Makes rules log the packets they match to the pflog0 interface.
      • Set to "all" to add logging to all rules.
      • Set to "pass" to add logging to rules allowing packets.
      • Set to "drop" to add logging to rules blocking packets.
  • TALPID_FIREWALL_DONT_SET_SRC_VALID_MARK - Set this variable to 1 to stop the daemon from setting the net.ipv4.conf.all.src_valid_mark kernel parameter to 1 on Linux when a tunnel is established. The kernel config parameter is set by default, because otherwise strict reverse path filtering may prevent relay traffic from reaching the daemon. If rp_filter is set to 1 on the interface that will be receiving relay traffic, and src_valid_mark is not set to 1, the daemon will not be able to receive relay traffic.

  • TALPID_FIREWALL_DONT_SET_ARP_IGNORE - Set this variable to 1 to stop the daemon from setting the net.ipv4.conf.all.arp_ignore kernel parameter to 2 on Linux when a tunnel is established. The kernel config parameter is set by default, because otherwise an attacker who can send ARP requests to the device running Mullvad can figure out the in-tunnel IP.

  • TALPID_DNS_MODULE - Allows changing the method that will be used for DNS configuration. By default this is automatically detected, but you can set it to one of the options below to choose a specific method.

    • Linux

      • "static-file": change the /etc/resolv.conf file directly
      • "resolvconf": use the resolvconf program
      • "systemd": use systemd's resolved service through DBus
      • "network-manager": use NetworkManager service through DBus
    • Windows

      • iphlpapi: use the IP helper API
      • tcpip: set TCP/IP parameters in the registry
  • TALPID_DISABLE_LOCAL_DNS_RESOLVER - Set this variable to 1 to disable the local DNS resolver (macOS only).

  • TALPID_NEVER_FILTER_AAAA_QUERIES - Set this variable to 1 to never ignore DNS AAAA queries (macOS only).

  • TALPID_FORCE_USERSPACE_WIREGUARD - Forces the daemon to use the userspace implementation of WireGuard.

  • TALPID_DISABLE_OFFLINE_MONITOR - Forces the daemon to always assume the host is online.

  • TALPID_CGROUP2_FS - On Linux, forces the daemon to look for the cgroup2 filesystem at the specified path, instead of /sys/fs/cgroup. The cgroup2 used for split tunneling will be created in this directory.

  • TALPID_NET_CLS_MOUNT_DIR - On Linux, forces the daemon to mount the net_cls controller in the specified directory if it isn't mounted already. This will only have an effect on older systems where cgroup v1 is used for split tunneling.

  • MULLVAD_MANAGEMENT_SOCKET_GROUP - On Linux and macOS, this restricts access to the management interface UDS socket to users in the specified group. This means that only users in that group can use the CLI and GUI. By default, everyone has access to the socket.

  • MULLVAD_BACKTRACE_ON_FAULT - When enabled, if the daemon encounters a fault (e.g. SIGSEGV), it will log a backtrace to stdout, and to daemon.log. By default, this is disabled in release-builds and enabled in debug-builds. Set variable to 1 or 0 to explicitly enable or disable this feature. Logging the backtrace causes heap allocation. Allocation is not signal safe, but here it runs in the signal handler. This is technically undefined behavior and therefore disabled by default. This usually works, but enable at your own risk.

Development builds only

  • MULLVAD_API_HOST - Set the hostname to use in API requests. E.g. api.mullvad.net.

  • MULLVAD_API_ADDR - Set the IP address and port to use in API requests. E.g. 10.10.1.2:443.

  • MULLVAD_API_DISABLE_TLS - Use plain HTTP for API requests.

  • MULLVAD_CONNCHECK_HOST - Set the hostname to use in connection check requests. E.g. am.i.mullvad.net.

  • MULLVAD_ENABLE_DEV_UPDATES - Enable version checks in development builds.

Setting environment variables

Windows

Use setx from an elevated shell:

setx TALPID_DISABLE_OFFLINE 1 /m

For the change to take effect, restart the daemon:

sc.exe stop mullvadvpn
sc.exe start mullvadvpn

Linux

Edit the systemd unit file via systemctl edit mullvad-daemon.service:

[Service]
Environment="TALPID_DISABLE_OFFLINE_MONITOR=1"

For the change to take effect, restart the daemon:

sudo systemctl restart mullvad-daemon

macOS

Use plutil:

sudo plutil -replace EnvironmentVariables -json '{"TALPID_DISABLE_OFFLINE_MONITOR": "1"}' /Library/LaunchDaemons/net.mullvad.daemon.plist

For the change to take effect, restart the daemon:

launchctl unload -w /Library/LaunchDaemons/net.mullvad.daemon.plist
launchctl load -w /Library/LaunchDaemons/net.mullvad.daemon.plist

Environment variables used by the desktop frontend

  • MULLVAD_PATH - Allows changing the path to the folder with the mullvad-problem-report to

Issues· 0 开放

查看全部 Issues在 GitHub 打开

暂无开放 Issues,或尚未同步最近议题。

> 标签

Rustelectronnodejsopenvpnrust

暂无评论,来聊聊你的看法吧

> 工具信息

发布日期2026年8月1日
最后更新2026年9月17日
分类编程语言
定价开源

> 相关工具

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言