
gotatun v0.9.0
Implementação do WireGuard® no Espaço do Usuário em Rust
GotaTun
Uma implementaçã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 Mozilla Public License, 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/.
Contribuições feitas antes de 5 de março de 2026 sã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 manualmente para o local desejado, ou instalá-lo usando cargo install --bin gotatun --path ..
Nix
Para compilar o executável, simplesmente execute 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 wg, como um túnel WireGuard regular, ou qualquer outra ferramenta.
Também é possível usar com wg-quick definindo a variável de ambiente WG_QUICK_USERSPACE_IMPLEMENTATION para gotatun. Por exemplo:
sudo WG_QUICK_USERSPACE_IMPLEMENTATION=gotatun WG_SUDO=1 wg-quick up CONFIGURATION
Por favor, note que wg-quick ignorará WG_QUICK_USERSPACE_IMPLEMENTATION no Linux se você tiver o módulo do kernel wireguard instalado.
Testes
Testar este projeto tem alguns requisitos:
sudo: necessário para criar túneis. Quando você 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
| Tripla alvo | Binário | 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 | ✓ |
Outros alvos podem funcionar, mas apenas testamos 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:
gotatun irá reduzir privilégios quando iniciado. Quando os privilégios são reduzidos, 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á dar 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 mais baixo 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á escrito no arquivo especificado por essa variável.
Extensões UAPI
Veja UAPI para extensões ao protocolo de configuração wg.
Auditorias
Auditorias de segurança independentes foram realizadas no projeto. Veja o diretório audit.
WireGuard é uma marca registrada de Jason A. Donenfeld. GotaTun não é patrocinado ou endossado por Jason A. Donenfeld.