
gotatun v0.9.2
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 de este repositorio está sujeto a los términos de la Licencia Pública de Mozilla, versión 2.0, salvo que se indique lo contrario. 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. Puede encontrar una copia de esta licencia en el archivo "LICENSE-CLOUDFLARE".
Contribución
A menos que usted declare explícitamente lo contrario, cualquier contribución enviada intencionalmente para su inclusión en la obra por su 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. Puede copiarlo a la ubicación deseada manualmente, o instalarlo usando cargo install --bin gotatun --path ..
Nix
Para compilar el ejecutable, simplemente ejecute nix build .#gotatun. El binario final se encontrará en result/bin/gotatun.
Ejecución
Según la especificación, para iniciar un túnel use:
gotatun [-f/--foreground] INTERFACE-NAME
El túnel puede configurarse luego 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 en gotatun. Por ejemplo:
sudo WG_QUICK_USERSPACE_IMPLEMENTATION=gotatun WG_SUDO=1 wg-quick up CONFIGURATION
Tenga en cuenta que wg-quick ignorará WG_QUICK_USERSPACE_IMPLEMENTATION en Linux si tiene instalado el módulo del kernel de wireguard.
Pruebas
Probar este proyecto tiene algunos requisitos:
sudo: necesario para crear túneles. Cuando ejecutecargo testse le pedirá su contraseña.- Docker: puede instalarlo aquí. Si usa Ubuntu/Debian puede ejecutar
apt-get install docker.io.
Plataformas compatibles
| Target triple | Binario | Biblioteca |
|---|---|---|
| x86_64-unknown-linux-gnu | ✓ | ✓ |
| aarch64-unknown-linux-gnu | ✓ | ✓ |
| riscv64gc-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 targets 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 abandonará los privilegios al iniciarse. Cuando se abandonan los privilegios no es posible establecer fwmark. Si se requiere fwmark, como al usar wg-quick, ejecute con --disable-drop-privileges o establezca la variable de entorno WG_SUDO=1.
Deberá otorgar 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. En concreto, el nombre de la interfaz debe ser utun[0-9]+ para un nombre de interfaz explícito, o utun para que el kernel seleccione el más bajo disponible. Si elige utun como nombre de interfaz, y la variable de entorno WG_TUN_NAME_FILE está definida, entonces el nombre real de la interfaz elegida por el kernel se escribe en el archivo especificado por esa variable.
Extensiones de UAPI
Consulte UAPI para conocer las extensiones del protocolo de configuración wg.
Auditorías
Se han realizado auditorías de seguridad independientes sobre el proyecto. Consulte el directorio audit.
WireGuard es una marca registrada de Jason A. Donenfeld. GotaTun no está patrocinado ni respaldado por Jason A. Donenfeld.