
gotatun v0.9.0
基于Rust的用户空间WireGuard®实现
GotaTun
一个用户空间的 WireGuard® 实现,是 BoringTun 的一个分支。
许可证
除非另有说明,本仓库中的所有源代码均受 Mozilla 公共许可证 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
要构建可执行文件,只需运行 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
请注意,如果您已安装 WireGuard 内核模块,wg-quick 在 Linux 上将忽略 WG_QUICK_USERSPACE_IMPLEMENTATION。
测试
测试此项目需要满足一些要求:
sudo:用于创建隧道。当您运行cargo test时,将提示您输入密码。- Docker:您可以在此处 安装。如果您使用 Ubuntu/Debian,可以运行
apt-get install docker.io。
支持的平台
| 目标三元组 | 二进制 | 库 |
|---|---|---|
| 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 | ✓ |
其他目标可能也能运行,但我们只针对这些目标进行测试
Linux
支持 x86-64 和 aarch64 架构。其行为应与 wireguard-go 相同,但存在以下差异:
gotatun 在启动时会降低权限。权限降低后无法设置 fwmark。如果需要 fwmark(例如使用 wg-quick 时),请使用 --disable-drop-privileges 运行或设置环境变量 WG_SUDO=1。
您需要使用以下命令为可执行文件授予 CAP_NET_ADMIN 能力:sudo setcap cap_net_admin+epi gotatun。无需 sudo。
macOS
其行为与 wireguard-go 类似。具体来说,接口名称必须为 utun[0-9]+(用于显式接口名称)或 utun(以便让内核选择最低可用编号)。如果您选择 utun 作为接口名称,并且环境变量 WG_TUN_NAME_FILE 已定义,则内核选择的实际接口名称将写入该变量指定的文件。
UAPI 扩展
参见 UAPI 了解对 wg 配置协议的扩展。
审计
已对该项目进行了独立安全审计。 请参见 审计 目录。
WireGuard 是 Jason A. Donenfeld 的注册商标。GotaTun 未获得 Jason A. Donenfeld 的赞助或认可。