
Implémentation de WireGuard® en espace utilisateur en Rust
Une implémentation de WireGuard® en espace utilisateur, et un fork de BoringTun.
Tout le code source de ce dépôt est soumis aux termes de la Mozilla Public License, version 2.0, sauf indication contraire. Une copie de cette licence peut être trouvée dans le fichier « LICENSE » ou à l'adresse https://www.mozilla.org/MPL/2.0/.
Les contributions effectuées avant le 5 mars 2026 sont sous licence BSD 3-clauses ancienne. Une copie de cette licence se trouve dans le fichier « LICENSE-CLOUDFLARE ».
Sauf indication contraire de votre part, toute contribution intentionnellement soumise pour inclusion dans le travail par vous, telle que définie par la licence MPL-2.0, sera concédée sous licence comme ci-dessus, sans aucune condition ou clause supplémentaire.
cargo build --lib --no-default-features --release [--target $(TARGET_TRIPLE)]cargo build --bin gotatun --release [--target $(TARGET_TRIPLE)]Par défaut, l'exécutable est placé dans le dossier ./target/release. Vous pouvez le copier manuellement à l'emplacement souhaité, ou l'installer en utilisant cargo install --bin gotatun --path ..
Pour compiler l'exécutable, exécutez simplement nix build .#gotatun. Le binaire final se trouvera dans result/bin/gotatun.
Conformément aux spécifications, pour démarrer un tunnel, utilisez :
gotatun [-f/--foreground] NOM-DE-L'INTERFACE
Le tunnel peut ensuite être configuré en utilisant wg, comme un tunnel WireGuard classique, ou tout autre outil.
Il est également possible de l'utiliser avec wg-quick en définissant la variable d'environnement WG_QUICK_USERSPACE_IMPLEMENTATION à gotatun. Par exemple :
sudo WG_QUICK_USERSPACE_IMPLEMENTATION=gotatun WG_SUDO=1 wg-quick up CONFIGURATION
Veuillez noter que wg-quick ignorera WG_QUICK_USERSPACE_IMPLEMENTATION sur Linux si vous avez le module noyau wireguard installé.
Tester ce projet nécessite quelques prérequis :
sudo : requis pour créer des tunnels. Lorsque vous exécutez cargo test, votre mot de passe vous sera demandé.apt-get install docker.io.D'autres cibles peuvent fonctionner, mais nous ne testons que celles-ci
Les architectures x86-64 et aarch64 sont supportées. Le comportement doit être identique à celui de wireguard-go, avec la différence suivante :
gotatun abandonne les privilèges lorsqu'il est démarré. Lorsque les privilèges sont abandonnés, il n'est pas possible de définir fwmark. Si fwmark est requis, comme lors de l'utilisation de wg-quick, exécutez avec --disable-drop-privileges ou définissez la variable d'environnement WG_SUDO=1.
Vous devrez donner à l'exécutable la capacité CAP_NET_ADMIN en utilisant : sudo setcap cap_net_admin+epi gotatun. sudo n'est pas nécessaire.
Le comportement est similaire à celui de wireguard-go. Plus précisément, le nom de l'interface doit être utun[0-9]+ pour un nom d'interface explicite, ou utun pour que le noyau sélectionne la plus basse disponible. Si vous choisissez utun comme nom d'interface et que la variable d'environnement WG_TUN_NAME_FILE est définie, alors le nom réel de l'interface choisi par le noyau est écrit dans le fichier spécifié par cette variable.
Voir UAPI pour les extensions du protocole de configuration wg.
Des audits de sécurité indépendants ont été menés sur le projet. Voir le répertoire audit.
WireGuard est une marque déposée de Jason A. Donenfeld. GotaTun n'est pas sponsorisé ou approuvé par Jason A. Donenfeld.
| Triplet cible | Binaire | Bibliothèque |
|---|
| 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 | ✓ |