- GotaTunはRustで書かれたWireGuard実装で、高速かつ効率的で安定したVPN接続を目指している
- CloudflareのBoringTunプロジェクトをフォークして開発され、DAITAやMultihopといった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を組み合わせたもの
- DAITAやMultihopといったMullvadのプライバシー強化機能を統合
- Rustの安全なマルチスレッドとzero-copyメモリ戦略を活用して性能を最適化
- 2024年11月末にAndroid版への展開を完了し、他プラットフォームは2026年に公開予定
従来のwireguard-goの限界
- Mullvadのモバイルアプリは長年にわたりGoベースのwireguard-goを使用してきた
- 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件のコメント
Hacker Newsのコメント
Pixel 8で性能向上をはっきり体感した
以前は wireguard-go では 100Mbps も出なかったのに、GotaTun 版では 500Mbps 以上出る
ただし新しいバグのせいでディープスリープモードに入れず、バッテリーの減りが突然 10倍速くなる問題が発生した
Pixel 8 のほうがずっと高性能なのにこういう問題があるなら、Android 側のバグである可能性が高い
自分は WireGuard が本当に好きで、WrapGuard というプロジェクトを自分で作った
root 権限なしでアプリを実行できるように Go で書いた
Rust には詳しくないが、ファームウェアやネットワーキングソフトウェアには Rust のほうが向いているのか気になる
WrapGuard GitHub リンク
Rust は予測可能なタイミングと強力な型システムのおかげで信頼性が高い
ただしネットワーキングソフトウェアでは Go も十分に優秀で、結局のところ「慣れた言語を使うのが一番」という結論になる
Apple の新しい container tool を試してみるつもり
たとえば airVPN は同時接続を5つまで許可しているので、これを統合してトラフィックを束ねることができればよさそうだ
GotaTun がTailscale Android アプリにも適用されるといい。自分は Mullvad 接続に Tailscale を使っている
Tailscale チームは Go ベースのライブラリ最適化に長けており、
2023年4月には wireguard-go で10Gbps の性能を達成している
関連ブログ記事
Go のメモリページングの問題と goroutine のスタックオーバーフロー防止に関する話が興味深かった
なぜ GoString があれほど多くのメモリをページインするのか気になる
Issue #6727, Issue #7728 参照
WireGuard プロトコル自体も改善されるとよい
現状では政府や ISP によるブロックを突破しにくいという限界がある
WireGuard はシンプルな L3 UDP トンネルとして設計されている
プロトコル自体に組み込まれているほうがより良い気がする
実装チームにいるなら聞いてみたい — なぜ変更をBoringTun に upstreamしなかったのか気になる
複数の実装が存在するほどプロトコルの安定性と信頼性は高まる
個人的には Cloudflare より Mullvad のほうを信頼している
Obscura VPN ではNepTUNフォークへ移行した
NepTUN GitHub リンク
Mullvad がなぜ新たにフォークしたのか、既存フォークと統合する計画があるのか気になる
Mullvad は VPN の中でも最も信頼できる選択肢だと思う
だが人々は YouTuber の割引コードのほうに惹かれがちだ
NordVPN はその回避がうまい。たとえば Imgur や英国からの接続では Mullvad は弾かれる
WireGuard は Android ではカーネル内で動作しているものだと思っていた
wireguard-go のクラッシュ原因分析データをもっと見てみたい
ライブラリ自体のバグなのか、FFI の問題なのか気になる
自分は MintFlow アプリで Go ベースのプロキシコードは使っていない
その代わり Rust でいくつかのプロキシプロトコルを実装している
WireGuard には fdio vpp プラグインベースの C 実装を使っている
自分も以前 vpp を半年ほど触っていたが、かなり面白かった