
gotatun v0.9.2
Implementazione userspace di WireGuard® in Rust
GotaTun
Un'implementazione userspace di WireGuard®, e un fork di BoringTun.
Licenza
Tutto il codice sorgente in questo repository è soggetto ai termini della Mozilla Public License, versione 2.0, salvo diversa indicazione. Una copia di questa licenza è disponibile nel file "LICENSE" o all'indirizzo https://www.mozilla.org/MPL/2.0/.
I contributi effettuati prima del 5 marzo 2026 sono concessi in licenza secondo la vecchia licenza BSD 3-clause. Una copia di questa licenza è disponibile nel file "LICENSE-CLOUDFLARE".
Contributi
Salvo che tu dichiari esplicitamente il contrario, qualsiasi contributo da te intenzionalmente inviato per l'inclusione nell'opera, come definito nella Licenza MPL-2.0, sarà concesso in licenza come sopra, senza termini o condizioni aggiuntivi.
Compilazione
- Solo libreria:
cargo build --lib --no-default-features --release [--target $(TARGET_TRIPLE)] - Eseguibile:
cargo build --bin gotatun --release [--target $(TARGET_TRIPLE)]
Installazione
Per impostazione predefinita l'eseguibile viene collocato nella cartella ./target/release. Puoi copiarlo manualmente nella posizione desiderata, oppure installarlo usando cargo install --bin gotatun --path ..
Nix
Per compilare l'eseguibile, è sufficiente eseguire nix build .#gotatun. Il binario finale sarà collocato in result/bin/gotatun.
Esecuzione
Come da specifica, per avviare un tunnel usa:
gotatun [-f/--foreground] INTERFACE-NAME
Il tunnel può quindi essere configurato usando wg, come un normale tunnel WireGuard, o qualsiasi altro strumento.
È anche possibile utilizzarlo con wg-quick impostando la variabile d'ambiente WG_QUICK_USERSPACE_IMPLEMENTATION su gotatun. Ad esempio:
sudo WG_QUICK_USERSPACE_IMPLEMENTATION=gotatun WG_SUDO=1 wg-quick up CONFIGURATION
Tieni presente che wg-quick ignorerà WG_QUICK_USERSPACE_IMPLEMENTATION su Linux se hai installato il modulo kernel wireguard.
Test
Il test di questo progetto richiede alcuni requisiti:
sudo: necessario per creare i tunnel. Quando eseguicargo testti verrà chiesta la password.- Docker: puoi installarlo qui. Se sei su Ubuntu/Debian puoi eseguire
apt-get install docker.io.
Piattaforme supportate
| Target triple | Binario | Libreria |
|---|---|---|
| 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 | ✓ |
Altri target potrebbero funzionare, ma testiamo solo questi
Linux
Sono supportate le architetture x86-64 e aarch64. Il comportamento dovrebbe essere identico a quello di wireguard-go, con la seguente differenza:
gotatun rilascerà i privilegi all'avvio. Quando i privilegi vengono rilasciati non è possibile impostare fwmark. Se fwmark è necessario, ad esempio quando si usa wg-quick, esegui con --disable-drop-privileges o imposta la variabile d'ambiente WG_SUDO=1.
Dovrai concedere all'eseguibile la capability CAP_NET_ADMIN usando: sudo setcap cap_net_admin+epi gotatun. sudo non è necessario.
macOS
Il comportamento è simile a quello di wireguard-go. In particolare il nome dell'interfaccia deve essere utun[0-9]+ per un nome di interfaccia esplicito, oppure utun per far selezionare al kernel quello con il numero più basso disponibile. Se scegli utun come nome dell'interfaccia e la variabile d'ambiente WG_TUN_NAME_FILE è definita, il nome effettivo dell'interfaccia scelto dal kernel viene scritto nel file specificato da quella variabile.
Estensioni UAPI
Vedi UAPI per le estensioni al protocollo di configurazione wg.
Audit
Sono stati condotti audit di sicurezza indipendenti sul progetto. Vedi la directory audit.
WireGuard è un marchio registrato di Jason A. Donenfeld. GotaTun non è sponsorizzato né approvato da Jason A. Donenfeld.