mullvad/gotatun
GitHub: mullvad/gotatun
Rust 编写的用户空间 WireGuard 实现,提供跨平台 VPN 隧道能力并兼容标准 WireGuard 工具链。
Stars: 1204 | Forks: 28
# GotaTun
一个用户空间的 [WireGuard®](https://www.wireguard.com/) 实现,也是 [BoringTun](https://github.com/cloudflare/boringtun) 的一个分支。
### 构建
- 仅库文件:`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](https://git.zx2c4.com/WireGuard/about/src/tools/man/wg.8) 将隧道配置为常规的 WireGuard 隧道,或使用任何其他工具。
也可以通过将环境变量 `WG_QUICK_USERSPACE_IMPLEMENTATION` 设置为 `gotatun` 来配合 [wg-quick](https://git.zx2c4.com/WireGuard/about/src/tools/man/wg-quick.8) 使用。例如:
`sudo WG_QUICK_USERSPACE_IMPLEMENTATION=gotatun WG_SUDO=1 wg-quick up CONFIGURATION`
*请注意,如果您安装了 wireguard kernel module,Linux 上的 `wg-quick` 将忽略 `WG_QUICK_USERSPACE_IMPLEMENTATION`。*
### 测试
测试此项目有一些要求:
- `sudo`:创建隧道所需。运行 `cargo test` 时,系统会提示您输入密码。
- Docker:您可以在[这里](https://www.docker.com/get-started)安装。如果您使用的是 Ubuntu/Debian,可以运行 `apt-get install docker.io`。
## 支持的平台
Target triple |Binary|Library|
------------------------------|:----:|------|
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](https://git.zx2c4.com/wireguard-go/about/) 相同,但有以下区别:
`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](https://git.zx2c4.com/wireguard-go/about/) 类似。具体来说,显式接口名称必须是 `utun[0-9]+`,或者使用 `utun` 让内核选择最低可用编号。如果您选择 `utun` 作为接口名称,并且定义了环境变量 `WG_TUN_NAME_FILE`,则内核选择的接口的实际名称将写入该变量指定的文件中。
## UAPI 扩展
有关 `wg` 配置协议的扩展,请参阅 [UAPI](./UAPI.md)。
## 审计
该项目已进行过独立的安全审计。
请参阅 [audit](./audits/README.md) 目录。
## 许可证
该项目采用 [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) 授权。
### 贡献
除非您明确声明,否则您有意提交以包含在作品中的任何贡献,均应根据 3-Clause BSD License 的定义,按上述方式许可,无需任何附加条款或条件。
WireGuard 是 Jason A. Donenfeld 的注册商标。GotaTun 未得到 Jason A. Donenfeld 的赞助或认可。
标签:BoringTun分支, DNS解析, Google搜索, GotaTun, Linux网络工具, Rust, Tun设备, VPN, WireGuard, 加密通信, 可视化界面, 基础设施, 开源项目, 用户态网络, 网络安全, 网络安全协议, 网络流量审计, 通知系统, 通知系统, 隐私保护, 隧道协议