
Implementazione userspace di WireGuard® in Rust
Un'implementazione di WireGuard® in userspace, e un fork di BoringTun.
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".
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.
cargo build --lib --no-default-features --release [--target $(TARGET_TRIPLE)]cargo build --bin gotatun --release [--target $(TARGET_TRIPLE)]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 ..
Per compilare l'eseguibile, esegui semplicemente nix build .#gotatun. Il binario finale si troverà in result/bin/gotatun.
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.
Testare questo progetto ha alcuni requisiti:
sudo: necessario per creare tunnel. Quando esegui cargo test ti verrà chiesta la password.apt-get install docker.io.Altre triplette potrebbero funzionare, ma testiamo solo queste.
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.
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.
Vedi UAPI per le estensioni al protocollo di configurazione wg.
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.
| 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 | ✓ |