Willkommen im Quellcode-Repository der Mullvad VPN-Client-App. Dies ist die VPN-Client-Software für den Mullvad VPN-Dienst. Weitere Informationen zum Service finden Sie auf unserer Website mullvad.net (auch über Tor auf unserem Onion-Service erreichbar).
Dieses Repository enthält den gesamten Quellcode für die Desktop- und Mobilversionen der App. Für den Desktop umfasst dies den Systemdienst/Daemon ( mullvad-daemon
), eine grafische Benutzeroberfläche (GUI) und eine Befehlszeilenschnittstelle (CLI). Die Android-App verwendet denselben Backing-Systemdienst für den Tunnel und die Sicherheit, verfügt jedoch über ein dediziertes Frontend in Android/. iOS besteht aus einer völlig eigenständigen Implementierung, die sich in ios/ befindet.
Auf unserer Website und auf Github sind erstellte und signierte Versionen für macOS, Windows, Linux und Android verfügbar. Die Android-App ist auch bei Google Play und F-Droid sowie die iOS-Version im App Store verfügbar.
Auf der Open-Source-Seite von Mullvad finden Sie unsere Codesignaturschlüssel sowie Anweisungen zur kryptografischen Überprüfung Ihres Downloads.
Dies sind die Betriebssysteme und deren Versionen, die die App offiziell unterstützt. Es könnte auf vielen weiteren Versionen funktionieren, aber wir testen diese nicht und können die Qualität oder Sicherheit nicht garantieren.
Betriebssystem/Plattform | Unterstützte Versionen |
---|---|
Windows | 10 und 11 |
macOS | Die drei neuesten Hauptveröffentlichungen |
Linux (Ubuntu) | Die beiden neuesten LTS-Versionen und die neuesten Nicht-LTS-Versionen |
Linux (Fedora) | Die Versionen, die noch nicht EOL sind |
Linux (Debian) | 11 und neuer |
Android | 8 und neuer |
iOS | 15.0 und neuer |
Unter Linux testen wir mit der Gnome-Desktopumgebung. Die App sollte und wird wahrscheinlich auch in anderen DEs funktionieren, aber wir testen diese nicht regelmäßig.
Hier ist eine Tabelle mit den Funktionen der App auf allen Plattformen. Dies soll den aktuellen Stand des neuesten Codes in Git widerspiegeln, nicht unbedingt eine bestehende Version.
Windows | Linux | macOS | Android | iOS | |
---|---|---|---|---|---|
OpenVPN | ✓ | ✓ | ✓ | ||
WireGuard | ✓ | ✓ | ✓ | ✓ | ✓ |
Quantenresistente Tunnel | ✓ | ✓ | ✓ | ✓ | ✓ |
DAITA | ✓ | ✓ | ✓ | ✓ | ✓ |
WireGuard-Multihop | ✓ | ✓ | ✓ | ✓ | |
WireGuard über TCP | ✓ | ✓ | ✓ | ✓ | ✓ |
WireGuard über Shadowsocks | ✓ | ✓ | ✓ | ✓ | |
OpenVPN über Shadowsocks | ✓ | ✓ | ✓ | ||
Split-Tunneling | ✓ | ✓ | ✓ | ✓ | |
Benutzerdefinierter DNS-Server | ✓ | ✓ | ✓ | ✓ | ✓ |
Inhaltsblocker (Werbung usw.) | ✓ | ✓ | ✓ | ✓ | ✓ |
Optionaler lokaler Netzwerkzugriff | ✓ | ✓ | ✓ | ✓ | ✓* |
Extern geprüft | ✓ | ✓ | ✓ | ✓ | ✓ |
* Das lokale Netzwerk ist unter iOS mit der aktuellen Implementierung immer erreichbar
Diese App ist ein datenschutzerhaltender VPN-Client. Daher werden große Anstrengungen unternommen, um Verkehrslecks zu verhindern. Und im Grunde sind alle Einstellungen standardmäßig auf die sicherere/privatere Option eingestellt. Der Benutzer muss auf Wunsch explizit weitere lockere Regeln zulassen. Einzelheiten darüber, was die App blockiert und zulässt und wie sie dies tut, finden Sie im entsprechenden Sicherheitsdokument.
Dieses Repository enthält Submodule, die zum Erstellen der App benötigt werden. Einige dieser Submodule verfügen jedoch auch über weitere Submodule, die recht groß sind und zum Erstellen der App nicht benötigt werden. Wenn Sie also nicht den Quellcode für OpenSSL, OpenVPN und einige andere Projekte benötigen, sollten Sie einen rekursiven Klon des Repositorys vermeiden. Klonen Sie stattdessen das Repository normal und erhalten Sie dann eine Ebene von Submodulen:
git clone https://github.com/mullvad/mullvadvpn-app.git
cd mullvadvpn-app
git submodule update --init
Unter Android, Linux und macOS möchten Sie das Submodul „wireguard-go“ auch rekursiv auschecken:
git submodule update --init --recursive --depth=1 wireguard-go-rs
Weitere Details dazu, warum dies notwendig ist, finden Sie in der Wireguard-go-rs-Kiste.
Wir signieren jedes Commit im main
sowie unsere Release-Tags. Wenn Sie Ihren Checkout verifizieren möchten, finden Sie unsere Entwicklerschlüssel auf der Open-Source-Seite von Mullvad.
Dieses Repository verfügt über ein Git-Submodul unter dist-assets/binaries
. Dieses Submodul enthält Binärdateien und Build-Skripte für Code von Drittanbietern, den wir mit der App bündeln müssen. Wie OpenVPN, Wintun usw.
Dieses Submodul entspricht denselben Integritäts-/Sicherheitsstandards wie dieses Repository. Jeder Merge-Commit sollte signiert sein. Und dieses Haupt-Repository sollte immer nur auf einen signierten Merge-Commit des Binär-Submoduls verweisen.
Weitere Einzelheiten zu diesem Repository finden Sie in der README-Datei des Binär-Submoduls.
Weitere Informationen zum Erstellen der App auf Desktop-Plattformen finden Sie in den Build-Anweisungen.
Informationen zum Erstellen der Android-App finden Sie in der Anleitung für Android.
Informationen zum Erstellen der iOS-App finden Sie in den Anweisungen für iOS.
Hier finden Sie Anweisungen zum Erstellen einer neuen Version.
TALPID_FIREWALL_DEBUG
– Hilft beim Debuggen der Firewall. Macht je nach Plattform unterschiedliche Dinge:
"1"
setzen, um Paketzähler zu allen Firewall-Regeln hinzuzufügen.pflog0
Schnittstelle zu protokollieren."all"
setzen, um die Protokollierung zu allen Regeln hinzuzufügen."pass"
setzen, um Protokollierung zu den Regeln hinzuzufügen, die Pakete zulassen."drop"
setzen, um Protokollierung zu Regeln hinzuzufügen, die Pakete blockieren. TALPID_FIREWALL_DONT_SET_SRC_VALID_MARK
– Zwingt den Daemon, src_valid_mark
-Konfiguration unter Linux nicht festzulegen. Die Kernel-Konfigurationsoption ist festgelegt, da andernfalls eine strikte Reverse-Path-Filterung verhindern könnte, dass Relay-Verkehr den Daemon erreicht. Wenn rp_filter
auf der Schnittstelle, die Relay-Verkehr empfängt, auf 1
gesetzt ist und src_valid_mark
nicht auf 1
gesetzt ist, kann der Daemon keinen Relay-Verkehr empfangen.
TALPID_DNS_MODULE
– Ermöglicht das Ändern der Methode, die für die DNS-Konfiguration verwendet wird. Standardmäßig wird dies automatisch erkannt, Sie können jedoch eine der folgenden Optionen festlegen, um eine bestimmte Methode auszuwählen.
Linux
"static-file"
: Ändern Sie die Datei /etc/resolv.conf
direkt"resolvconf"
: Verwenden Sie das resolvconf
-Programm"systemd"
: Verwenden Sie resolved
Dienst von systemd über DBus"network-manager"
: NetworkManager
Dienst über DBus verwendenWindows
iphlpapi
: Verwenden Sie die IP-Hilfs-APInetsh
: Verwenden Sie das netsh
-Programmtcpip
: TCP/IP-Parameter in der Registrierung festlegen TALPID_FORCE_USERSPACE_WIREGUARD
– Zwingt den Daemon, die Userspace-Implementierung von WireGuard unter Linux zu verwenden.
TALPID_DISABLE_OFFLINE_MONITOR
– Zwingt den Daemon, immer davon auszugehen, dass der Host online ist.
TALPID_NET_CLS_MOUNT_DIR
– Zwingt den Daemon unter Linux dazu, den net_cls
-Controller im angegebenen Verzeichnis zu mounten, wenn er noch nicht gemountet ist.
MULLVAD_MANAGEMENT_SOCKET_GROUP
– Unter Linux und macOS beschränkt dies den Zugriff auf den UDS-Socket der Verwaltungsschnittstelle auf Benutzer in der angegebenen Gruppe. Dies bedeutet, dass nur Benutzer in dieser Gruppe die CLI und GUI verwenden können. Standardmäßig hat jeder Zugriff auf den Socket.
MULLVAD_API_HOST
– Legen Sie den Hostnamen fest, der in API-Anfragen verwendet werden soll. Zum Beispiel api.mullvad.net
.
MULLVAD_API_ADDR
– Legen Sie die IP-Adresse und den Port fest, die in API-Anfragen verwendet werden sollen. ZB 10.10.1.2:443
.
MULLVAD_API_DISABLE_TLS
– Verwenden Sie einfaches HTTP für API-Anfragen.
MULLVAD_CONNCHECK_HOST
– Legen Sie den Hostnamen fest, der in Verbindungsprüfungsanfragen verwendet werden soll. ZB am.i.mullvad.net
.
Verwenden Sie setx
von einer erhöhten Shell aus:
setx TALPID_DISABLE_OFFLINE 1 /m
Damit die Änderung wirksam wird, starten Sie den Daemon neu:
sc.exe stop mullvadvpn
sc.exe start mullvadvpn
Bearbeiten Sie die Systemd-Unit-Datei über systemctl edit mullvad-daemon.service
:
[Service]
Environment = " TALPID_DISABLE_OFFLINE_MONITOR=1 "
Damit die Änderung wirksam wird, starten Sie den Daemon neu:
sudo systemctl restart mullvad-daemon
Verwenden Sie launchctl
:
sudo launchctl setenv TALPID_DISABLE_OFFLINE_MONITOR 1
Damit die Änderung wirksam wird, starten Sie den Daemon neu:
launchctl unload -w /Library/LaunchDaemons/net.mullvad.daemon.plist
launchctl load -w /Library/LaunchDaemons/net.mullvad.daemon.plist
MULLVAD_PATH
– Ermöglicht das Ändern des Pfads zum Ordner mit dem Tool mullvad-problem-report
, wenn es im Entwicklungsmodus ausgeführt wird. Standardmäßig: /target/debug/
.MULLVAD_DISABLE_UPDATE_NOTIFICATION
– Wenn auf 1
gesetzt, wird die GUI-Benachrichtigung deaktiviert, wenn ein Update verfügbar ist. $ npm run develop
– App mit aktiviertem Live-Reload entwickeln$ npm run lint
– Lint-Code$ npm run pack:
– Bereiten Sie die App für die Verteilung für Ihre Plattform vor. Wobei
linux
, mac
oder win
sein kann$ npm test
– Tests ausführen Die Anforderungen für die Anzeige eines Taskleistensymbols variieren je nach Desktop-Umgebung. Wenn das Taskleistensymbol nicht angezeigt wird, versuchen Sie, eines dieser Pakete zu installieren:
libappindicator3-1
libappindicator1
libappindicator
Wenn Sie GNOME verwenden, versuchen Sie, eine dieser GNOME-Shell-Erweiterungen zu installieren:
TopIconsFix
TopIcons Plus
electron-builder
Der Daemon ist in Rust implementiert und in mehreren Kisten implementiert. Die Haupt- oder oberste Kiste, die die endgültige Daemon-Binärdatei erstellt, ist mullvad-daemon
, die dann von den anderen abhängig ist.
Im Allgemeinen kann man den Daemon als in zwei Teile gespalten betrachten, die Crates beginnen mit talpid
und die Crates beginnen mit mullvad
. Die talpid
-Kisten sollen überhaupt nichts mit Mullvad-spezifischen Dingen zu tun haben. Ein talpid
-Crate darf nichts über die API wissen, über die der Daemon beispielsweise Mullvad-Kontodetails abruft oder VPN-Serverlisten herunterlädt. Die talpid
-Komponenten sollten als generischer VPN-Client mit zusätzlichen Funktionen zum Schutz der Privatsphäre und Anonymität betrachtet werden. Die Kisten, die mullvad
in ihrem Namen tragen, nutzen hingegen die talpid
-Komponenten, um einen sicheren und Mullvad-spezifischen VPN-Client zu erstellen.
Erklärungen für einige gebräuchliche Wörter, die in der Dokumentation und im Code in diesem Repository verwendet werden.
mullvad-daemon
. Dieses Headless-Programm stellt eine Verwaltungsschnittstelle zur Verfügung, die zur Steuerung des Daemons verwendet werden kannmullvad
, ein terminalbasiertes Frontend für die Mullvad VPN-App. Eine Liste der Dateipfade, die von den verschiedenen Komponenten der Mullvad VPN-App geschrieben und gelesen werden
Wenn unter Windows ein Prozess als Systemdienst ausgeführt wird, wird die Variable %LOCALAPPDATA%
zu C:Windowssystem32configsystemprofileAppDataLocal
erweitert.
Alle Verzeichnispfade werden in der Kiste mullvad-paths
definiert und aus dieser abgerufen.
Das Einstellungsverzeichnis kann durch Festlegen der Umgebungsvariablen MULLVAD_SETTINGS_DIR
geändert werden.
Plattform | Weg |
---|---|
Linux | /etc/mullvad-vpn/ |
macOS | /etc/mullvad-vpn/ |
Windows | %LOCALAPPDATA%Mullvad VPN |
Android | getFilesDir() |
Das Protokollverzeichnis kann durch Festlegen der Umgebungsvariablen MULLVAD_LOG_DIR
geändert werden.
Plattform | Weg |
---|---|
Linux | /var/log/mullvad-vpn/ + systemd |
macOS | /var/log/mullvad-vpn/ |
Windows | C:ProgramDataMullvad VPN |
Android | getFilesDir() |
Das Cache-Verzeichnis kann durch Festlegen der Umgebungsvariablen MULLVAD_CACHE_DIR
geändert werden.
Plattform | Weg |
---|---|
Linux | /var/cache/mullvad-vpn/ |
macOS | /Library/Caches/mullvad-vpn/ |
Windows | C:ProgramDataMullvad VPNcache |
Android | getCacheDir() |
Der vollständige Pfad zur RPC-Adressdatei kann durch Festlegen der Umgebungsvariablen MULLVAD_RPC_SOCKET_PATH
geändert werden.
Plattform | Weg |
---|---|
Linux | /var/run/mullvad-vpn |
macOS | /var/run/mullvad-vpn |
Windows | //./pipe/Mullvad VPN |
Android | getNoBackupFilesDir() |
Die GUI verfügt über eine spezifische Einstellungsdatei, die für jeden Benutzer konfiguriert wird. Der Pfad wird in der Datei gui/packages/desktop/main/gui-settings.ts
festgelegt.
Plattform | Weg |
---|---|
Linux | $XDG_CONFIG_HOME/Mullvad VPN/gui_settings.json |
macOS | ~/Library/Application Support/Mullvad VPN/gui_settings.json |
Windows | %LOCALAPPDATA%Mullvad VPNgui_settings.json |
Android | Im logcat von Android vorhanden |
Informationen zu Symbolen finden Sie in der README-Datei zu Grafiken.
Anweisungen zum Umgang mit Gebietsschemata und Übersetzungen finden Sie hier.
Anweisungen speziell für die Android-App finden Sie hier.
Mullvad hat externe Pentesting-Unternehmen beauftragt, Sicherheitsüberprüfungen dieser VPN-App durchzuführen. Lesen Sie mehr darüber in der Audit-Readme-Datei.
Copyright (C) 2024 Mullvad VPN AB
Dieses Programm ist freie Software: Sie können es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation veröffentlicht, entweder Version 3 der Lizenz oder (nach Ihrer Wahl) einer späteren Version weiterverbreiten und/oder ändern.
Die vollständige Lizenzvereinbarung finden Sie in der Datei LICENSE.md
Der Quellcode für die iOS-App ist wie alles andere in diesem Repository GPL-3-lizenziert. Die im Apple App Store vertriebene App ist jedoch nicht GPL-lizenziert, sondern unterliegt der Apple App Store EULA.