4 ポイント 投稿者 GN⁺ 2025-12-20 | 1件のコメント | WhatsAppで共有
  • GotaTunはRustで書かれたWireGuard実装で、高速かつ効率的で安定したVPN接続を目指している
  • CloudflareのBoringTunプロジェクトをフォークして開発され、DAITAMultihopといったMullvadのプライバシー機能を統合
  • 既存のwireguard-goで発生していたクラッシュ問題を解決するため、まずAndroid版に適用され、クラッシュ率 0.40% → 0.01% に減少
  • Rustベースへ移行することで、FFIの複雑さGoランタイムの不安定性の問題を解消し、保守性とデバッグ効率を向上
  • Mullvadは2026年にすべてのプラットフォームへGotaTunを拡大し、セキュリティ監査と性能改善を進める計画

GotaTunの概要

  • GotaTunはMullvad VPNが開発したRustベースのWireGuard®実装で、高速性・安定性・効率性を目標としている
    • CloudflareのBoringTunをフォークして開発
    • 名前はBoringTunとスウェーデン・イェーテボリのトンネルGötatunnelnを組み合わせたもの
  • DAITAMultihopといったMullvadのプライバシー強化機能を統合
  • Rustの安全なマルチスレッドzero-copyメモリ戦略を活用して性能を最適化
  • 2024年11月末にAndroid版への展開を完了し、他プラットフォームは2026年に公開予定

従来のwireguard-goの限界

  • Mullvadのモバイルアプリは長年にわたりGoベースのwireguard-goを使用してきた
    • 複数のVPN事業者が同じ実装を利用
  • 2024年半ばから、MullvadはDAITAとMultihop対応のためwireguard-goをフォークして保守
  • しかし、Google Playデベロッパーコンソールで報告されたクラッシュの85%以上がwireguard-goで発生
    • 一部の問題は解決されたものの、多くは依然として残っている
  • **RustとGoの間のFFI(外部関数インターフェース)**利用による複雑さと不安定さが存在
    • Goランタイムの挙動がRustコード側からは不透明で、クラッシュ時にスタックトレースの復元が難しい
    • そのため、デバッグと長期保守が困難な状況だった

Androidでの結果

  • GotaTun導入後、クラッシュは1件も発生していない
    • wireguard-goで発生していたすべてのクラッシュが解消
  • Androidアプリのバージョン2025.10(11月末リリース)以降、ユーザー体感のクラッシュ率が0.40% → 0.01%に低下
  • ユーザーフィードバックでも速度向上とバッテリー使用量の減少が報告されている

今後の計画

  • 2026年初頭に第三者によるセキュリティ監査を実施予定
  • **すべてのプラットフォーム(デスクトップ、iOSを含む)**でwireguard-goをGotaTunへ置き換える予定
  • 性能改善作業を継続的に推進
  • Mullvadは2026年をGotaTun拡大の主要な転換点と位置付けている

1件のコメント

 
GN⁺ 2025-12-20
Hacker Newsのコメント
  • Pixel 8で性能向上をはっきり体感した
    以前は wireguard-go では 100Mbps も出なかったのに、GotaTun 版では 500Mbps 以上出る
    ただし新しいバグのせいでディープスリープモードに入れず、バッテリーの減りが突然 10倍速くなる問題が発生した

    • 自分の古い Samsung A5 では wireguard を 24時間365日有効にしていてもバッテリーは長持ちする
      Pixel 8 のほうがずっと高性能なのにこういう問題があるなら、Android 側のバグである可能性が高い
    • 自分も ZeroTier や MizuDroid で似た現象を見た。Android のネットワークスタック側の問題に見える
    • Raspberry Pi 5 でも同じ現象があった。おそらくARM 最適化不足が原因かもしれない
    • MTU 1320 の問題である可能性がある
    • Mullvad アプリが Pixel 6a で突然 1秒で接続できるようになった理由はこれだった。以前は 5〜10秒かかっていた
  • 自分は WireGuard が本当に好きで、WrapGuard というプロジェクトを自分で作った
    root 権限なしでアプリを実行できるように Go で書いた
    Rust には詳しくないが、ファームウェアやネットワーキングソフトウェアには Rust のほうが向いているのか気になる
    WrapGuard GitHub リンク

    • ファームウェアはGC のない環境で動作する必要があるので Rust のほうが適している
      Rust は予測可能なタイミングと強力な型システムのおかげで信頼性が高い
      ただしネットワーキングソフトウェアでは Go も十分に優秀で、結局のところ「慣れた言語を使うのが一番」という結論になる
    • 結局は「知っている悪魔を選べ」という言葉のとおり、慣れた言語を使うのが現実的だ
    • Go は FFI が難しいので、組み込みライブラリとして使うには Rust のほうが有利だ
    • 暗号化が不要なローカルコンテナネットワーキングにはどちらがよいか考えているところだ
      Apple の新しい container tool を試してみるつもり
    • 複数の VPN トンネルを1つに束ねる機能があるとよい
      たとえば airVPN は同時接続を5つまで許可しているので、これを統合してトラフィックを束ねることができればよさそうだ
  • GotaTun がTailscale Android アプリにも適用されるといい。自分は Mullvad 接続に Tailscale を使っている

    • GotaTun は Mullvad 専用の機能なので、Tailscale が採用する可能性は低い
      Tailscale チームは Go ベースのライブラリ最適化に長けており、
      2023年4月には wireguard-go で10Gbps の性能を達成している
      関連ブログ記事
  • Go のメモリページングの問題と goroutine のスタックオーバーフロー防止に関する話が興味深かった
    なぜ GoString があれほど多くのメモリをページインするのか気になる
    Issue #6727, Issue #7728 参照

  • WireGuard プロトコル自体も改善されるとよい
    現状では政府や ISP によるブロックを突破しにくいという限界がある

    • これは WireGuard の役割ではなく、shadowsocks のようなカプセル化プロトコルが担うべきものだ
      WireGuard はシンプルな L3 UDP トンネルとして設計されている
    • こうした理由でamnezia-wgのようなフォークが存在する
    • Mullvad アプリには shadowsocks などの迂回オプションがあるが、
      プロトコル自体に組み込まれているほうがより良い気がする
    • 関連内容をもっと読みたいなら、公式ドキュメントのKnown Limitationsセクションを参照するとよい
  • 実装チームにいるなら聞いてみたい — なぜ変更をBoringTun に upstreamしなかったのか気になる

    • BoringTun は3年間ずっと構造改修中なので、Mullvad が独立して進めたのは理解できる
      複数の実装が存在するほどプロトコルの安定性と信頼性は高まる
      個人的には Cloudflare より Mullvad のほうを信頼している
    • BoringTun は実質的にメンテナンス停止状態だ
      Obscura VPN ではNepTUNフォークへ移行した
      NepTUN GitHub リンク
      Mullvad がなぜ新たにフォークしたのか、既存フォークと統合する計画があるのか気になる
  • Mullvad は VPN の中でも最も信頼できる選択肢だと思う
    だが人々は YouTuber の割引コードのほうに惹かれがちだ

    • Mullvad はプライバシー面では最高だが、たいていのVPN ブロックリストに載ってしまう
      NordVPN はその回避がうまい。たとえば Imgur や英国からの接続では Mullvad は弾かれる
    • 一般ユーザーはジオブロック解除が目的なので、Mullvad は魅力的ではない
    • ポートフォワーディングが廃止されて以降、選択肢から外した人も多い
    • Mullvad の IP はストリーミングサービスで頻繁にブロックされるので、Nord を使わざるを得ない
    • さらに、複数の VPN ブランドを1社が買収してリブランドするケースも多い
  • WireGuard は Android ではカーネル内で動作しているものだと思っていた

    • 実際にはモジュールとして有効化する必要があるが、Android カーネルでは無効になっている
  • wireguard-go のクラッシュ原因分析データをもっと見てみたい
    ライブラリ自体のバグなのか、FFI の問題なのか気になる

    • WireGuard は単純な UDP ベースなのにクラッシュがあるのは意外だった
  • 自分は MintFlow アプリで Go ベースのプロキシコードは使っていない
    その代わり Rust でいくつかのプロキシプロトコルを実装している
    WireGuard には fdio vpp プラグインベースの C 実装を使っている

    • iOS で vpp ベース実装が可能だというのは驚きだ
      自分も以前 vpp を半年ほど触っていたが、かなり面白かった