
vopono v0.10.21
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 via namespaces de rede temporários. Isso permite que você execute apenas algumas aplicações através de diferentes VPNs simultaneamente, mantendo sua conexão principal como normal.
vopono inclui killswitches integrados para Wireguard e 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.
O Cloudflare Warp também é suportado.
Para conexões personalizadas, os protocolos OpenConnect e OpenFortiVPN são também suportados (por exemplo, para VPNs empresariais). Consulte o Guia do Usuário do vopono para mais detalhes.
Captura de tela
Captura de tela mostrando um exemplo com firefox, google-chrome-stable e lynx rodando todos através de diferentes conexões VPN:

Provedores Suportados
| Provedor | Suporte OpenVPN | Suporte Wireguard |
|---|---|---|
| Mullvad | ❌ | ✅ |
| AzireVPN | ❌ | ✅ |
| iVPN | ✅ | ✅ |
| PrivateInternetAccess | ✅ | ✅* |
| ProtonVPN | ✅** | ✅*** |
| MozillaVPN | ❌ | ✅ |
| NordVPN | ✅ | ❌ |
| AirVPN | ✅ | ✅ |
| Cloudflare Warp**** | ❌ | ❌ |
| Self host (--custom) | ✅ | ✅ |
* O redirecionamento de porta é suportado com a opção --port-forwarding e --port-forwarding-callback para executar um comando quando a porta for renovada.
** 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 requisição quando autenticado no seu navegador.
*** Para ProtonVPN, você pode gerar e baixar arquivos de configuração Wireguard específicos
e usá-los como uma configuração de provedor personalizada. Consulte o Guia do Usuário
para detalhes. O Redirecionamento de Porta é suportado com o argumento --port-forwarding tanto para OpenVPN quanto para Wireguard.
Observe que, ao usar uma configuração personalizada com Wireguard, a implementação de redirecionamento de porta a ser utilizada 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.
Observe que, 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 esse recurso
(por exemplo, no momento em que este texto foi escrito, os servidores da Romênia suportam). A porta atribuída é então impressa no terminal onde o vopono foi iniciado - ela deve então ser definida em quaisquer aplicações que a exijam.
A porta também pode ser passada para um script personalizado que será executado
dentro do namespace de rede por meio do argumento
--port-forwarding-callback.
**** O Cloudflare Warp usa seu próprio protocolo. Defina o provedor e o
protocolo como warp. Observe que você deve primeiro registrar com sudo warp-cli registration new e então executá-lo uma vez com sudo warp-svc e sudo warp-cli connect e sudo warp-cli debug connectivity-check disable fora do vopono - depois encerre sudo warp-svc sem executar sudo warp-cli disconnect para que ele se conecte automaticamente quando for executado.
Verifique se isso funciona primeiro antes de tentar com o vopono.
O redirecionamento de porta do AirVPN é suportado como uma capacidade do provedor, mas as portas redirecionadas devem atualmente ser configuradas na área do cliente do AirVPN; o vopono não reivindica nem alterna automaticamente as portas da conta AirVPN.
Uso
Configure os arquivos de configuração do provedor VPN:
$ vopono sync
Observe que, ao criar e enviar novos pares de chaves Wireguard, pode haver um pequeno atraso até que estejam utilizáveis (cerca de 30 a 60 segundos na Mullvad, por exemplo).
Execute o Firefox através de uma conexão Wireguard da AzireVPN para um servidor na Noruega:
$ vopono exec --provider azirevpn --server norway firefox
Você deve executar o vopono como seu próprio usuário (sem usar sudo), pois ele lidará com a elevação de privilégios quando necessário. Para mais detalhes sobre a execução como um serviço systemd, etc., consulte o Guia do Usuário.
Modo Daemon
Para uma experiência mais fluida, execute o daemon raiz privilegiado 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.
- Inicie uma vez na inicialização via systemd:
sudo systemctl enable --now vopono - Ou execute manualmente como root:
sudo vopono daemon - O equivalente explícito é
sudo vopono daemon start; inspecione-o comvopono daemon status --json. - Em seguida, use o vopono normalmente como seu usuário:
vopono exec --provider mullvad --server se firefox
Consulte USERGUIDE.md para obter uma unit systemd pronta para copiar.
O vopono pode lidar com até 255 namespaces de rede separados (ou seja, diferentes conexões de servidor VPN - se o seu provedor de VPN permitir). Comandos iniciados com o mesmo prefixo de servidor e provedor de VPN compartilharão o mesmo namespace de rede.
As 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"
Observe que os valores diferenciam maiúsculas de minúsculas.
Consulte o Guia do Usuário do vopono para instruções de uso muito mais detalhadas (incluindo o gerenciamento de daemons e servidores).
Instalação
AUR (Arch Linux)
Instale o pacote vopono-git com o 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.
Raspberry Pi (Raspbian)
Baixe e instale o pacote vopono_x.y.z_armhf.deb na página de
releases:
$ sudo dpkg -i vopono_0.2.1_armhf.deb
Você precisará instalar o OpenVPN (disponível nos repositórios do Raspbian):
$ sudo apt install openvpn
Você pode então usar o vopono como acima (observe 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:

Observe que o Wireguard não está nos repositórios do Raspbian, portanto, instalá-lo
não é trivial. Você pode seguir este guia para tentar, mas observe que
você precisa não apenas 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 recebe apenas erros Protocol not supported ao tentar
estabelecer uma conexão).
Consulte o Guia do Usuário para detalhes sobre redirecionamento de porta e o uso do vopono com daemons e servidores, caso queira usar seu Raspberry Pi para executar privoxy ou transmission-daemon, etc.
Debian + Ubuntu
Instale o pacote deb fornecido na página de releases.
Fedora + OpenSUSE
Instale o pacote rpm fornecido na página de release (escolha a versão correta).
Gentoo Linux
Instale vopono a partir do repositório principal.
$ emerge -av net-vpn/vopono
Outros Linux
Use os binários compilados na página de release ou instale a partir do código-fonte com Cargo, conforme documentado abaixo.
Deste repositório (com Cargo)
Execute o script de instalação fornecido: install.sh - isso fará cargo install do repositório e copiará os arquivos de configuração para
~/.config/vopono/
Observe 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
Problemas conhecidos
- Ao iniciar uma nova aplicação em um namespace vopono existente, quaisquer modificações nas regras de firewall (ou seja, encaminhamento e abertura de portas) não serão aplicadas (elas são usadas apenas ao criar o namespace). O mesmo se aplica ao redirecionamento de porta.
- As credenciais OpenVPN são sempre armazenadas em texto simples na configuração - pode-se adicionar uma opção para não armazenar credenciais, mas parece que o OpenVPN precisa delas fornecidas em texto simples.
- Não há uma maneira fácil de excluir dispositivos MozillaVPN (pares de chaves Wireguard) - ao contrário da Mullvad, isso não pode ser feito na página web. Eu recomendo usar o MozWire para gerenciar isso.
- O
gnome-terminalnão será executado no namespace de rede devido ao modelo cliente-servidor - consulte a issue #48 - O redirecionamento de porta de dentro do namespace de rede para o host (por exemplo,
para executar
transmission-daemon) não funciona corretamente quando o vopono é executado como root - consulte a issue #84
Licença
O vopono é licenciado sob a GPL Versão 3.0 (ou superior), consulte o arquivo LICENSE ou https://www.gnu.org/licenses/gpl-3.0.en.html
Etimologia
vopono é a pronúncia das letras VPN em Esperanto.
Se vi ankaŭ parolas Esperanton, bonvolu serĉi min en la kanalo de Discord de Rust Programming Language Community.
Contribuição
A menos que você declare explicitamente o contrário, qualquer contribuição enviada intencionalmente para inclusão no trabalho por você será licenciada sob a GPLv3 (ou superior), sem quaisquer termos ou condições adicionais.
Muitos agradecimentos ao MozWire do NilsIrl pela investigação da API da MozillaVPN.