
Implementación de WireGuard® en espacio de usuario en Rust
Una implementación de WireGuard® en espacio de usuario, y un fork de BoringTun.
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".
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.
cargo build --lib --no-default-features --release [--target $(TARGET_TRIPLE)]cargo build --bin gotatun --release [--target $(TARGET_TRIPLE)]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 ..
Para compilar el ejecutable, simplemente ejecuta nix build .#gotatun. El binario final se ubicará en result/bin/gotatun.
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.
Probar este proyecto tiene algunos requisitos:
sudo: necesario para crear túneles. Cuando ejecutes cargo test se te solicitará tu contraseña.apt-get install docker.io.Otros destinos pueden funcionar, pero solo probamos estos
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.
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.
Consulta UAPI para extensiones al protocolo de configuración wg.
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.
| 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 | ✓ |