
gotatun v0.9.2
Implementação do WireGuard® no Espaço do Usuário em Rust
GotaTun
Uma implementação em espaço de usuário do WireGuard®, e um fork do BoringTun.
Licença
Todo o código-fonte neste repositório está sujeito aos termos da Licença Pública Mozilla, versão 2.0, salvo indicação em contrário. Uma cópia desta licença pode ser encontrada no arquivo "LICENSE" ou em https://www.mozilla.org/MPL/2.0/.
As contribuições feitas antes de 5 de março de 2026 estão licenciadas sob a antiga licença BSD de 3 cláusulas. Uma cópia desta licença pode ser encontrada no arquivo "LICENSE-CLOUDFLARE".
Contribuição
A menos que você declare explicitamente o contrário, qualquer contribuição intencionalmente submetida para inclusão no trabalho por você, conforme definido na Licença MPL-2.0, será licenciada conforme acima, sem quaisquer termos ou condições adicionais.
Compilação
- Apenas biblioteca:
cargo build --lib --no-default-features --release [--target $(TARGET_TRIPLE)] - Executável:
cargo build --bin gotatun --release [--target $(TARGET_TRIPLE)]
Instalação
Por padrão, o executável é colocado na pasta ./target/release. Você pode copiá-lo para um local desejado manualmente, ou instalá-lo usando cargo install --bin gotatun --path ..
Nix
Para compilar o executável, basta executar nix build .#gotatun. O binário final estará localizado em result/bin/gotatun.
Execução
Conforme a especificação, para iniciar um túnel use:
gotatun [-f/--foreground] INTERFACE-NAME
O túnel pode então ser configurado usando o wg, como um túnel WireGuard comum, ou qualquer outra ferramenta.
Também é possível usá-lo com o wg-quick definindo a variável de ambiente WG_QUICK_USERSPACE_IMPLEMENTATION como gotatun. Por exemplo:
sudo WG_QUICK_USERSPACE_IMPLEMENTATION=gotatun WG_SUDO=1 wg-quick up CONFIGURATION
Observe que o wg-quick ignorará WG_QUICK_USERSPACE_IMPLEMENTATION no Linux se você tiver o módulo de kernel do wireguard instalado.
Testes
Testar este projeto tem alguns requisitos:
sudo: necessário para criar túneis. Ao executarcargo test, será solicitada sua senha.- Docker: você pode instalá-lo aqui. Se estiver no Ubuntu/Debian, você pode executar
apt-get install docker.io.
Plataformas suportadas
| Target triple | Binário | 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 | ✓ |
Outros targets podem funcionar, mas testamos apenas estes
Linux
As arquiteturas x86-64 e aarch64 são suportadas. O comportamento deve ser idêntico ao do wireguard-go, com a seguinte diferença:
O gotatun abrirá mão de privilégios quando iniciado. Quando os privilégios são abandonados, não é possível definir fwmark. Se fwmark for necessário, como ao usar wg-quick, execute com --disable-drop-privileges ou defina a variável de ambiente WG_SUDO=1.
Você precisará conceder ao executável a capacidade CAP_NET_ADMIN usando: sudo setcap cap_net_admin+epi gotatun. O sudo não é necessário.
macOS
O comportamento é semelhante ao do wireguard-go. Especificamente, o nome da interface deve ser utun[0-9]+ para um nome de interface explícito, ou utun para que o kernel selecione o menor disponível. Se você escolher utun como nome da interface, e a variável de ambiente WG_TUN_NAME_FILE estiver definida, então o nome real da interface escolhida pelo kernel será gravado no arquivo especificado por essa variável.
Extensões da UAPI
Consulte UAPI para extensões ao protocolo de configuração wg.
Auditorias
Auditorias de segurança independentes foram realizadas no projeto. Consulte o diretório audit.
WireGuard é uma marca registrada de Jason A. Donenfeld. GotaTun não é patrocinado nem endossado por Jason A. Donenfeld.