GotaTun – l’implémentation WireGuard en Rust de Mullvad
(mullvad.net)- GotaTun est une implémentation de WireGuard écrite en Rust, conçue pour offrir des connexions VPN rapides, efficaces et stables
- Développé à partir d’un fork du projet BoringTun de Cloudflare, il intègre des fonctionnalités de confidentialité de Mullvad comme DAITA et Multihop
- D’abord déployé sur Android pour résoudre les problèmes de plantage observés avec wireguard-go, avec un taux de plantage réduit de 0,40 % à 0,01 %
- Le passage à Rust a supprimé les problèmes liés à la complexité de la FFI et à l’instabilité du runtime Go, améliorant la maintenabilité et l’efficacité du débogage
- Mullvad prévoit en 2026 d’étendre GotaTun à toutes les plateformes et de poursuivre les audits de sécurité et les améliorations de performances
Présentation de GotaTun
- GotaTun est une implémentation de WireGuard® en Rust développée par Mullvad VPN, avec pour objectif la rapidité, la stabilité et l’efficacité
- Développé à partir d’un fork de BoringTun de Cloudflare
- Son nom combine BoringTun et Götatunneln, le tunnel de Göteborg en Suède
- Il intègre des fonctionnalités de renforcement de la confidentialité de Mullvad comme DAITA et Multihop
- Les performances sont optimisées grâce au multithreading sûr de Rust et à une stratégie mémoire zero-copy
- Déployé sur Android fin novembre 2024, avec une sortie sur les autres plateformes prévue en 2026
Limites de wireguard-go
- L’application mobile de Mullvad utilise depuis des années wireguard-go, basé sur Go
- Plusieurs fournisseurs de VPN utilisent la même implémentation
- Depuis le milieu de l’année 2024, Mullvad maintient un fork de wireguard-go pour prendre en charge DAITA et Multihop
- Cependant, plus de 85 % des plantages signalés dans la console développeur Google Play provenaient de wireguard-go
- Certains problèmes ont été résolus, mais beaucoup subsistent encore
- L’utilisation d’une FFI (interface de fonctions externes) entre Rust et Go ajoutait complexité et instabilité
- Le comportement du runtime Go est opaque depuis le code Rust, et la récupération des traces de pile en cas de plantage est difficile
- Cela compliquait le débogage et la maintenance à long terme
Résultats sur Android
- Depuis l’introduction de GotaTun, aucun plantage n’a été observé
- Tous les plantages auparavant liés à wireguard-go ont été éliminés
- Depuis la version Android 2025.10 (sortie fin novembre), le taux de plantage perçu par les utilisateurs est passé de 0,40 % à 0,01 %
- Les retours utilisateurs signalent également de meilleures performances et une réduction de la consommation de batterie
Prochaines étapes
- Un audit de sécurité tiers est prévu au début de l’année 2026
- Toutes les plateformes (y compris desktop et iOS) doivent remplacer wireguard-go par GotaTun
- Les travaux d’amélioration des performances vont se poursuivre
- Mullvad fait de 2026 un tournant majeur pour l’extension de GotaTun
1 commentaires
Commentaires Hacker News
Sur le Pixel 8, le gain de performances était clairement perceptible
Avant,
wireguard-gon’arrivait même pas à sortir 100 Mbps, alors qu’avec la version GotaTun on dépasse les 500 MbpsEn revanche, à cause d’un nouveau bug, l’appareil n’entre plus en mode deep sleep, ce qui provoque une décharge de batterie soudainement 10 fois plus rapide
Le Pixel 8 est bien plus puissant, donc si ce problème apparaît, il y a de fortes chances que ce soit un bug côté Android
J’aime tellement WireGuard que j’ai moi-même créé un projet appelé WrapGuard
Je l’ai écrit en Go pour pouvoir exécuter l’application sans accès root
Je ne connais pas bien Rust, mais je me demande s’il est plus adapté aux firmwares ou aux logiciels réseau
Lien GitHub de WrapGuard
Rust est plus fiable grâce à son timing prévisible et à son système de types robuste
Mais pour les logiciels réseau, Go est largement suffisant, et au final la conclusion est qu’« il vaut mieux utiliser le langage qu’on maîtrise »
Je compte essayer le nouveau container tool d’Apple
Par exemple, airVPN autorise 5 connexions simultanées, donc ce serait bien de pouvoir les fusionner pour agréger le trafic
J’aimerais que GotaTun soit aussi intégré à l’application Android de Tailscale. J’utilise Tailscale pour me connecter à Mullvad
L’équipe Tailscale maîtrise très bien l’optimisation des bibliothèques basées sur Go,
et en avril 2023 elle avait atteint des performances de 10 Gbps avec
wireguard-goArticle de blog associé
Les problèmes de pagination mémoire de Go et la prévention des débordements de pile des goroutines étaient intéressants
Je me demande pourquoi GoString pagine autant de mémoire
Voir issue #6727 et issue #7728
J’aimerais aussi voir des améliorations du protocole WireGuard lui-même
À l’heure actuelle, il a la limite de mal parvenir à contourner les blocages des gouvernements ou des FAI
WireGuard a été conçu comme un simple tunnel UDP L3
mais ce serait encore mieux si cela était intégré directement au protocole
S’il y a quelqu’un de l’équipe d’implémentation, j’aimerais demander pourquoi les changements n’ont pas été contribués en amont à BoringTun
Plus il existe d’implémentations, plus la stabilité et la fiabilité du protocole augmentent
Personnellement, je fais davantage confiance à Mullvad qu’à Cloudflare
Obscura VPN est passé au fork NepTUN
Lien GitHub de NepTUN
Je me demande pourquoi Mullvad a créé un nouveau fork et s’il est prévu de le fusionner avec les forks existants
Je pense que Mullvad est le choix le plus digne de confiance parmi les VPN
Mais les gens sont davantage attirés par les codes promo des youtubeurs
NordVPN contourne bien cela. Par exemple, Mullvad est bloqué sur Imgur ou depuis le Royaume-Uni
Je pensais que WireGuard fonctionnait dans le noyau sur Android
J’aimerais voir plus de données d’analyse sur les causes des crashs de
wireguard-goJe me demande si cela vient d’un bug de la bibliothèque elle-même ou d’un problème de FFI
Dans l’application MintFlow, je n’utilise pas de code proxy basé sur Go
À la place, j’implémente certains protocoles proxy en Rust
Pour WireGuard, j’utilise une implémentation en C basée sur le plugin fdio vpp
J’ai moi-même travaillé avec vpp pendant environ 6 mois autrefois, et c’était assez intéressant