4 points par GN⁺ 2025-12-20 | 1 commentaires | Partager sur WhatsApp
  • 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
Publicité

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
Publicité

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

 
GN⁺ 2025-12-20
Commentaires Hacker News
  • Sur le Pixel 8, le gain de performances était clairement perceptible
    Avant, wireguard-go n’arrivait même pas à sortir 100 Mbps, alors qu’avec la version GotaTun on dépasse les 500 Mbps
    En 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

    • Sur mon ancien Samsung A5, même avec WireGuard activé 24/7, la batterie tient longtemps
      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’ai vu un phénomène similaire avec ZeroTier et MizuDroid. Ça ressemble à un problème de la stack réseau Android
    • J’ai eu le même problème sur un Raspberry Pi 5. C’est peut-être lié à un manque d’optimisation ARM
    • Ça peut venir du problème de MTU à 1320
    • C’était donc pour ça que l’app Mullvad s’est mise à se connecter soudainement en 1 seconde sur mon Pixel 6a. Avant, ça prenait 5 à 10 secondes
  • 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

    • Les firmwares doivent fonctionner dans des environnements sans GC, donc Rust est plus adapté
      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 »
    • Au final, comme dit l’expression « mieux vaut le diable qu’on connaît », il est plus réaliste d’utiliser un langage qu’on connaît
    • Le FFI est difficile en Go, donc pour servir de bibliothèque embarquée, Rust a l’avantage
    • Je réfléchis à ce qui serait le mieux pour du réseau local de conteneurs ne nécessitant pas de chiffrement
      Je compte essayer le nouveau container tool d’Apple
    • Ce serait bien d’avoir une fonction permettant de regrouper plusieurs tunnels VPN en un seul
      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

    • GotaTun est une fonctionnalité spécifique à Mullvad, donc il est peu probable que Tailscale l’adopte
      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-go
      Article 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

    • Ce n’est pas le rôle de WireGuard, mais celui de protocoles d’encapsulation comme shadowsocks
      WireGuard a été conçu comme un simple tunnel UDP L3
    • C’est pour cette raison qu’il existe des forks comme amnezia-wg
    • L’application Mullvad propose des options de contournement comme shadowsocks,
      mais ce serait encore mieux si cela était intégré directement au protocole
    • Si vous voulez en lire davantage à ce sujet, consultez la section Known Limitations de la documentation officielle
  • 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

    • BoringTun est en pleine refonte de son architecture depuis 3 ans, donc je comprends que Mullvad ait avancé de manière indépendante
      Plus il existe d’implémentations, plus la stabilité et la fiabilité du protocole augmentent
      Personnellement, je fais davantage confiance à Mullvad qu’à Cloudflare
    • BoringTun est en pratique quasiment abandonné côté maintenance
      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

    • Mullvad est excellent sur le plan de la confidentialité, mais il figure sur la plupart des listes de blocage de VPN
      NordVPN contourne bien cela. Par exemple, Mullvad est bloqué sur Imgur ou depuis le Royaume-Uni
    • Pour les utilisateurs ordinaires, l’objectif est surtout de débloquer des contenus géorestreints, donc Mullvad n’est pas très attractif
    • Beaucoup l’ont aussi écarté de leurs choix depuis l’arrêt du port forwarding
    • Les IP de Mullvad sont souvent bloquées par les services de streaming, donc on n’a parfois pas d’autre choix que d’utiliser Nord
    • En plus, il arrive souvent qu’une même entreprise rachète plusieurs marques de VPN pour les rebrander
  • Je pensais que WireGuard fonctionnait dans le noyau sur Android

    • En réalité, il faut l’activer comme module, et il est désactivé dans les noyaux Android
  • J’aimerais voir plus de données d’analyse sur les causes des crashs de wireguard-go
    Je me demande si cela vient d’un bug de la bibliothèque elle-même ou d’un problème de FFI

    • Je suis surpris qu’il puisse y avoir des crashs alors que WireGuard repose sur un simple protocole UDP
  • 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

    • Je suis surpris qu’une implémentation basée sur vpp soit possible sur iOS
      J’ai moi-même travaillé avec vpp pendant environ 6 mois autrefois, et c’était assez intéressant