
RustによるユーザースペースWireGuard®実装
ユーザスペースの WireGuard® 実装であり、BoringTun のフォークです。
このリポジトリ内のすべてのソースコードは、特に明記されていない限り、Mozilla Public License バージョン 2.0 の条件に従うものとします。このライセンスのコピーは、"LICENSE" ファイルまたは https://www.mozilla.org/MPL/2.0/ にあります。
2026年3月5日より前に行われた貢献は、以前のBSD 3条項ライセンスの下でライセンスされています。このライセンスのコピーは、"LICENSE-CLOUDFLARE" ファイルにあります。
明示的に別段の表明をしない限り、MPL-2.0 ライセンスで定義されているように、あなたが本作業に含めるために意図的に提出したすべての貢献は、追加の条項や条件なしに、上記の通りライセンスされます。
cargo build --lib --no-default-features --release [--target $(TARGET_TRIPLE)]cargo build --bin gotatun --release [--target $(TARGET_TRIPLE)]デフォルトでは、実行可能ファイルは ./target/release フォルダに配置されます。手動で任意の場所にコピーするか、cargo install --bin gotatun --path . を使用してインストールできます。
実行可能ファイルをビルドするには、単に nix build .#gotatun を実行します。最終的なバイナリは result/bin/gotatun に配置されます。
仕様に従い、トンネルを開始するには以下を使用します:
gotatun [-f/--foreground] INTERFACE-NAME
その後、トンネルは wg を使用して、通常の WireGuard トンネルとして、または他のツールで設定できます。
環境変数 WG_QUICK_USERSPACE_IMPLEMENTATION を gotatun に設定することで、wg-quick と使用することも可能です。例:
sudo WG_QUICK_USERSPACE_IMPLEMENTATION=gotatun WG_SUDO=1 wg-quick up CONFIGURATION
Linux で wireguard カーネルモジュールがインストールされている場合、wg-quick は WG_QUICK_USERSPACE_IMPLEMENTATION を無視することに注意してください。
このプロジェクトのテストにはいくつかの要件があります:
sudo: トンネルを作成するために必要です。cargo test を実行すると、パスワードを求められます。apt-get install docker.io を実行できます。他のターゲットでも動作する可能性がありますが、これらについてのみテストしています。
x86-64 および aarch64 アーキテクチャがサポートされています。動作は wireguard-go と同一であるべきですが、以下の違いがあります:
gotatun は起動時に特権を放棄します。特権が放棄されると、fwmark を設定できません。wg-quick 使用時など fwmark が必要な場合は、--disable-drop-privileges を付けて実行するか、環境変数 WG_SUDO=1 を設定してください。
実行可能ファイルに CAP_NET_ADMIN ケーパビリティを付与する必要があります: sudo setcap cap_net_admin+epi gotatun。sudo は必要ありません。
動作は wireguard-go と似ています。具体的には、インターフェース名は明示的な場合は utun[0-9]+、カーネルに利用可能な最小のものを選択させる場合は utun でなければなりません。インターフェース名として utun を選択し、環境変数 WG_TUN_NAME_FILE が定義されている場合、カーネルが選択した実際のインターフェース名がその変数で指定されたファイルに書き込まれます。
wg 設定プロトコルの拡張については UAPI を参照してください。
プロジェクトに対して独立したセキュリティ監査が実施されています。audit ディレクトリを参照してください。
WireGuard は Jason A. Donenfeld の登録商標です。GotaTun は Jason A. Donenfeld によってスポンサーや推奨を受けていません。
| ターゲットトリプル | バイナリ | ライブラリ |
|---|
| x86_64-unknown-linux-gnu | ✓ | ✓ |
| aarch64-unknown-linux-gnu | ✓ | ✓ |
| aarch64-apple-darwin | ✓ | ✓ |
| x86_64-pc-windows-msvc | ✓ | ✓ |
| x86_64-pc-windows-gnullvm | ✓ | ✓ |
| aarch64-pc-windows-msvc | ✓ | ✓ |
| aarch64-pc-windows-gnullvm | ✓ | ✓ |
| x86_64-linux-android | ✓ | |
| aarch64-linux-android | ✓ | |
| aarch64-apple-ios | ✓ |