
Implementação do WireGuard® no Espaço do Usuário em Rust
Uma implementação de usuário do WireGuard®, e um fork do BoringTun.
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".
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.
cargo build --lib --no-default-features --release [--target $(TARGET_TRIPLE)]cargo build --bin gotatun --release [--target $(TARGET_TRIPLE)]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 ..
Para compilar o executável, simplesmente execute nix build .#gotatun. O binário final estará localizado em result/bin/gotatun.
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.
Testar este projeto tem alguns requisitos:
sudo: necessário para criar túneis. Quando você executar cargo test, será solicitada sua senha.apt-get install docker.io.Outros alvos podem funcionar, mas apenas testamos estes
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.
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.
Veja UAPI para extensões ao protocolo de configuração wg.
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.
| 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 | ✓ |