
Execute aplicações através de túneis VPN com namespaces de rede temporários

vopono é uma ferramenta para executar aplicações através de túneis VPN usando namespaces de rede temporários. Isso permite executar apenas algumas aplicações através de diferentes VPNs simultaneamente, mantendo sua conexão principal normal.
vopono inclui killswitches integrados tanto para Wireguard quanto para OpenVPN.
Atualmente, Mullvad, AzireVPN, MozillaVPN, ProtonVPN, iVPN,
NordVPN, AirVPN e PrivateInternetAccess são suportados diretamente, com
arquivos de configuração personalizados também suportados com o argumento --custom.
Cloudflare Warp também é suportado.
Para conexões personalizadas, os protocolos OpenConnect e OpenFortiVPN também são suportados (por exemplo, para VPNs empresariais). Consulte o Guia do Usuário vopono para mais detalhes.
Captura de tela mostrando um exemplo com firefox, google-chrome-stable e lynx rodando todos através de conexões VPN diferentes:

| Provedor | Suporte OpenVPN | Suporte Wireguard |
|---|---|---|
| Mullvad | ❌ | ✅ |
| AzireVPN | ❌ | ✅ |
| iVPN | ✅ | ✅ |
| PrivateInternetAccess | ✅ | ✅* |
| ProtonVPN | ✅** | ✅*** |
| MozillaVPN | ❌ | ✅ |
| NordVPN | ✅ | ❌ |
| AirVPN | ✅ | ❌ |
| Cloudflare Warp**** | ❌ | ❌ |
| Auto-hospedagem (--custom) | ✅ | ✅ |
* O redirecionamento de portas é suportado com a opção --port-forwarding e --port-forwarding-callback para executar um comando quando a porta for atualizada.
** Consulte o Guia do Usuário para instruções de autenticação para gerar os arquivos de configuração OpenVPN via vopono sync. Você deve copiar o cabeçalho de autenticação no formato AUTH-xxx=yyy onde yyy é o valor do cabeçalho x-pm-uid na mesma solicitação quando logado, no seu navegador web.
*** Para ProtonVPN você pode gerar e baixar arquivos de configuração Wireguard específicos,
e usá-los como um provedor de configuração personalizada. Consulte o Guia do Usuário
para detalhes. Redirecionamento de Portas é suportado com o argumento --port-forwarding tanto para OpenVPN quanto para Wireguard.
Nota: ao usar uma configuração personalizada com Wireguard, a implementação de redirecionamento de portas a ser usada deve ser especificada com --custom-port-forwarding
(ou seja, com --provider custom --custom xxx.conf --protocol wireguard --custom-port-forwarding protonvpn ). O natpmpc deve estar instalado.
Nota: para OpenVPN você deve gerar os arquivos de configuração OpenVPN adicionando +pmp ao seu nome de usuário OpenVPN, e deve escolher servidores que suportem este recurso
(por exemplo, no momento da escrita, os servidores da Romênia não suportam). A porta atribuída é então impressa no terminal onde o vopono foi iniciado - isso deve ser configurado em quaisquer aplicações que o necessitem.
A porta também pode ser passada para um script personalizado que será executado
dentro do namespace de rede através do argumento --port-forwarding-callback.
**** Cloudflare Warp usa seu próprio protocolo. Defina tanto o provedor quanto o
protocolo como warp. Note que você deve primeiro registrar com sudo warp-cli registration new e executá-lo uma vez com sudo warp-svc e sudo warp-cli connect e sudo warp-cli debug connectivity-check disable fora do vopono - então mate o sudo warp-svc sem executar sudo warp-cli disconnect para que ele se conecte automaticamente quando executado.
Verifique se isso funciona primeiro antes de tentá-lo com o vopono.
Configure os arquivos de configuração do provedor VPN:
$ vopono sync
Note que ao criar e enviar novos pares de chaves Wireguard, pode haver um pequeno atraso até que estejam utilizáveis (cerca de 30-60 segundos no Mullvad, por exemplo).
Execute o Firefox através de uma conexão Wireguard AzireVPN para um servidor na Noruega:
$ vopono exec --provider azirevpn --server norway firefox
Você deve executar o vopono como seu próprio usuário (não usando sudo), pois ele lidará com a escalação de privilégios quando necessário. Para mais detalhes sobre execução como um serviço systemd, etc., consulte o Guia do Usuário.
Para uma experiência mais suave, execute o daemon privilegiado como root e continue usando vopono como seu usuário normal. A CLI encaminha automaticamente as solicitações exec para o daemon se ele estiver em execução.
sudo systemctl enable --now voponosudo vopono daemonvopono exec --provider mullvad --server se firefoxConsulte USERGUIDE.md para uma unidade systemd pronta para copiar.
O vopono pode lidar com até 255 namespaces de rede separados (ou seja, diferentes conexões de servidor VPN - se seu provedor VPN permitir). Comandos iniciados com o mesmo prefixo de servidor e provedor VPN compartilharão o mesmo namespace de rede.
Opções de configuração padrão podem ser salvas no arquivo ~/.config/vopono/config.toml,
por exemplo:
firewall = "NfTables"
provider = "Mullvad"
protocol = "Wireguard"
server = "usa-us22"
Note que os valores diferenciam maiúsculas de minúsculas.
Consulte o Guia do Usuário vopono para instruções de uso muito mais detalhadas (incluindo como lidar com daemons e servidores).
Instale o pacote vopono-git com seu auxiliar AUR favorito.
$ paru -S vopono-git
$ vopono sync
Alternativamente, use o pacote vopono-bin se você não quiser compilar
a partir do código fonte.
Baixe e instale o pacote vopono_x.y.z_armhf.deb da página de
lançamentos:
$ sudo dpkg -i vopono_0.2.1_armhf.deb
Você precisará instalar o OpenVPN (disponível nos repositórios Raspbian):
$ sudo apt install openvpn
Você pode então usar o vopono como acima (note que o binário do Chromium é
chromium-browser):
$ vopono sync --protocol openvpn protonvpn
$ vopono exec --provider protonvpn --server sweden chromium-browser
Captura de tela do vopono com OpenVPN rodando no Raspbian:

Note que o Wireguard não está nos repositórios Raspbian, portanto instalá-lo não é
trivial. Você pode seguir este guia para tentar, mas note que
não só você precisa instalar o Wireguard e wireguard-tools para ter wg
disponível, mas também os linux-headers para garantir que funcione corretamente
(ou seja, você não receba apenas erros Protocol not supported ao tentar
estabelecer uma conexão).
Consulte o Guia do Usuário para detalhes sobre redirecionamento de portas e uso do vopono com daemons e servidores, caso queira usar seu Raspberry Pi para executar privoxy ou transmission-daemon, etc.
Instale o pacote deb fornecido na página de lançamentos.
Instale o pacote rpm fornecido na página de lançamentos (escolha a versão correta).
Instale vopono do repositório principal.
$ emerge -av net-vpn/vopono
Use os binários compilados na página de lançamentos, ou instale a partir do código fonte com Cargo, conforme documentado abaixo.
Execute o script de instalação fornecido: install.sh - isso fará cargo install no repositório e copiará os arquivos de configuração para
~/.config/vopono/
Note que a versão mínima suportada do Rust é 1.85 (necessária para a edição 2024). Você pode verificar sua versão com:
$ rustc --version
gnome-terminal não será executado no namespace de rede devido ao
modelo cliente-servidor - veja a issue #48transmission-daemon) não funciona corretamente quando o vopono
é executado como root - veja a issue #84vopono é licenciado sob a GPL Versão 3.0 (ou superior), veja o arquivo LICENSE ou https://www.gnu.org/licenses/gpl-3.0.en.html
vopono é a pronúncia das letras VPN em Esperanto.
Se você também fala Esperanto, por favor me procure no canal Discord da Comunidade de Programação Rust.
A menos que você declare explicitamente o contrário, qualquer contribuição intencionalmente submetida para inclusão no trabalho por você será licenciada sob a GPLv3 (ou superior), sem termos ou condições adicionais.
Muitos agradecimentos ao MozWire de NilsIrl pela investigação da API MozillaVPN.