
Ejecuta aplicaciones a través de túneles VPN con espacios de nombres de red temporales
 vopono es una herramienta para ejecutar aplicaciones a través de túneles VPN mediante espacios de nombres de red temporales. Esto te permite ejecutar solo unas pocas aplicaciones a través de diferentes VPN simultáneamente, mientras mantienes tu conexión principal con normalidad. vopono incluye killswitches integrados tanto para Wireguard como para OpenVPN. Actualmente Mullvad, AzireVPN, MozillaVPN, ProtonVPN, iVPN, NordVPN, AirVPN y PrivateInternetAccess son compatibles directamente, y también se admiten archivos de configuración personalizados con el argumento `--custom`. Cloudflare Warp también es compatible. Para conexiones personalizadas, también se admiten los protocolos OpenConnect y OpenFortiVPN (por ejemplo, para VPN empresariales). Consulta la [Guía de usuario de vopono](https://github.com/jamesmcm/vopono/blob/master/USERGUIDE.md) para más detalles. ## Captura de pantalla Captura de pantalla que muestra un ejemplo con firefox, google-chrome-stable y lynx ejecutándose a través de diferentes conexiones VPN:  ## Proveedores compatibles | Proveedor | Soporte OpenVPN | Soporte Wireguard | | --------------------------- | --------------- | ----------------- | | Mullvad | ❌ | ✅ | | AzireVPN | ❌ | ✅ | | iVPN | ✅ | ✅ | | PrivateInternetAccess | ✅ | ✅\* | | ProtonVPN | ✅\*\* | ✅\*\*\* | | MozillaVPN | ❌ | ✅ | | NordVPN | ✅ | ❌ | | AirVPN | ✅ | ✅ | | Cloudflare Warp\*\*\*\* | ❌ | ❌ | | Autoalojado (--custom) | ✅ | ✅ | \* El reenvío de puertos es compatible con la opción `--port-forwarding` y `--port-forwarding-callback` para ejecutar un comando cuando se renueva el puerto. \*\* Consulta la [Guía de usuario](https://github.com/jamesmcm/vopono/blob/master/USERGUIDE.md) para obtener instrucciones de autenticación para generar los archivos de configuración de OpenVPN mediante `vopono sync`. Debes copiar el encabezado de autenticación con la forma `AUTH-xxx=yyy`, donde `yyy` es el valor del encabezado `x-pm-uid` en la misma solicitud cuando has iniciado sesión en tu navegador web. \*\*\* Para ProtonVPN puedes generar y descargar archivos de configuración específicos de Wireguard y usarlos como configuración de proveedor personalizada. Consulta la [Guía de usuario](https://github.com/jamesmcm/vopono/blob/master/USERGUIDE.md) para más detalles. El [reenvío de puertos](https://protonvpn.com/support/port-forwarding-manual-setup/) es compatible con el argumento `--port-forwarding` tanto para OpenVPN como para Wireguard. Ten en cuenta que, al usar una configuración personalizada con Wireguard, la implementación de reenvío de puertos a utilizar debe especificarse con `--custom-port-forwarding` (es decir, con `--provider custom --custom xxx.conf --protocol wireguard --custom-port-forwarding protonvpn`). `natpmpc` debe estar instalado. Ten en cuenta que para OpenVPN debes generar los archivos de configuración de OpenVPN añadiendo `+pmp` a tu nombre de usuario de OpenVPN, y debes elegir servidores que admitan esta función (por ejemplo, al momento de escribir esto, los servidores de Rumanía lo admiten). El puerto asignado se imprime entonces en la terminal donde se lanzó vopono; debe establecerse en cualquier aplicación que lo requiera. El puerto también se puede pasar a un script personalizado que se ejecutará dentro del espacio de nombres de red mediante el argumento `--port-forwarding-callback`. \*\*\*\* Cloudflare Warp utiliza su propio protocolo. Establece tanto el proveedor como el protocolo en `warp`. Ten en cuenta que primero debes registrarte con `sudo warp-cli registration new` y luego ejecutarlo una vez con `sudo warp-svc` y `sudo warp-cli connect` y `sudo warp-cli debug connectivity-check disable` fuera de vopono; luego mata `sudo warp-svc` sin ejecutar `sudo warp-cli disconnect` para que se conecte automáticamente al ejecutarse. Verifica que esto funcione primero antes de intentarlo con vopono. El reenvío de puertos de AirVPN es compatible como una capacidad del proveedor, pero los puertos reenviados deben configurarse actualmente en el área de cliente de AirVPN; vopono no reclama ni alterna los puertos de la cuenta de AirVPN automáticamente. ## Uso Configura los archivos de configuración del proveedor VPN: ```bash $ vopono sync ``` Ten en cuenta que al crear y subir nuevos pares de claves de Wireguard puede haber un ligero retraso hasta que sean utilizables (aproximadamente 30-60 segundos en Mullvad, por ejemplo). Ejecuta Firefox a través de una conexión Wireguard de AzireVPN a un servidor en Noruega: ```bash $ vopono exec --provider azirevpn --server norway firefox ``` Debes ejecutar vopono como tu propio usuario (no con sudo), ya que gestionará la elevación de privilegios cuando sea necesario. Para más detalles sobre ejecutarlo como un servicio systemd, etc., consulta la [Guía de usuario](https://github.com/jamesmcm/vopono/blob/master/USERGUIDE.md). ### Modo daemon Para una experiencia más fluida, ejecuta el daemon privilegiado como root y sigue usando `vopono` como tu usuario normal. La CLI reenvía automáticamente las solicitudes `exec` al daemon si está en ejecución. - Inícialo una vez al arrancar mediante systemd: `sudo systemctl enable --now vopono` - O ejecútalo manualmente como root: `sudo vopono daemon` - El equivalente explícito es `sudo vopono daemon start`; inspecciónalo con `vopono daemon status --json`. - Luego usa vopono normalmente como tu usuario: `vopono exec --provider mullvad --server se firefox` Consulta [USERGUIDE.md](https://github.com/jamesmcm/vopono/blob/master/USERGUIDE.md) para una unidad systemd lista para copiar. vopono puede manejar hasta 255 espacios de nombres de red separados (es decir, diferentes conexiones de servidor VPN, si tu proveedor VPN lo permite). Los comandos lanzados con el mismo prefijo de servidor y proveedor VPN compartirán el mismo espacio de nombres de red. Las opciones de configuración predeterminadas se pueden guardar en el archivo `~/.config/vopono/config.toml`, por ejemplo: ```toml firewall = "NfTables" provider = "Mullvad" protocol = "Wireguard" server = "usa-us22" ``` Ten en cuenta que los valores distinguen entre mayúsculas y minúsculas. Consulta la [Guía de usuario de vopono](https://github.com/jamesmcm/vopono/blob/master/USERGUIDE.md) para obtener instrucciones de uso mucho más detalladas (incluido el manejo de daemons y servidores). ## Instalación ### AUR (Arch Linux) Instala el paquete `vopono-git` con tu ayuda de AUR favorita. ```bash $ paru -S vopono-git $ vopono sync ``` Alternativamente, usa el paquete `vopono-bin` si no quieres compilar desde el código fuente. ### Raspberry Pi (Raspbian) Descarga e instala el paquete `vopono_x.y.z_armhf.deb` desde la página de lanzamientos: ```bash $ sudo dpkg -i vopono_0.2.1_armhf.deb ``` Necesitarás instalar OpenVPN (disponible en los repositorios de Raspbian): ```bash $ sudo apt install openvpn ``` Luego puedes usar vopono como se indicó anteriormente (ten en cuenta que el binario de Chromium es `chromium-browser`): ```bash $ vopono sync --protocol openvpn protonvpn $ vopono exec --provider protonvpn --server sweden chromium-browser ``` Captura de pantalla de vopono con OpenVPN ejecutándose en Raspbian:  Ten en cuenta que Wireguard no está en los repositorios de Raspbian, por lo que instalarlo no es trivial. Puedes seguir [esta guía](https://www.sigmdel.ca/michel/ha/wireguard/wireguard_02_en.html) para intentarlo, pero ten en cuenta que no solo necesitas instalar Wireguard y `wireguard-tools` para tener `wg` disponible, sino también `linux-headers` para asegurar que funcione correctamente (es decir, que no solo recibas errores de `Protocol not supported` al intentar establecer una conexión). Consulta la [Guía de usuario](https://github.com/jamesmcm/vopono/blob/master/USERGUIDE.md) para obtener detalles sobre el reenvío de puertos y el uso de vopono con daemons y servidores, en caso de que quieras usar tu Raspberry Pi para ejecutar privoxy o transmission-daemon, etc. ### Debian + Ubuntu Instala el paquete deb proporcionado en la página de lanzamientos. ### Fedora + OpenSUSE Instala el paquete rpm proporcionado en la página de lanzamientos (elige la versión correcta). ### Gentoo Linux Instala `vopono` desde el repositorio principal. ```bash $ emerge -av net-vpn/vopono ``` ### Otras distribuciones de Linux Usa los binarios compilados en la página de lanzamientos o instala desde el código fuente con Cargo como se documenta a continuación. ### Desde este repositorio (con Cargo) Ejecuta el script de instalación proporcionado: `install.sh`; esto ejecutará `cargo install` en el repositorio y copiará los archivos de configuración a `~/.config/vopono/` Ten en cuenta que la versión mínima compatible de Rust es la 1.85 (requerida para la edición 2024). Puedes comprobar tu versión con: ```bash $ rustc --version ``` ## Problemas conocidos - Al lanzar una nueva aplicación en un espacio de nombres de vopono existente, cualquier modificación a las reglas del firewall (es decir, reenvío y apertura de puertos) no se aplicará (solo se usan al crear el espacio de nombres). Lo mismo aplica para el reenvío de puertos. - Las credenciales de OpenVPN siempre se almacenan en texto plano en la configuración; puede que se añada una opción para no almacenar credenciales, pero parece que OpenVPN las necesita proporcionadas en texto plano. - No hay una forma sencilla de eliminar dispositivos de MozillaVPN (pares de claves de Wireguard); a diferencia de Mullvad, esto _no_ se puede hacer desde la página web. Recomiendo usar [MozWire](https://github.com/NilsIrl/MozWire) para gestionar esto. - `gnome-terminal` no se ejecutará en el espacio de nombres de red debido al modelo cliente-servidor; consulta el problema [#48](https://github.com/jamesmcm/vopono/issues/48) - El reenvío de puertos desde dentro del espacio de nombres de red hacia el host (por ejemplo, para ejecutar `transmission-daemon`) no funciona correctamente cuando vopono se ejecuta como root; consulta el problema [#84](https://github.com/jamesmcm/vopono/issues/84) ## Licencia vopono está licenciado bajo la GPL Versión 3.0 (o superior); consulta el archivo LICENSE o https://www.gnu.org/licenses/gpl-3.0.en.html ## Etimología vopono es la pronunciación de las letras VPN en esperanto. Se vi ankaŭ parolas Esperanton, bonvolu serĉi min en la kanalo de Discord de Rust Programming Language Community. ## Contribución Salvo que declares explícitamente lo contrario, cualquier contribución enviada intencionalmente para su inclusión en el trabajo por tu parte, será licenciada bajo la GPLv3 (o superior), sin términos o condiciones adicionales. Muchas gracias a NilsIrl's [MozWire](https://github.com/NilsIrl/MozWire) por la investigación de la API de MozillaVPN.