Bienvenue dans le référentiel de code source de l'application client Mullvad VPN. Il s'agit du logiciel client VPN pour le service Mullvad VPN. Pour plus d'informations sur le service, veuillez visiter notre site Web, mullvad.net (également accessible via Tor sur notre service onion).
Ce référentiel contient tout le code source des versions de bureau et mobile de l'application. Pour le bureau, cela inclut le service/démon système ( mullvad-daemon
), une interface utilisateur graphique (GUI) et une interface de ligne de commande (CLI). L'application Android utilise le même service de système de support pour le tunnel et la sécurité, mais dispose d'une interface dédiée dans Android/. iOS consiste en une implémentation entièrement autonome qui réside dans ios/.
Des versions construites et signées pour macOS, Windows, Linux et Android sont disponibles sur notre site Web et sur Github. L'application Android est également disponible sur Google Play et F-Droid et la version iOS sur App Store.
Vous pouvez trouver nos clés de signature de code ainsi que des instructions sur la façon de vérifier cryptographiquement votre téléchargement sur la page Open Source de Mullvad.
Il s'agit des systèmes d'exploitation et de leurs versions officiellement pris en charge par l'application. Il est possible que cela fonctionne sur de nombreuses autres versions, mais nous ne les testons pas et ne pouvons garantir la qualité ou la sécurité.
Système d'exploitation/plateforme | Versions prises en charge |
---|---|
Fenêtres | 10 et 11 |
macOS | Les trois dernières versions majeures |
Linux (Ubuntu) | Les deux dernières versions LTS et les dernières versions non LTS |
Linux (Fedora) | Les versions qui ne sont pas encore EOL |
Linux (Debian) | 11 et plus récent |
Androïde | 8 et plus récent |
IOS | 15.0 et plus récent |
Sous Linux, nous testons en utilisant l'environnement de bureau Gnome. L'application devrait fonctionner et fonctionne probablement dans d'autres DE, mais nous ne les testons pas régulièrement.
Voici un tableau contenant les fonctionnalités de l'application sur toutes les plateformes. Ceci est destiné à refléter l'état actuel du dernier code dans git, pas nécessairement une version existante.
Fenêtres | Linux | macOS | Androïde | IOS | |
---|---|---|---|---|---|
OpenVPN | ✓ | ✓ | ✓ | ||
WireGuard | ✓ | ✓ | ✓ | ✓ | ✓ |
Tunnels résistants aux quantiques | ✓ | ✓ | ✓ | ✓ | ✓ |
DAÏTA | ✓ | ✓ | ✓ | ✓ | ✓ |
Multi-sauts WireGuard | ✓ | ✓ | ✓ | ✓ | |
WireGuard sur TCP | ✓ | ✓ | ✓ | ✓ | ✓ |
WireGuard sur Shadowsocks | ✓ | ✓ | ✓ | ✓ | |
OpenVPN sur Shadowsocks | ✓ | ✓ | ✓ | ||
Tunneling fractionné | ✓ | ✓ | ✓ | ✓ | |
Serveur DNS personnalisé | ✓ | ✓ | ✓ | ✓ | ✓ |
Bloqueurs de contenu (publicités, etc.) | ✓ | ✓ | ✓ | ✓ | ✓ |
Accès au réseau local en option | ✓ | ✓ | ✓ | ✓ | ✓* |
Audité en externe | ✓ | ✓ | ✓ | ✓ | ✓ |
* Le réseau local est toujours accessible sur iOS avec l'implémentation actuelle
Cette application est un client VPN préservant la confidentialité. En tant que tel, il met tout en œuvre pour arrêter les fuites de trafic. Et fondamentalement, tous les paramètres sont par défaut l'option la plus sécurisée/privée. L'utilisateur doit autoriser explicitement des règles plus souples s'il le souhaite. Consultez le document de sécurité dédié pour plus de détails sur ce que l'application bloque et autorise, ainsi que sur la manière dont elle le fait.
Ce référentiel contient les sous-modules nécessaires à la création de l'application. Cependant, certains de ces sous-modules comportent également d’autres sous-modules assez volumineux et non nécessaires à la création de l’application. Donc, à moins que vous ne souhaitiez le code source d'OpenSSL, OpenVPN et de quelques autres projets, vous devriez éviter un clone récursif du référentiel. Clonez plutôt le référentiel normalement, puis obtenez un niveau de sous-modules :
git clone https://github.com/mullvad/mullvadvpn-app.git
cd mullvadvpn-app
git submodule update --init
Sur Android, Linux et macOS, vous souhaitez également extraire le sous-module wireguard-go de manière récursive :
git submodule update --init --recursive --depth=1 wireguard-go-rs
De plus amples détails sur les raisons pour lesquelles cela est nécessaire peuvent être trouvés dans la caisse wireguard-go-rs.
Nous signons chaque commit sur la branche main
ainsi que nos balises de release. Si vous souhaitez vérifier votre paiement, vous pouvez trouver nos clés de développeur sur la page Open Source de Mullvad.
Ce référentiel a un sous-module git à dist-assets/binaries
. Ce sous-module contient des binaires et des scripts de construction pour le code tiers que nous devons regrouper avec l'application. Tels que OpenVPN, Wintun, etc.
Ce sous-module est conforme aux mêmes normes d'intégrité/sécurité que ce référentiel. Chaque commit de fusion doit être signé. Et ce référentiel principal ne devrait pointer que vers une validation de fusion signée du sous-module binaires.
Voir le README du sous-module binaires pour plus de détails sur ce référentiel.
Consultez les instructions de création pour obtenir de l’aide sur la création de l’application sur les plates-formes de bureau.
Pour créer l’application Android, consultez les instructions pour Android.
Pour créer l’application iOS, consultez les instructions pour iOS.
Consultez ceci pour obtenir des instructions sur la façon de créer une nouvelle version.
TALPID_FIREWALL_DEBUG
- Aide au débogage du pare-feu. Fait différentes choses selon la plateforme :
"1"
pour ajouter des compteurs de paquets à toutes les règles de pare-feu.pflog0
."all"
pour ajouter la journalisation à toutes les règles."pass"
pour ajouter la journalisation aux règles autorisant les paquets."drop"
pour ajouter la journalisation aux règles bloquant les paquets. TALPID_FIREWALL_DONT_SET_SRC_VALID_MARK
- Force le démon à ne pas définir la configuration src_valid_mark
sous Linux. L'option de configuration du noyau est définie car, dans le cas contraire, un filtrage strict du chemin inverse peut empêcher le trafic de relais d'atteindre le démon. Si rp_filter
est défini sur 1
sur l'interface qui recevra le trafic de relais et que src_valid_mark
n'est pas défini sur 1
, le démon ne pourra pas recevoir de trafic de relais.
TALPID_DNS_MODULE
- Permet de modifier la méthode qui sera utilisée pour la configuration DNS. Par défaut, cela est automatiquement détecté, mais vous pouvez le définir sur l'une des options ci-dessous pour choisir une méthode spécifique.
Linux
"static-file"
: modifiez directement le fichier /etc/resolv.conf
"resolvconf"
: utilisez le programme resolvconf
"systemd"
: utilisez le service resolved
de systemd via DBus"network-manager"
: utilisez le service NetworkManager
via DBusFenêtres
iphlpapi
: utilisez l'API d'assistance IPnetsh
: utilisez le programme netsh
tcpip
: définir les paramètres TCP/IP dans le registre TALPID_FORCE_USERSPACE_WIREGUARD
- Force le démon à utiliser l'implémentation en espace utilisateur de WireGuard sous Linux.
TALPID_DISABLE_OFFLINE_MONITOR
- Force le démon à toujours supposer que l'hôte est en ligne.
TALPID_NET_CLS_MOUNT_DIR
- Sous Linux, force le démon à monter le contrôleur net_cls
dans le répertoire spécifié s'il n'est pas déjà monté.
MULLVAD_MANAGEMENT_SOCKET_GROUP
- Sous Linux et macOS, cela restreint l'accès au socket UDS de l'interface de gestion aux utilisateurs du groupe spécifié. Cela signifie que seuls les utilisateurs de ce groupe peuvent utiliser la CLI et l'interface graphique. Par défaut, tout le monde a accès au socket.
MULLVAD_API_HOST
- Définissez le nom d'hôte à utiliser dans les requêtes API. Par exemple, api.mullvad.net
.
MULLVAD_API_ADDR
- Définissez l'adresse IP et le port à utiliser dans les requêtes API. Par exemple 10.10.1.2:443
.
MULLVAD_API_DISABLE_TLS
- Utilisez HTTP simple pour les requêtes API.
MULLVAD_CONNCHECK_HOST
- Définissez le nom d'hôte à utiliser dans les demandes de vérification de connexion. Par exemple, am.i.mullvad.net
.
Utilisez setx
à partir d'un shell élevé :
setx TALPID_DISABLE_OFFLINE 1 /m
Pour que la modification prenne effet, redémarrez le démon :
sc.exe stop mullvadvpn
sc.exe start mullvadvpn
Modifiez le fichier d'unité systemd via systemctl edit mullvad-daemon.service
:
[Service]
Environment = " TALPID_DISABLE_OFFLINE_MONITOR=1 "
Pour que la modification prenne effet, redémarrez le démon :
sudo systemctl restart mullvad-daemon
Utilisez launchctl
:
sudo launchctl setenv TALPID_DISABLE_OFFLINE_MONITOR 1
Pour que la modification prenne effet, redémarrez le démon :
launchctl unload -w /Library/LaunchDaemons/net.mullvad.daemon.plist
launchctl load -w /Library/LaunchDaemons/net.mullvad.daemon.plist
MULLVAD_PATH
- Permet de modifier le chemin d'accès au dossier avec l'outil mullvad-problem-report
lors de l'exécution en mode développement. La valeur par défaut est : /target/debug/
.MULLVAD_DISABLE_UPDATE_NOTIFICATION
- Si défini sur 1
, la notification GUI sera désactivée lorsqu'une mise à jour est disponible. $ npm run develop
- développer une application avec le rechargement en direct activé$ npm run lint
- code charpie$ npm run pack:
- prépare l'application pour la distribution pour votre plateforme. Où
peut être linux
, mac
ou win
$ npm test
- exécuter des tests Les exigences relatives à l'affichage d'une icône dans la barre d'état varient selon les différents environnements de bureau. Si l'icône de la barre d'état n'apparaît pas, essayez d'installer l'un de ces packages :
libappindicator3-1
libappindicator1
libappindicator
Si vous utilisez GNOME, essayez d'installer l'une de ces extensions GNOME Shell :
TopIconsFix
TopIcons Plus
electron-builder
Le démon est implémenté dans Rust et est implémenté dans plusieurs caisses. La caisse principale, ou de niveau supérieur, qui construit le binaire du démon final est mullvad-daemon
qui dépend ensuite des autres.
En général, on peut considérer le démon comme divisé en deux parties, les caisses commençant par talpid
et les caisses commençant par mullvad
. Les caisses talpid
sont censées n'avoir aucun rapport avec les choses spécifiques à Mullvad. Une caisse talpid
n'est pas autorisée à savoir quoi que ce soit sur l'API via laquelle le démon récupère les détails du compte Mullvad ou télécharge les listes de serveurs VPN par exemple. Les composants talpid
doivent être considérés comme un client VPN générique avec des fonctionnalités supplémentaires de préservation de la confidentialité et de l'anonymat. Les caisses ayant mullvad
dans leur nom utilisent quant à elles les composants talpid
pour créer un client VPN sécurisé et spécifique à Mullvad.
Explications de certains mots courants utilisés dans la documentation et le code de ce référentiel.
mullvad-daemon
. Ce programme sans tête expose une interface de gestion qui peut être utilisée pour contrôler le démonmullvad
qui est une interface basée sur un terminal pour l'application VPN Mullvad. Une liste des chemins de fichiers écrits et lus par les différents composants de l'application Mullvad VPN
Sous Windows, lorsqu'un processus s'exécute en tant que service système, la variable %LOCALAPPDATA%
se développe en C:Windowssystem32configsystemprofileAppDataLocal
.
Tous les chemins de répertoire sont définis et extraits de la caisse mullvad-paths
.
Le répertoire des paramètres peut être modifié en définissant la variable d'environnement MULLVAD_SETTINGS_DIR
.
Plate-forme | Chemin |
---|---|
Linux | /etc/mullvad-vpn/ |
macOS | /etc/mullvad-vpn/ |
Fenêtres | %LOCALAPPDATA%Mullvad VPN |
Androïde | getFilesDir() |
Le répertoire des journaux peut être modifié en définissant la variable d'environnement MULLVAD_LOG_DIR
.
Plate-forme | Chemin |
---|---|
Linux | /var/log/mullvad-vpn/ + systemd |
macOS | /var/log/mullvad-vpn/ |
Fenêtres | C:ProgramDataMullvad VPN |
Androïde | getFilesDir() |
Le répertoire du cache peut être modifié en définissant la variable d'environnement MULLVAD_CACHE_DIR
.
Plate-forme | Chemin |
---|---|
Linux | /var/cache/mullvad-vpn/ |
macOS | /Library/Caches/mullvad-vpn/ |
Fenêtres | C:ProgramDataMullvad VPNcache |
Androïde | getCacheDir() |
Le chemin complet du fichier d'adresses RPC peut être modifié en définissant la variable d'environnement MULLVAD_RPC_SOCKET_PATH
.
Plate-forme | Chemin |
---|---|
Linux | /var/run/mullvad-vpn |
macOS | /var/run/mullvad-vpn |
Fenêtres | //./pipe/Mullvad VPN |
Androïde | getNoBackupFilesDir() |
L'interface graphique dispose d'un fichier de paramètres spécifique qui est configuré pour chaque utilisateur. Le chemin est défini dans le fichier gui/packages/desktop/main/gui-settings.ts
.
Plate-forme | Chemin |
---|---|
Linux | $XDG_CONFIG_HOME/Mullvad VPN/gui_settings.json |
macOS | ~/Library/Application Support/Mullvad VPN/gui_settings.json |
Fenêtres | %LOCALAPPDATA%Mullvad VPNgui_settings.json |
Androïde | Présent dans logcat d'Android |
Voir les graphiques README pour plus d'informations sur les icônes.
Les instructions sur la façon de gérer les paramètres régionaux et les traductions se trouvent ici.
Pour obtenir des instructions spécifiques à l'application Android, cliquez ici.
Mullvad a fait appel à des sociétés de test d'intrusion externes pour effectuer des audits de sécurité de cette application VPN. Apprenez-en davantage à leur sujet dans le fichier Lisez-moi des audits.
Copyright (C) 2024 Mullvad VPN AB
Ce programme est un logiciel libre : vous pouvez le redistribuer et/ou le modifier selon les termes de la licence publique générale GNU telle que publiée par la Free Software Foundation, soit la version 3 de la licence, soit (à votre choix) toute version ultérieure.
Pour le contrat de licence complet, consultez le fichier LICENSE.md
Le code source de l'application iOS est sous licence GPL-3, comme tout le reste de ce référentiel. Mais l'application distribuée sur l'App Store d'Apple n'est pas sous licence GPL, elle relève du CLUF de l'App Store d'Apple.