Bem-vindo ao repositório de código-fonte do aplicativo cliente Mullvad VPN. Este é o software cliente VPN para o serviço VPN Mullvad. Para obter mais informações sobre o serviço, visite nosso site mullvad.net (também acessível via Tor em nosso serviço cebola).
Este repositório contém todo o código-fonte das versões desktop e móvel do aplicativo. Para desktop, isso inclui o serviço/daemon do sistema ( mullvad-daemon
), uma interface gráfica de usuário (GUI) e uma interface de linha de comando (CLI). O aplicativo Android usa o mesmo serviço de sistema de apoio para o túnel e segurança, mas possui um frontend dedicado em android/. iOS consiste em uma implementação completamente independente que reside em ios/.
Existem versões criadas e assinadas para macOS, Windows, Linux e Android disponíveis em nosso site e no Github. O aplicativo Android também está disponível no Google Play e F-Droid e a versão iOS na App Store.
Você pode encontrar nossas chaves de assinatura de código, bem como instruções sobre como verificar criptograficamente seu download na página de código aberto do Mullvad.
Estes são os sistemas operacionais e suas versões que o aplicativo suporta oficialmente. Pode funcionar em muitas outras versões, mas não as testamos e não podemos garantir a qualidade ou segurança.
SO/plataforma | Versões suportadas |
---|---|
Windows | 10 e 11 |
macOS | Os três últimos grandes lançamentos |
Linux (Ubuntu) | Os dois últimos lançamentos LTS e os últimos lançamentos não-LTS |
Linux (Fedora) | As versões que ainda não são EOL |
Linux (Debian) | 11 e mais recente |
Android | 8 e mais recente |
iOS | 15.0 e mais recente |
No Linux testamos usando o ambiente de desktop Gnome. O aplicativo deveria funcionar, e provavelmente funciona, em outros DEs, mas não os testamos regularmente.
Aqui está uma tabela contendo os recursos do aplicativo em todas as plataformas. O objetivo é refletir o estado atual do código mais recente no git, não necessariamente de qualquer versão existente.
Windows | Linux | macOS | Android | iOS | |
---|---|---|---|---|---|
OpenVPN | ✓ | ✓ | ✓ | ||
WireGuard | ✓ | ✓ | ✓ | ✓ | ✓ |
Túneis resistentes a quantum | ✓ | ✓ | ✓ | ✓ | ✓ |
DAITA | ✓ | ✓ | ✓ | ✓ | ✓ |
Multisalto WireGuard | ✓ | ✓ | ✓ | ✓ | |
WireGuard sobre TCP | ✓ | ✓ | ✓ | ✓ | ✓ |
WireGuard sobre Shadowsocks | ✓ | ✓ | ✓ | ✓ | |
OpenVPN sobre Shadowsocks | ✓ | ✓ | ✓ | ||
Tunelamento dividido | ✓ | ✓ | ✓ | ✓ | |
Servidor DNS personalizado | ✓ | ✓ | ✓ | ✓ | ✓ |
Bloqueadores de conteúdo (anúncios, etc.) | ✓ | ✓ | ✓ | ✓ | ✓ |
Acesso opcional à rede local | ✓ | ✓ | ✓ | ✓ | ✓* |
Auditado externamente | ✓ | ✓ | ✓ | ✓ | ✓ |
* A rede local está sempre acessível no iOS com a implementação atual
Este aplicativo é um cliente VPN que preserva a privacidade. Como tal, não mede esforços para impedir fugas de tráfego. E basicamente todas as configurações são padronizadas para a opção mais segura/privada. O usuário deve permitir explicitamente regras mais flexíveis, se desejar. Consulte o documento de segurança dedicado para obter detalhes sobre o que o aplicativo bloqueia e permite, bem como como ele faz isso.
Este repositório contém submódulos necessários para construir o aplicativo. No entanto, alguns desses submódulos também possuem outros submódulos que são bastante grandes e não são necessários para construir o aplicativo. Portanto, a menos que você queira o código-fonte do OpenSSL, OpenVPN e alguns outros projetos, você deve evitar um clone recursivo do repositório. Em vez disso, clone o repositório normalmente e obtenha um nível de submódulos:
git clone https://github.com/mullvad/mullvadvpn-app.git
cd mullvadvpn-app
git submodule update --init
No Android, Linux e macOS, você também deseja verificar o submódulo wireguard-go recursivamente:
git submodule update --init --recursive --depth=1 wireguard-go-rs
Mais detalhes sobre por que isso é necessário podem ser encontrados na caixa wireguard-go-rs.
Assinamos cada commit no branch main
, bem como nossas tags de lançamento. Se desejar verificar sua finalização de compra, você pode encontrar nossas chaves de desenvolvedor na página de código aberto do Mullvad.
Este repositório possui um submódulo git em dist-assets/binaries
. Este submódulo contém binários e scripts de construção para código de terceiros que precisamos agrupar com o aplicativo. Como OpenVPN, Wintun etc.
Este submódulo está em conformidade com os mesmos padrões de integridade/segurança deste repositório. Cada commit de mesclagem deve ser assinado. E este repositório principal deve apontar apenas para um commit de mesclagem assinado do submódulo binários.
Consulte o README do submódulo binários para obter mais detalhes sobre esse repositório.
Consulte as instruções de compilação para obter ajuda na criação do aplicativo em plataformas de desktop.
Para criar o aplicativo Android, consulte as instruções para Android.
Para criar o aplicativo iOS, consulte as instruções para iOS.
Veja isto para obter instruções sobre como fazer uma nova versão.
TALPID_FIREWALL_DEBUG
– Ajuda a depurar o firewall. Faz coisas diferentes dependendo da plataforma:
"1"
para adicionar contadores de pacotes a todas as regras de firewall.pflog0
."all"
para adicionar log a todas as regras."pass"
para adicionar registro às regras que permitem pacotes."drop"
para adicionar registro às regras de bloqueio de pacotes. TALPID_FIREWALL_DONT_SET_SRC_VALID_MARK
- Força o daemon a não definir a configuração src_valid_mark
no Linux. A opção de configuração do kernel está definida porque, caso contrário, a filtragem estrita do caminho reverso pode impedir que o tráfego de retransmissão chegue ao daemon. Se rp_filter
estiver definido como 1
na interface que receberá tráfego de retransmissão e src_valid_mark
não estiver definido como 1
, o daemon não poderá receber tráfego de retransmissão.
TALPID_DNS_MODULE
- Permite alterar o método que será utilizado para configuração do DNS. Por padrão, isso é detectado automaticamente, mas você pode configurá-lo para uma das opções abaixo para escolher um método específico.
Linux
"static-file"
: altere o arquivo /etc/resolv.conf
diretamente"resolvconf"
: use o programa resolvconf
"systemd"
: use o serviço resolved
do systemd através do DBus"network-manager"
: use o serviço NetworkManager
através do DBusWindows
iphlpapi
: use a API auxiliar de IPnetsh
: use o programa netsh
tcpip
: define parâmetros TCP/IP no registro TALPID_FORCE_USERSPACE_WIREGUARD
- Força o daemon a usar a implementação do espaço do usuário do WireGuard no Linux.
TALPID_DISABLE_OFFLINE_MONITOR
– Força o daemon a sempre assumir que o host está online.
TALPID_NET_CLS_MOUNT_DIR
– No Linux, força o daemon a montar o controlador net_cls
no diretório especificado se ele ainda não estiver montado.
MULLVAD_MANAGEMENT_SOCKET_GROUP
- No Linux e no macOS, isso restringe o acesso ao soquete UDS da interface de gerenciamento aos usuários do grupo especificado. Isso significa que somente os usuários desse grupo podem usar a CLI e a GUI. Por padrão, todos têm acesso ao soquete.
MULLVAD_API_HOST
– Defina o nome do host para usar em solicitações de API. Por exemplo, api.mullvad.net
.
MULLVAD_API_ADDR
- Defina o endereço IP e a porta para usar nas solicitações de API. Por exemplo, 10.10.1.2:443
.
MULLVAD_API_DISABLE_TLS
– Use HTTP simples para solicitações de API.
MULLVAD_CONNCHECK_HOST
- Defina o nome do host para usar nas solicitações de verificação de conexão. Por exemplo, am.i.mullvad.net
.
Use setx
de um shell elevado:
setx TALPID_DISABLE_OFFLINE 1 /m
Para que a alteração tenha efeito, reinicie o daemon:
sc.exe stop mullvadvpn
sc.exe start mullvadvpn
Edite o arquivo da unidade systemd via systemctl edit mullvad-daemon.service
:
[Service]
Environment = " TALPID_DISABLE_OFFLINE_MONITOR=1 "
Para que a alteração tenha efeito, reinicie o daemon:
sudo systemctl restart mullvad-daemon
Usar launchctl
:
sudo launchctl setenv TALPID_DISABLE_OFFLINE_MONITOR 1
Para que a alteração tenha efeito, reinicie o daemon:
launchctl unload -w /Library/LaunchDaemons/net.mullvad.daemon.plist
launchctl load -w /Library/LaunchDaemons/net.mullvad.daemon.plist
MULLVAD_PATH
- Permite alterar o caminho da pasta com a ferramenta mullvad-problem-report
ao executar em modo de desenvolvimento. O padrão é: /target/debug/
.MULLVAD_DISABLE_UPDATE_NOTIFICATION
- Se definido como 1
, a notificação da GUI será desativada quando uma atualização estiver disponível. $ npm run develop
- desenvolver aplicativo com recarregamento ao vivo habilitado$ npm run lint
- código lint$ npm run pack:
- prepara o aplicativo para distribuição em sua plataforma. Onde
pode ser linux
, mac
ou win
$ npm test
- execute testes Os requisitos para exibir um ícone na bandeja variam entre diferentes ambientes de área de trabalho. Se o ícone da bandeja não aparecer, tente instalar um destes pacotes:
libappindicator3-1
libappindicator1
libappindicator
Se você estiver usando o GNOME, tente instalar uma destas extensões do GNOME Shell:
TopIconsFix
TopIcons Plus
electron-builder
O daemon é implementado em Rust e é implementado em várias caixas. A caixa principal, ou de nível superior, que constrói o binário daemon final é mullvad-daemon
que depende dos outros.
Em geral, pode-se ver o daemon dividido em duas partes, as caixas começando com talpid
e as caixas começando com mullvad
. Supõe-se que as caixas talpid
não tenham nenhuma relação com coisas específicas de Mullvad. Uma caixa talpid
não tem permissão para saber nada sobre a API por meio da qual o daemon busca detalhes da conta Mullvad ou baixa listas de servidores VPN, por exemplo. Os componentes talpid
devem ser vistos como um cliente VPN genérico com recursos extras de privacidade e preservação do anonimato. As caixas com mullvad
em seu nome, por outro lado, fazem uso dos componentes talpid
para construir um cliente VPN seguro e específico do Mullvad.
Explicações para algumas palavras comuns usadas na documentação e no código deste repositório.
mullvad-daemon
. Este programa headless expõe uma interface de gerenciamento que pode ser usada para controlar o daemonmullvad
que é um frontend baseado em terminal para o aplicativo Mullvad VPN. Uma lista de caminhos de arquivos gravados e lidos pelos vários componentes do aplicativo Mullvad VPN
No Windows, quando um processo é executado como um serviço do sistema, a variável %LOCALAPPDATA%
se expande para C:Windowssystem32configsystemprofileAppDataLocal
.
Todos os caminhos de diretório são definidos e obtidos da caixa mullvad-paths
.
O diretório de configurações pode ser alterado definindo a variável de ambiente MULLVAD_SETTINGS_DIR
.
Plataforma | Caminho |
---|---|
Linux | /etc/mullvad-vpn/ |
macOS | /etc/mullvad-vpn/ |
Windows | %LOCALAPPDATA%Mullvad VPN |
Android | getFilesDir() |
O diretório de log pode ser alterado configurando a variável de ambiente MULLVAD_LOG_DIR
.
Plataforma | Caminho |
---|---|
Linux | /var/log/mullvad-vpn/ + systemd |
macOS | /var/log/mullvad-vpn/ |
Windows | C:ProgramDataMullvad VPN |
Android | getFilesDir() |
O diretório de cache pode ser alterado configurando a variável de ambiente MULLVAD_CACHE_DIR
.
Plataforma | Caminho |
---|---|
Linux | /var/cache/mullvad-vpn/ |
macOS | /Library/Caches/mullvad-vpn/ |
Windows | C:ProgramDataMullvad VPNcache |
Android | getCacheDir() |
O caminho completo para o arquivo de endereço RPC pode ser alterado configurando a variável de ambiente MULLVAD_RPC_SOCKET_PATH
.
Plataforma | Caminho |
---|---|
Linux | /var/run/mullvad-vpn |
macOS | /var/run/mullvad-vpn |
Windows | //./pipe/Mullvad VPN |
Android | getNoBackupFilesDir() |
A GUI possui um arquivo de configurações específico configurado para cada usuário. O caminho é definido no arquivo gui/packages/desktop/main/gui-settings.ts
.
Plataforma | Caminho |
---|---|
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 | Presente no logcat do Android |
Consulte o README gráfico para obter informações sobre ícones.
Instruções sobre como lidar com localidades e traduções são encontradas aqui.
Para obter instruções específicas para o aplicativo Android, veja aqui.
Mullvad usou empresas externas de testes de pentes para realizar auditorias de segurança deste aplicativo VPN. Leia mais sobre eles no leia-me de auditorias.
Direitos autorais (C) 2024 Mullvad VPN AB
Este programa é software livre: você pode redistribuí-lo e/ou modificá-lo sob os termos da Licença Pública Geral GNU conforme publicada pela Free Software Foundation, seja a versão 3 da Licença ou (a seu critério) qualquer versão posterior.
Para o contrato de licença completo, consulte o arquivo LICENSE.md
O código-fonte do aplicativo iOS é licenciado pela GPL-3 como todo o resto neste repositório. Mas o aplicativo distribuído na Apple App Store não é licenciado pela GPL, ele se enquadra no EULA da Apple App Store.