
gotatun v0.9.0
Implementazione userspace di WireGuard® in Rust
GotaTun
Un'implementazione di WireGuard® in userspace, 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 può essere trovata nel file "LICENSE" o su https://www.mozilla.org/MPL/2.0/.
I contributi effettuati prima del 5 marzo 2026 sono concessi in licenza secondo la vecchia licenza BSD a 3 clausole. Una copia di questa licenza può essere trovata nel file "LICENSE-CLOUDFLARE".
Contributo
Salvo dichiarazione contraria esplicita, qualsiasi contributo presentato intenzionalmente per l'inclusione nel lavoro da parte tua, come definito nella licenza MPL-2.0, sarà concesso in licenza come sopra, senza ulteriori termini o condizioni.
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 posizionato nella cartella ./target/release. Puoi copiarlo manualmente in una posizione desiderata, o installarlo usando cargo install --bin gotatun --path ..
Nix
Per compilare l'eseguibile, esegui semplicemente nix build .#gotatun. Il binario finale si troverà 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. Per esempio:
sudo WG_QUICK_USERSPACE_IMPLEMENTATION=gotatun WG_SUDO=1 wg-quick up CONFIGURATION
Nota: wg-quick ignorerà WG_QUICK_USERSPACE_IMPLEMENTATION su Linux se hai installato il modulo kernel wireguard.
Test
Testare questo progetto ha alcuni requisiti:
sudo: necessario per creare 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
| Tripletta di destinazione | Binario | Libreria |
|---|---|---|
| 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 | ✓ |
Altre triplette potrebbero funzionare, ma testiamo solo queste.
Linux
Le architetture x86-64 e aarch64 sono supportate. Il comportamento dovrebbe essere identico a quello di wireguard-go, con la seguente differenza:
gotatun abbasserà i privilegi all'avvio. Quando i privilegi vengono abbassati non è possibile impostare fwmark. Se fwmark è necessario, come quando si usa wg-quick, esegui con --disable-drop-privileges o imposta la variabile d'ambiente WG_SUDO=1.
Dovrai concedere all'eseguibile la capacità CAP_NET_ADMIN usando: sudo setcap cap_net_admin+epi gotatun. sudo non è necessario.
macOS
Il comportamento è simile a quello di wireguard-go. Nello specifico, il nome dell'interfaccia deve essere utun[0-9]+ per un nome esplicito o utun per far selezionare al kernel la prima disponibile. Se scegli utun come nome dell'interfaccia, e la variabile d'ambiente WG_TUN_NAME_FILE è definita, allora 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 o approvato da Jason A. Donenfeld.