
gotatun v0.9.0
Implementación de WireGuard® en espacio de usuario en Rust
GotaTun
Una implementación de WireGuard® en espacio de usuario, y un fork de BoringTun.
Licencia
Todo el código fuente en este repositorio está sujeto a los términos de la Mozilla Public License, versión 2.0 a menos que se indique lo contrario. Se puede encontrar una copia de esta licencia en el archivo "LICENSE" o en https://www.mozilla.org/MPL/2.0/.
Las contribuciones realizadas antes del 5 de marzo de 2026 están licenciadas bajo la antigua licencia BSD de 3 cláusulas. Se puede encontrar una copia de esta licencia en el archivo "LICENSE-CLOUDFLARE".
Contribución
A menos que indiques explícitamente lo contrario, cualquier contribución enviada intencionadamente para su inclusión en el trabajo por tu parte, según se define en la Licencia MPL-2.0, se licenciará como se indica arriba, sin términos ni condiciones adicionales.
Compilación
- Solo biblioteca:
cargo build --lib --no-default-features --release [--target $(TARGET_TRIPLE)] - Ejecutable:
cargo build --bin gotatun --release [--target $(TARGET_TRIPLE)]
Instalación
Por defecto, el ejecutable se coloca en la carpeta ./target/release. Puedes copiarlo manualmente a la ubicación deseada, o instalarlo usando cargo install --bin gotatun --path ..
Nix
Para compilar el ejecutable, simplemente ejecuta nix build .#gotatun. El binario final se ubicará en result/bin/gotatun.
Ejecución
Según la especificación, para iniciar un túnel usa:
gotatun [-f/--foreground] INTERFACE-NAME
El túnel puede configurarse entonces usando wg, como un túnel WireGuard normal, o cualquier otra herramienta.
También es posible usarlo con wg-quick estableciendo la variable de entorno WG_QUICK_USERSPACE_IMPLEMENTATION a gotatun. Por ejemplo:
sudo WG_QUICK_USERSPACE_IMPLEMENTATION=gotatun WG_SUDO=1 wg-quick up CONFIGURATION
Ten en cuenta que wg-quick ignorará WG_QUICK_USERSPACE_IMPLEMENTATION en Linux si tienes el módulo del kernel de wireguard instalado.
Pruebas
Probar este proyecto tiene algunos requisitos:
sudo: necesario para crear túneles. Cuando ejecutescargo testse te solicitará tu contraseña.- Docker: puedes instalarlo aquí. Si estás en Ubuntu/Debian puedes ejecutar
apt-get install docker.io.
Plataformas compatibles
| Triple destino | Binario | Biblioteca |
|---|---|---|
| x86_64-unknown-linux-gnu | ✓ | ✓ |
| aarch64-unknown-linux-gnu | ✓ | ✓ |
| aarch64-apple-darwin | ✓ | ✓ |
| x86_64-pc-windows-msvc | ✓ | ✓ |
| x86_64-pc-windows-gnullvm | ✓ | ✓ |
| aarch64-pc-windows-msvc | ✓ | ✓ |
| aarch64-pc-windows-gnullvm | ✓ | ✓ |
| x86_64-linux-android | ✓ | |
| aarch64-linux-android | ✓ | |
| aarch64-apple-ios | ✓ |
Otros destinos pueden funcionar, pero solo probamos estos
Linux
Se admiten las arquitecturas x86-64 y aarch64. El comportamiento debería ser idéntico al de wireguard-go, con la siguiente diferencia:
gotatun reducirá privilegios al iniciarse. Cuando se reducen los privilegios no es posible establecer fwmark. Si se requiere fwmark, como al usar wg-quick, ejecuta con --disable-drop-privileges o establece la variable de entorno WG_SUDO=1.
Necesitarás dar al ejecutable la capacidad CAP_NET_ADMIN usando: sudo setcap cap_net_admin+epi gotatun. No se necesita sudo.
macOS
El comportamiento es similar al de wireguard-go. Específicamente, el nombre de la interfaz debe ser utun[0-9]+ para un nombre de interfaz explícito o utun para que el kernel seleccione la más baja disponible. Si eliges utun como nombre de interfaz, y la variable de entorno WG_TUN_NAME_FILE está definida, entonces el nombre real de la interfaz seleccionada por el kernel se escribe en el archivo especificado por esa variable.
Extensiones UAPI
Consulta UAPI para extensiones al protocolo de configuración wg.
Auditorías
Se han realizado auditorías de seguridad independientes en el proyecto. Consulta el directorio audit.
WireGuard es una marca registrada de Jason A. Donenfeld. GotaTun no está patrocinado ni respaldado por Jason A. Donenfeld.