WDTT — TURN経由のWireGuardトンネル(Android向け)

Security

概要

WDTT(WireGuard over TURN Tunnel)は、WireGuardパケットをDTLSでカプセル化し、VK(ВКонтакте)のメディアリレー(TURN)サーバーを中継点として利用することで、クライアントから個人VPSへのトラフィックを中継する技術的プロトタイプです。主にAndroid向けに実装されたクライアント(Kotlin)を含み、Go製のツールやサーバ関連コンポーネントの痕跡もあります。ネットワーク制限やNAT越えの状況で、メディア経路を利用してUDPトラフィックを通すことを目的とした研究/実験的ソリューションとして位置づけられます。ライセンスはGPLv3。

GitHub

リポジトリの統計情報

  • スター数: 4
  • フォーク数: 0
  • ウォッチャー数: 4
  • コミット数: 23
  • ファイル数: 10
  • メインの言語: Kotlin

主な特徴

  • WireGuardパケットをDTLSでカプセル化し、TURNサーバー経由で転送する独自トンネル方式を提供。
  • Androidクライアント(Kotlin)を含み、モバイル端末上での実験的な実装を収録。
  • Goやその他ツールの要素が含まれ、サーバ/ユーティリティとの連携を想定した構成。
  • GPLv3ライセンスで配布され、ソースの改変・再配布が可能(条件あり)。

技術的なポイント

本プロジェクトの核は「WireGuardユーザーデータをそのままUDPで送る代わりに、DTLSでラップして既存のメディアリレー(TURN)経路を流用する」点にあります。TURNは通常WebRTCのメディア中継に用いられ、クライアントがNAT越えやファイアウォール回避のために利用するためのプロトコルです。ここではTURNのDTLSベースのデータチャネルやメディア転送の経路をWireGuardトラフィックの運搬に転用しており、次の技術要素が重要です。

  • カプセル化と透過性: WireGuardのUDPパケットをそのままDTLSペイロードに埋めることで、既存のWireGuardスタックや設定を大きく変更せずに利用できる利点があります。ただしパケット長(MTU)やフラグメンテーションへの配慮が必要です。
  • コネクションの維持と再送: TURN経由は往復の遅延や中継処理が加わるため、頻繁な再ネゴシエーションやKeep‑aliveの実装、遅延によるレイテンシ感の管理が課題になります。DTLSの再接続やセッション管理も重要です。
  • 認証と暗号化: WireGuard自体は既に強力な暗号化を提供しますが、DTLSレイヤーでも暗号化されるため二重暗号化や鍵管理の扱い、TLSハンドシェイクに伴うオーバーヘッドを設計に反映させる必要があります。
  • インフラ依存性と可用性: VKなど特定ベンダーのTURNサーバを経由する設計は、そのサービスの利用規約や可用性に依存します。商用や大規模運用では自己管理のTURNサーバや別経路の併用が望まれます。
  • 実装面: リポジトリはAndroid(Kotlin)を主体とし、Android SDK 26+を対象にWireGuardトンネルの生成やDTLSカプセル化の処理を実装しています。READMEにはGoのバッジもあり、サーバ側や補助ツールがGoで書かれている可能性があります。ビルドはGradle(Kotlin DSL)を利用する構成です。

実運用上の注意点としては、レイテンシ上昇、スループット低下、MTU設定・断片化、TURN側でのパケットレート制限や利用ポリシー違反のリスク、そして法的・利用規約上の問題が挙げられます。この種の技術は研究・実験用途で有用ですが、実運用前には十分な検討と許諾の確認が必須です。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .gitignore: file
  • LICENSE: file
  • README.md: file
  • app: dir
  • build.gradle.kts: file

…他 5 ファイル

(app ディレクトリはAndroidアプリのモジュールで、Kotlinソースやリソース、AndroidManifestを含む想定。ビルドはGradle Kotlin DSLを利用。)

まとめ

TURNをメディア中継に利用してWireGuardを運ぶ実験的プロジェクト。研究用途として興味深いが実運用は慎重に。

リポジトリ情報:

READMEの抜粋(一部):

WDTT — WireGuard over TURN Tunnel

ic_launcher

Go Android ![License](https://img.shields.io/badge/License-GPL_3.0-blue?style=for-the-badge&logo=gnu&logoC