cloudflare/boringtun
GitHub: cloudflare/boringtun
Cloudflare出品的WireGuard用户态协议实现,支持跨平台部署与移动端SDK集成。
Stars: 6923 | Forks: 491

# BoringTun
## 警告
Boringtun 目前正在进行重构。您现在可能不应该依赖或链接 master 分支。相反,您应该使用 crates.io 页面。
- boringtun: [](https://crates.io/crates/boringtun)
- boringtun-cli [](https://crates.io/crates/boringtun-cli)
**BoringTun** 是 [WireGuard®](https://www.wireguard.com/) 协议的一种实现,专为可移植性和速度而设计。
**BoringTun** 已成功部署在数百万 [iOS](https://apps.apple.com/us/app/1-1-1-1-faster-internet/id1423538627) 和 [Android](https://play.google.com/store/apps/details?id=com.cloudflare.onedotonedotonedotone&hl=en_US) 用户设备上,以及数千台 Cloudflare Linux 服务器上。
该项目由两部分组成:
* 可执行文件 `boringtun-cli`,这是 Linux 和 macOS 的 [userspace WireGuard](https://www.wireguard.com/xplatform/) 实现。
* 库 `boringtun`,可用于在各种平台(包括 iOS 和 Android)上实现快速高效的 WireGuard 客户端应用。它实现了底层的 WireGuard 协议,但不包括网络或隧道协议栈,这些可以以平台惯用的方式实现。
### 安装
您可以使用 `cargo` 安装此项目:
```
cargo install boringtun-cli
```
### 构建
- 仅库:`cargo build --lib --no-default-features --release [--target $(TARGET_TRIPLE)]`
- 可执行文件:`cargo build --bin boringtun-cli --release [--target $(TARGET_TRIPLE)]`
默认情况下,可执行文件放置在 `./target/release` 文件夹中。您可以手动将其复制到所需位置,或使用 `cargo install --bin boringtun --path .` 进行安装。
### 运行
根据规范,要启动隧道,请使用:
`boringtun-cli [-f/--foreground] INTERFACE-NAME`
然后可以使用 [wg](https://git.zx2c4.com/WireGuard/about/src/tools/man/wg.8) 将隧道配置为常规 WireGuard 隧道,或使用任何其他工具。
也可以通过将环境变量 `WG_QUICK_USERSPACE_IMPLEMENTATION` 设置为 `boringtun` 来配合 [wg-quick](https://git.zx2c4.com/WireGuard/about/src/tools/man/wg-quick.8) 使用。例如:
`sudo WG_QUICK_USERSPACE_IMPLEMENTATION=boringtun-cli WG_SUDO=1 wg-quick up CONFIGURATION`
### 测试
测试此项目有一些要求:
- `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 | ✓ | ✓ |
armv7-unknown-linux-gnueabihf | ✓ | ✓ |
x86_64-apple-darwin | ✓ | ✓ |
x86_64-pc-windows-msvc | | ✓ |
aarch64-apple-ios | | ✓ |
armv7-apple-ios | | ✓ |
armv7s-apple-ios | | ✓ |
aarch64-linux-android | | ✓ |
arm-linux-androideabi | | ✓ |
未来可能会添加其他平台
#### Linux
支持 `x86-64`、`aarch64` 和 `armv7` 架构。其行为应与 [wireguard-go](https://git.zx2c4.com/wireguard-go/about/) 相同,但有以下区别:
`boringtun` 启动时会放弃特权。放弃特权后,无法设置 `fwmark`。如果需要 `fwmark`(例如使用 `wg-quick` 时),请使用 `--disable-drop-privileges` 运行或设置环境变量 `WG_SUDO=1`。
您需要使用以下命令赋予可执行文件 `CAP_NET_ADMIN` 能力:`sudo setcap cap_net_admin+epi boringtun`。不需要 sudo。
#### macOS
其行为与 [wireguard-go](https://git.zx2c4.com/wireguard-go/about/) 类似。具体来说,显式接口名称必须是 `utun[0-9]+`,或者使用 `utun` 让内核选择最低可用的编号。如果您选择 `utun` 作为接口名称,并且定义了环境变量 `WG_TUN_NAME_FILE`,那么内核选择的接口实际名称将被写入该变量指定的文件中。
#### FFI bindings
该库暴露了一组 C ABI 绑定,这些绑定在 `wireguard_ffi.h` 头文件中定义。C 绑定可用于 C/C++、Swift(使用 bridging header)或 C#(使用 [DLLImport](https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.dllimportattribute?view=netcore-2.2) 并将 [CallingConvention](https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.dllimportattribute.callingconvention?view=netcore-2.2) 设置为 `Cdecl`)。
#### JNI bindings
该库暴露了一组 Java Native Interface 绑定,这些绑定在 `src/jni.rs` 中定义。
## 许可证
该项目采用 [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) 授权。
### 贡献
除非您明确声明,否则您提交的任何旨在包含在该作品中的贡献,均应按照 3-Clause BSD License 的定义进行许可,无需任何附加条款或条件。
如果您想为这个项目做贡献,请阅读我们的 [`CONTRIBUTING.md`]。
WireGuard 是 Jason A. Donenfeld 的注册商标。BoringTun 未由 Jason A. Donenfeld 赞助或认可。
标签:Android, Cloudflare, crates, DSL, iOS, MITRE ATT&CK, Rust, Socket编程, VPN, WireGuard, 代理工具, 加密通信, 可视化界面, 开源库, 搜索引擎爬虫, 用户态实现, 网络安全, 网络安全, 网络流量审计, 通知系统, 通知系统, 隐私保护, 隐私保护, 隧道协议