4 pontos por GN⁺ 2025-12-20 | 1 comentários | Compartilhar no WhatsApp
  • GotaTun é uma implementação do WireGuard escrita em Rust, com o objetivo de oferecer conexões VPN rápidas, eficientes e estáveis
  • Foi desenvolvida a partir de um fork do projeto BoringTun, da Cloudflare, e integra recursos de privacidade da Mullvad como DAITA e Multihop
  • Foi aplicada primeiro na versão para Android para resolver problemas de travamento que ocorriam no wireguard-go, reduzindo a taxa de travamentos de 0,40% para 0,01%
  • Com a migração para Rust, foram eliminados os problemas de complexidade de FFI e instabilidade do runtime do Go, melhorando a manutenção e a eficiência na depuração
  • A Mullvad planeja expandir o GotaTun para todas as plataformas em 2026, além de realizar auditoria de segurança e melhorias de desempenho

Visão geral do GotaTun

  • GotaTun é uma implementação do WireGuard® baseada em Rust desenvolvida pela Mullvad VPN, com foco em velocidade, estabilidade e eficiência
    • Desenvolvida a partir de um fork do BoringTun, da Cloudflare
    • O nome combina BoringTun com o túnel Götatunneln, em Gotemburgo, na Suécia
  • Integra recursos de reforço de privacidade da Mullvad, como DAITA e Multihop
  • Otimiza o desempenho com multithreading seguro do Rust e uma estratégia de memória zero-copy
  • Foi lançada na versão para Android no fim de novembro de 2024, e as outras plataformas estão previstas para 2026

Limitações do wireguard-go anterior

  • O app móvel da Mullvad usou por anos o wireguard-go, baseado em Go
    • Vários provedores de VPN usam a mesma implementação
  • Desde meados de 2024, a Mullvad vinha mantendo um fork do wireguard-go para dar suporte a DAITA e Multihop
  • No entanto, mais de 85% dos travamentos relatados no Google Play Console ocorriam no wireguard-go
    • Alguns problemas foram resolvidos, mas muitos ainda permaneciam
  • Havia complexidade e instabilidade causadas pelo uso de FFI (interface de função externa) entre Rust e Go
    • O comportamento do runtime do Go era opaco a partir do código Rust, e em caso de travamento era difícil recuperar o stack trace
    • Isso dificultava a depuração e a manutenção de longo prazo

Resultados no Android

  • Após a adoção do GotaTun, não houve um único travamento
    • Todos os travamentos que ocorriam no wireguard-go foram eliminados
  • Desde a versão 2025.10 do app Android (lançada no fim de novembro), a taxa de travamentos percebida pelos usuários caiu de 0,40% para 0,01%
  • O feedback dos usuários também relatou melhora de velocidade e menor consumo de bateria

Próximos planos

  • Uma auditoria de segurança por terceiros está prevista para o início de 2026
  • O wireguard-go será substituído pelo GotaTun em todas as plataformas (incluindo desktop e iOS)
  • Os trabalhos de melhoria de desempenho continuarão
  • A Mullvad definiu 2026 como o principal ponto de virada para a expansão do GotaTun

1 comentários

 
GN⁺ 2025-12-20
Comentários do Hacker News
  • No Pixel 8, a melhora de desempenho foi claramente perceptível
    Antes, o wireguard-go não conseguia nem 100 Mbps, mas com a versão GotaTun passa de 500 Mbps
    Porém, por causa de um novo bug, ele não consegue entrar em modo de sono profundo, e a bateria acaba de repente 10 vezes mais rápido

    • No meu velho Samsung A5, mesmo com o wireguard ligado 24/7, a bateria dura bastante
      O Pixel 8 é muito mais potente, então se esse problema existe, é bem provável que seja um bug do Android
    • Eu também vi algo parecido no ZeroTier e no MizuDroid. Parece um problema da pilha de rede do Android
    • Tive o mesmo fenômeno no Raspberry Pi 5. Talvez seja por falta de otimização para ARM
    • Pode ser o problema de MTU 1320
    • Então era por isso que o app da Mullvad no Pixel 6a de repente começou a conectar em 1 segundo. Antes levava de 5 a 10 segundos
  • Eu gosto tanto do WireGuard que criei pessoalmente um projeto chamado WrapGuard
    Escrevi em Go para poder rodar o app sem privilégios de root
    Não conheço bem Rust, então fico curioso se Rust é mais adequado para firmware ou software de rede
    Link do GitHub do WrapGuard

    • Firmware precisa rodar em um ambiente sem GC, então Rust é mais adequado
      Rust oferece temporização previsível e alta confiabilidade graças ao seu forte sistema de tipos
      Mas, para software de rede, Go também é bom o bastante, e no fim a conclusão é que “é melhor usar a linguagem com a qual você já está acostumado
    • No fim, vale a máxima “escolha o diabo que você conhece”, então usar uma linguagem que você já domina é o mais realista
    • Como o FFI em Go é complicado, Rust leva vantagem para uso como biblioteca embarcada
    • Estou pensando no que seria melhor para rede local de contêineres sem necessidade de criptografia
      Pretendo testar a nova container tool da Apple
    • Seria bom ter uma função para unir vários túneis VPN em um só
      Por exemplo, a airVPN permite 5 conexões simultâneas, então seria interessante poder agregá-las e combinar o tráfego
  • Seria ótimo se o GotaTun também fosse aplicado ao app Android do Tailscale. Eu uso o Tailscale para acessar a Mullvad

    • O GotaTun é um recurso exclusivo da Mullvad, então é pouco provável que o Tailscale o adote
      A equipe do Tailscale é muito boa em otimizar bibliotecas baseadas em Go,
      e em abril de 2023 alcançou desempenho de 10 Gbps com o wireguard-go
      Post de blog relacionado
  • Achei interessantes os problemas de paginação de memória no Go e de prevenção de stack overflow em goroutines
    Fico curioso por que o GoString pagina tanta memória
    Veja a issue #6727 e a issue #7728

  • Seria bom se o próprio protocolo WireGuard também melhorasse
    Hoje ele tem a limitação de ser difícil furar bloqueios de governos ou ISPs

    • Esse não é o papel do WireGuard, mas de protocolos de encapsulamento como o shadowsocks
      O WireGuard foi projetado como um túnel UDP L3 simples
    • É por isso que existem forks como o amnezia-wg
    • O app da Mullvad tem opções de contorno como shadowsocks,
      mas seria melhor se isso estivesse embutido no próprio protocolo
    • Se quiser ler mais sobre isso, vale consultar a seção Known Limitations da documentação oficial
  • Se houvesse alguém da equipe de implementação aqui, eu perguntaria — por que essas mudanças não foram enviadas para upstream no BoringTun?

    • O BoringTun está em reestruturação há 3 anos, então dá para entender a Mullvad ter seguido de forma independente
      Quanto mais implementações existirem, maior será a estabilidade e confiabilidade do protocolo
      Pessoalmente, confio mais na Mullvad do que na Cloudflare
    • O BoringTun está praticamente em estado de manutenção interrompida
      A Obscura VPN migrou para o fork NepTUN
      Link do GitHub do NepTUN
      Fico curioso para saber por que a Mullvad criou um novo fork e se há planos de integrá-lo com forks existentes
  • Acho que a Mullvad é a opção mais confiável entre as VPNs
    Mas as pessoas se sentem mais atraídas pelos códigos de desconto de youtubers

    • Em termos de privacidade, a Mullvad é excelente, mas cai na maioria das listas de bloqueio de VPN
      A NordVPN contorna isso bem. Por exemplo, em sites como Imgur ou em acessos dentro do Reino Unido, a Mullvad é bloqueada
    • Para usuários comuns, o objetivo é desbloquear restrições geográficas, então a Mullvad não é tão atraente
    • Muita gente também deixou de considerá-la depois que o encaminhamento de porta foi encerrado
    • Os IPs da Mullvad são frequentemente bloqueados por serviços de streaming, então acabo tendo que usar a Nord
    • Além disso, também é comum uma única empresa comprar várias marcas de VPN e rebatizá-las
  • Eu achava que o WireGuard rodava dentro do kernel no Android

    • Na prática, ele precisa ser ativado como módulo, mas no kernel do Android isso vem desabilitado
  • Gostaria de ver mais dados da análise das causas de crash do wireguard-go
    Fico curioso se é bug da própria biblioteca ou problema de FFI

    • Como o WireGuard é algo simples baseado em UDP, é surpreendente que ocorram crashes
  • No app MintFlow eu não uso código de proxy baseado em Go
    Em vez disso, implemento alguns protocolos de proxy em Rust
    Para o WireGuard, uso uma implementação em C baseada no plugin fdio vpp

    • É surpreendente que uma implementação baseada em vpp seja possível no iOS
      Eu mesmo trabalhei com vpp por uns 6 meses no passado e achei bem interessante