4 puntos por GN⁺ 2025-12-20 | 1 comentarios | Compartir por WhatsApp
  • GotaTun es una implementación de WireGuard escrita en Rust, orientada a ofrecer conexiones VPN rápidas, eficientes y estables
  • Fue desarrollada a partir de un fork del proyecto BoringTun de Cloudflare, e integra funciones de privacidad de Mullvad como DAITA y Multihop
  • Se aplicó primero en la versión de Android para resolver problemas de fallos que ocurrían en wireguard-go, reduciendo la tasa de fallos de 0.40% a 0.01%
  • Al migrar a una base en Rust, se eliminaron los problemas de complejidad de FFI e inestabilidad del runtime de Go, mejorando la mantenibilidad y la eficiencia de depuración
  • Mullvad planea en 2026 expandir GotaTun a todas las plataformas, además de realizar auditorías de seguridad y mejoras de rendimiento

Resumen de GotaTun

  • GotaTun es una implementación de WireGuard® basada en Rust desarrollada por Mullvad VPN, con el objetivo de ofrecer alta velocidad, estabilidad y eficiencia
    • Fue desarrollada a partir de un fork de BoringTun de Cloudflare
    • El nombre combina BoringTun con Götatunneln, el túnel de Gotemburgo en Suecia
  • Integra funciones de refuerzo de privacidad de Mullvad como DAITA y Multihop
  • Optimiza el rendimiento aprovechando el multithreading seguro de Rust y una estrategia de memoria zero-copy
  • Su despliegue en Android se completó a fines de noviembre de 2024, y su llegada a otras plataformas está prevista para 2026

Limitaciones del wireguard-go existente

  • Durante años, la app móvil de Mullvad utilizó wireguard-go, basado en Go
    • Varios proveedores de VPN usan la misma implementación
  • Desde mediados de 2024, Mullvad mantuvo un fork de wireguard-go para dar soporte a DAITA y Multihop
  • Sin embargo, más del 85% de los fallos reportados en la Google Play Developer Console se originaban en wireguard-go
    • Algunos problemas se resolvieron, pero muchos seguían pendientes
  • También existían complejidad e inestabilidad derivadas del uso de FFI (interfaz de funciones externas) entre Rust y Go
    • El comportamiento del runtime de Go era opaco desde el código Rust, y cuando ocurrían fallos, era difícil recuperar el stack trace
    • Esto complicaba la depuración y el mantenimiento a largo plazo

Resultados en Android

  • Tras la adopción de GotaTun, no se produjo ni un solo fallo
    • Se eliminaron todos los fallos que ocurrían en wireguard-go
  • Desde la versión 2025.10 de la app para Android (lanzada a fines de noviembre), la tasa de fallos percibida por los usuarios bajó de 0.40% a 0.01%
  • En los comentarios de los usuarios también se reportaron mejoras de velocidad y menor consumo de batería

Planes a futuro

  • A inicios de 2026 está prevista una auditoría de seguridad de terceros
  • Está previsto reemplazar wireguard-go por GotaTun en todas las plataformas (incluyendo escritorio e iOS)
  • Se seguirá impulsando el trabajo de mejora de rendimiento
  • Mullvad considera 2026 como un punto de inflexión clave para la expansión de GotaTun

1 comentarios

 
GN⁺ 2025-12-20
Comentarios de Hacker News
  • En el Pixel 8 se notó claramente una mejora de rendimiento
    Antes, wireguard-go ni siquiera sacaba 100Mbps, pero con la versión de GotaTun da más de 500Mbps
    Eso sí, por un bug nuevo no puede entrar en modo de sueño profundo, así que la batería se drena de golpe 10 veces más rápido

    • En mi viejo Samsung A5, incluso con wireguard encendido 24/7, la batería dura bastante
      El Pixel 8 es mucho más potente, así que si pasa esto, probablemente sea un bug del lado de Android
    • Yo también vi algo parecido con ZeroTier y MizuDroid. Parece un problema del stack de red de Android
    • En la Raspberry Pi 5 pasó lo mismo. Tal vez sea por la falta de optimización para ARM
    • Podría ser un problema de MTU 1320
    • Por esto la app de Mullvad en el Pixel 6a de repente empezó a conectarse en 1 segundo. Antes tardaba entre 5 y 10 segundos
  • Me gusta tanto WireGuard que hice mi propio proyecto llamado WrapGuard
    Lo escribí en Go para poder ejecutar apps sin permisos de root
    No sé mucho de Rust, así que me pregunto si Rust es más adecuado para firmware o software de red
    Enlace al GitHub de WrapGuard

    • El firmware tiene que funcionar en un entorno sin GC, así que Rust es más adecuado
      Rust ofrece timing predecible y una gran confiabilidad gracias a su fuerte sistema de tipos
      Pero para software de red, Go también es suficientemente bueno y al final la conclusión es: mejor usar el lenguaje que ya conoces
    • Al final es como el dicho: más vale diablo conocido; usar un lenguaje que ya manejas es lo más realista
    • Como Go hace difícil el FFI, Rust tiene ventaja para usarse como biblioteca embebida
    • Estoy pensando qué sería mejor para redes locales de contenedores donde no se necesita cifrado
      Quiero probar la nueva container tool de Apple
    • Estaría bueno tener una función para agrupar varios túneles VPN en uno solo
      Por ejemplo, airVPN permite 5 conexiones simultáneas, así que sería genial poder fusionarlas para combinar el tráfico
  • Ojalá GotaTun también llegue a la app de Tailscale para Android. Yo uso Tailscale para conectarme a Mullvad

    • GotaTun es una función exclusiva de Mullvad, así que es poco probable que Tailscale la adopte
      El equipo de Tailscale es muy bueno optimizando bibliotecas basadas en Go,
      y en abril de 2023 lograron 10Gbps de rendimiento con wireguard-go
      Post del blog relacionado
  • Me pareció interesante el tema de la paginación de memoria en Go y el problema para evitar desbordamientos de pila en las goroutines
    Me pregunto por qué GoString pagina tanta memoria
    Ver issue #6727 y issue #7728

  • Estaría bien que también mejorara el propio protocolo WireGuard
    Actualmente tiene la limitación de que es difícil superar los bloqueos de gobiernos o ISP

    • Ese no es el papel de WireGuard, sino de protocolos de encapsulación como shadowsocks
      WireGuard está diseñado como un túnel UDP L3 simple
    • Por eso existen forks como amnezia-wg
    • La app de Mullvad tiene opciones de evasión como shadowsocks,
      pero estaría mejor si vinieran integradas en el propio protocolo
    • Si quieres leer más sobre esto, revisa la sección Known Limitations de la documentación oficial
  • Si hay alguien del equipo de implementación, me gustaría preguntar por qué no hicieron upstream de los cambios a BoringTun

    • BoringTun lleva 3 años en plena reestructuración, así que se entiende que Mullvad haya seguido por su cuenta
      Mientras existan varias implementaciones, aumenta la estabilidad y confiabilidad del protocolo
      Personalmente confío más en Mullvad que en Cloudflare
    • BoringTun está prácticamente en estado de mantenimiento abandonado
      En Obscura VPN cambiaron al fork NepTUN
      Enlace al GitHub de NepTUN
      Me pregunto por qué Mullvad hizo un fork nuevo y si planean integrarlo con forks existentes
  • Creo que Mullvad es la opción más confiable entre las VPN
    Pero a la gente le atraen más los códigos de descuento de los youtubers

    • Mullvad es de lo mejor en privacidad, pero aparece en la mayoría de las listas de bloqueo de VPN
      NordVPN esquiva eso mejor. Por ejemplo, con Mullvad te bloquean en Imgur o al acceder desde Reino Unido
    • Para los usuarios comunes, el objetivo es quitar bloqueos geográficos, así que Mullvad no resulta tan atractivo
    • Desde que quitaron el reenvío de puertos, también dejó de ser opción para mucha gente
    • Las IP de Mullvad suelen estar bloqueadas en servicios de streaming, así que no queda otra que usar Nord
    • Además, muchas marcas de VPN terminan siendo adquiridas por una sola empresa y remarcadas
  • Yo pensaba que WireGuard corría dentro del kernel en Android

    • En realidad hay que activarlo como módulo, pero en el kernel de Android viene deshabilitado
  • Me gustaría ver más datos del análisis de causas de los crashes de wireguard-go
    Me intriga si es un bug de la propia biblioteca o un problema de FFI

    • Como WireGuard es algo tan simple basado en UDP, sorprende que haya crashes
  • En la app MintFlow no uso código de proxy basado en Go
    En cambio, implemento algunos protocolos de proxy en Rust
    Para WireGuard uso una implementación en C basada en el plugin fdio vpp

    • Sorprende que una implementación basada en vpp sea posible en iOS
      Yo también trabajé con vpp unos 6 meses antes y me pareció bastante interesante