Bienvenido al repositorio de código fuente de la aplicación cliente VPN de Mullvad. Este es el software de cliente VPN para el servicio VPN de Mullvad. Para obtener más información sobre el servicio, visite nuestro sitio web, mullvad.net (también accesible a través de Tor en nuestro servicio cebolla).
Este repositorio contiene todo el código fuente de las versiones de escritorio y móvil de la aplicación. Para el escritorio, esto incluye el servicio/demonio del sistema ( mullvad-daemon
), una interfaz gráfica de usuario (GUI) y una interfaz de línea de comandos (CLI). La aplicación de Android utiliza el mismo servicio del sistema de respaldo para el túnel y la seguridad, pero tiene una interfaz dedicada en android/. iOS consta de una implementación completamente independiente que reside en ios/.
Hay versiones creadas y firmadas para macOS, Windows, Linux y Android disponibles en nuestro sitio web y en Github. La aplicación para Android también está disponible en Google Play y F-Droid y la versión para iOS en App Store.
Puede encontrar nuestras claves de firma de código, así como instrucciones sobre cómo verificar criptográficamente su descarga en la página de código abierto de Mullvad.
Estos son los sistemas operativos y sus versiones que soporta oficialmente la aplicación. Es posible que funcione en muchas más versiones, pero no las probamos y no podemos garantizar la calidad o la seguridad.
SO/Plataforma | Versiones compatibles |
---|---|
ventanas | 10 y 11 |
macos | Los tres últimos lanzamientos importantes. |
Linux (Ubuntu) | Las dos últimas versiones LTS y las últimas versiones no LTS |
Linux (Fedora) | Las versiones que aún no están en EOL |
Linux (Debian) | 11 y más reciente |
Androide | 8 y más reciente |
iOS | 15.0 y más reciente |
En Linux probamos usando el entorno de escritorio Gnome. La aplicación debería funcionar, y probablemente funciona, en otros DE, pero no los probamos regularmente.
Aquí hay una tabla que contiene las características de la aplicación en todas las plataformas. Esto pretende reflejar el estado actual del último código en git, no necesariamente cualquier versión existente.
ventanas | linux | macos | Androide | iOS | |
---|---|---|---|---|---|
OpenVPN | ✓ | ✓ | ✓ | ||
AlambreGuardia | ✓ | ✓ | ✓ | ✓ | ✓ |
Túneles resistentes a lo cuántico | ✓ | ✓ | ✓ | ✓ | ✓ |
DAITA | ✓ | ✓ | ✓ | ✓ | ✓ |
Salto múltiple WireGuard | ✓ | ✓ | ✓ | ✓ | |
WireGuard sobre TCP | ✓ | ✓ | ✓ | ✓ | ✓ |
WireGuard sobre Shadowsocks | ✓ | ✓ | ✓ | ✓ | |
OpenVPN sobre Shadowsocks | ✓ | ✓ | ✓ | ||
Túnel dividido | ✓ | ✓ | ✓ | ✓ | |
Servidor DNS personalizado | ✓ | ✓ | ✓ | ✓ | ✓ |
Bloqueadores de contenido (anuncios, etc.) | ✓ | ✓ | ✓ | ✓ | ✓ |
Acceso a la red local opcional | ✓ | ✓ | ✓ | ✓ | ✓* |
Auditado externamente | ✓ | ✓ | ✓ | ✓ | ✓ |
* La red local siempre es accesible en iOS con la implementación actual
Esta aplicación es un cliente VPN que preserva la privacidad. Por ello, hace todo lo posible para detener las fugas de tráfico. Y básicamente todas las configuraciones tienen por defecto la opción más segura/privada. El usuario debe permitir explícitamente reglas más flexibles si lo desea. Consulte el documento de seguridad dedicado para obtener detalles sobre lo que bloquea y permite la aplicación, así como cómo lo hace.
Este repositorio contiene submódulos necesarios para crear la aplicación. Sin embargo, algunos de esos submódulos también tienen otros submódulos que son bastante grandes y no son necesarios para crear la aplicación. Entonces, a menos que desee el código fuente de OpenSSL, OpenVPN y algunos otros proyectos, debe evitar una clonación recursiva del repositorio. En lugar de eso, clona el repositorio normalmente y luego obtén un nivel de submódulos:
git clone https://github.com/mullvad/mullvadvpn-app.git
cd mullvadvpn-app
git submodule update --init
En Android, Linux y macOS también desea verificar el submódulo wireguard-go de forma recursiva:
git submodule update --init --recursive --depth=1 wireguard-go-rs
Se pueden encontrar más detalles sobre por qué esto es necesario en la caja de wireguard-go-rs.
Firmamos cada compromiso en la rama main
, así como nuestras etiquetas de lanzamiento. Si desea verificar su pago, puede encontrar nuestras claves de desarrollador en la página de código abierto de Mullvad.
Este repositorio tiene un submódulo git en dist-assets/binaries
. Este submódulo contiene archivos binarios y scripts de compilación para código de terceros que debemos incluir con la aplicación. Como OpenVPN, Wintun, etc.
Este submódulo cumple con los mismos estándares de integridad/seguridad que este repositorio. Cada confirmación de fusión debe estar firmada. Y este repositorio principal sólo debería apuntar a una confirmación de fusión firmada del submódulo binarios.
Consulte el archivo README del submódulo binarios para obtener más detalles sobre ese repositorio.
Consulte las instrucciones de compilación para obtener ayuda para crear la aplicación en plataformas de escritorio.
Para crear la aplicación de Android, consulte las instrucciones para Android.
Para crear la aplicación de iOS, consulte las instrucciones para iOS.
Consulte esto para obtener instrucciones sobre cómo realizar una nueva versión.
TALPID_FIREWALL_DEBUG
: ayuda a depurar el firewall. Hace diferentes cosas según la plataforma:
"1"
para agregar contadores de paquetes a todas las reglas de firewall.pflog0
."all"
para agregar el registro a todas las reglas."pass"
para agregar el registro a las reglas que permiten paquetes."drop"
para agregar el registro a las reglas que bloquean los paquetes. TALPID_FIREWALL_DONT_SET_SRC_VALID_MARK
: obliga al demonio a no establecer la configuración src_valid_mark
en Linux. La opción de configuración del kernel está configurada porque, de lo contrario, un filtrado estricto de ruta inversa puede impedir que el tráfico de retransmisión llegue al demonio. Si rp_filter
está configurado en 1
en la interfaz que recibirá tráfico de retransmisión y src_valid_mark
no está configurado en 1
, el demonio no podrá recibir tráfico de retransmisión.
TALPID_DNS_MODULE
: permite cambiar el método que se utilizará para la configuración de DNS. De forma predeterminada, esto se detecta automáticamente, pero puede configurarlo en una de las siguientes opciones para elegir un método específico.
linux
"static-file"
: cambia el archivo /etc/resolv.conf
directamente"resolvconf"
: use el programa resolvconf
"systemd"
: utiliza el servicio resolved
de systemd a través de DBus"network-manager"
: utiliza el servicio NetworkManager
a través de DBusventanas
iphlpapi
: utiliza la API auxiliar de IPnetsh
: usa el programa netsh
tcpip
: establece los parámetros TCP/IP en el registro TALPID_FORCE_USERSPACE_WIREGUARD
: obliga al demonio a utilizar la implementación del espacio de usuario de WireGuard en Linux.
TALPID_DISABLE_OFFLINE_MONITOR
: obliga al demonio a asumir siempre que el host está en línea.
TALPID_NET_CLS_MOUNT_DIR
: en Linux, obliga al demonio a montar el controlador net_cls
en el directorio especificado si aún no está montado.
MULLVAD_MANAGEMENT_SOCKET_GROUP
: en Linux y macOS, esto restringe el acceso al socket UDS de la interfaz de administración a los usuarios del grupo especificado. Esto significa que solo los usuarios de ese grupo pueden utilizar la CLI y la GUI. De forma predeterminada, todos tienen acceso al socket.
MULLVAD_API_HOST
: establece el nombre de host que se utilizará en las solicitudes de API. Por ejemplo, api.mullvad.net
.
MULLVAD_API_ADDR
: establece la dirección IP y el puerto que se utilizarán en las solicitudes de API. Por ejemplo, 10.10.1.2:443
.
MULLVAD_API_DISABLE_TLS
: utilice HTTP simple para solicitudes de API.
MULLVAD_CONNCHECK_HOST
: establece el nombre de host que se utilizará en las solicitudes de verificación de conexión. Por ejemplo, am.i.mullvad.net
.
Utilice setx
desde un shell elevado:
setx TALPID_DISABLE_OFFLINE 1 /m
Para que el cambio surta efecto, reinicie el demonio:
sc.exe stop mullvadvpn
sc.exe start mullvadvpn
Edite el archivo de la unidad systemd mediante systemctl edit mullvad-daemon.service
:
[Service]
Environment = " TALPID_DISABLE_OFFLINE_MONITOR=1 "
Para que el cambio surta efecto, reinicie el demonio:
sudo systemctl restart mullvad-daemon
Utilice launchctl
:
sudo launchctl setenv TALPID_DISABLE_OFFLINE_MONITOR 1
Para que el cambio surta efecto, reinicie el demonio:
launchctl unload -w /Library/LaunchDaemons/net.mullvad.daemon.plist
launchctl load -w /Library/LaunchDaemons/net.mullvad.daemon.plist
MULLVAD_PATH
: permite cambiar la ruta a la carpeta con la herramienta mullvad-problem-report
cuando se ejecuta en modo de desarrollo. El valor predeterminado es: /target/debug/
.MULLVAD_DISABLE_UPDATE_NOTIFICATION
: si se establece en 1
, la notificación de la GUI se desactivará cuando haya una actualización disponible. $ npm run develop
: desarrolla una aplicación con la recarga en vivo habilitada$ npm run lint
- código pelusa$ npm run pack:
: prepara la aplicación para su distribución en tu plataforma. Donde
puede ser linux
, mac
o win
$ npm test
- ejecutar pruebas Los requisitos para mostrar un icono de bandeja varían entre los diferentes entornos de escritorio. Si el icono de la bandeja no aparece, intente instalar uno de estos paquetes:
libappindicator3-1
libappindicator1
libappindicator
Si está utilizando GNOME, intente instalar una de estas extensiones de GNOME Shell:
TopIconsFix
TopIcons Plus
electron-builder
El demonio está implementado en Rust y se implementa en varias cajas. La caja principal, o de nivel superior, que construye el demonio binario final es mullvad-daemon
, que luego depende de los demás.
En general, uno puede ver el demonio dividido en dos partes, las cajas que comienzan con talpid
y las cajas que comienzan con mullvad
. Se supone que las cajas talpid
no tienen ninguna relación con cosas específicas de Mullvad. A una caja talpid
no se le permite saber nada sobre la API a través de la cual el demonio obtiene los detalles de la cuenta de Mullvad o descarga listas de servidores VPN, por ejemplo. Los componentes talpid
deben verse como un cliente VPN genérico con funciones adicionales para preservar la privacidad y el anonimato. Por otro lado, las cajas que tienen mullvad
en su nombre utilizan los componentes talpid
para construir un cliente VPN seguro y específico de Mullvad.
Explicaciones de algunas palabras comunes utilizadas en la documentación y el código de este repositorio.
mullvad-daemon
. Este programa sin cabeza expone una interfaz de administración que se puede utilizar para controlar el demonio.mullvad
que es una interfaz basada en terminal para la aplicación Mullvad VPN. Una lista de rutas de archivos escritas y leídas por los distintos componentes de la aplicación Mullvad VPN
En Windows, cuando un proceso se ejecuta como servicio del sistema, la variable %LOCALAPPDATA%
se expande a C:Windowssystem32configsystemprofileAppDataLocal
.
Todas las rutas de directorio se definen y se obtienen de la caja mullvad-paths
.
El directorio de configuración se puede cambiar configurando la variable de entorno MULLVAD_SETTINGS_DIR
.
Plataforma | Camino |
---|---|
linux | /etc/mullvad-vpn/ |
macos | /etc/mullvad-vpn/ |
ventanas | %LOCALAPPDATA%Mullvad VPN |
Androide | getFilesDir() |
El directorio de registro se puede cambiar configurando la variable de entorno MULLVAD_LOG_DIR
.
Plataforma | Camino |
---|---|
linux | /var/log/mullvad-vpn/ + systemd |
macos | /var/log/mullvad-vpn/ |
ventanas | C:ProgramDataMullvad VPN |
Androide | getFilesDir() |
El directorio de caché se puede cambiar configurando la variable de entorno MULLVAD_CACHE_DIR
.
Plataforma | Camino |
---|---|
linux | /var/cache/mullvad-vpn/ |
macos | /Library/Caches/mullvad-vpn/ |
ventanas | C:ProgramDataMullvad VPNcache |
Androide | getCacheDir() |
La ruta completa al archivo de direcciones RPC se puede cambiar configurando la variable de entorno MULLVAD_RPC_SOCKET_PATH
.
Plataforma | Camino |
---|---|
linux | /var/run/mullvad-vpn |
macos | /var/run/mullvad-vpn |
ventanas | //./pipe/Mullvad VPN |
Androide | getNoBackupFilesDir() |
La GUI tiene un archivo de configuración específico que se configura para cada usuario. La ruta se establece en el archivo gui/packages/desktop/main/gui-settings.ts
.
Plataforma | Camino |
---|---|
linux | $XDG_CONFIG_HOME/Mullvad VPN/gui_settings.json |
macos | ~/Library/Application Support/Mullvad VPN/gui_settings.json |
ventanas | %LOCALAPPDATA%Mullvad VPNgui_settings.json |
Androide | Presente en logcat de Android |
Consulte los gráficos README para obtener información sobre los iconos.
Las instrucciones sobre cómo manejar las configuraciones regionales y las traducciones se encuentran aquí.
Para obtener instrucciones específicas para la aplicación de Android, consulte aquí.
Mullvad ha utilizado empresas de pentesting externas para realizar auditorías de seguridad de esta aplicación VPN. Lea más sobre ellos en el archivo Léame de auditorías.
Copyright (C) 2024 Mullvad VPN AB
Este programa es software libre: puede redistribuirlo y/o modificarlo según los términos de la Licencia Pública General GNU publicada por la Free Software Foundation, ya sea la versión 3 de la Licencia o (a su elección) cualquier versión posterior.
Para obtener el acuerdo de licencia completo, consulte el archivo LICENSE.md
El código fuente de la aplicación iOS tiene licencia GPL-3 como todo lo demás en este repositorio. Pero la aplicación distribuida en Apple App Store no tiene licencia GPL, sino que está sujeta al EULA de Apple App Store.