3个不稳定版本
0.6.0 | 2023年7月7日 |
---|---|
0.5.2 | 2022年7月20日 |
0.5.1 | 2022年7月14日 |
0.5.0 |
|
#1174 in 网络编程
952每月下载量
275KB
6K SLoC
BoringTun
警告
BoringTun目前正在重构。你现在可能不应该依赖于或链接到master分支。相反,你应该使用crates.io页面。
BoringTun是一个专为便携性和速度设计的WireGuard®协议实现。
BoringTun已成功部署在数百万台iOS和Android消费设备以及数千台Cloudflare Linux服务器上。
该项目由两部分组成
- 可执行文件
boringtun-cli
,Linux和macOS的用户空间WireGuard实现。 - 库
boringtun
,可用于在各种平台上实现快速高效的WireGuard客户端应用程序,包括iOS和Android。它实现了底层的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/--前台] INTERFACE-NAME
隧道可以使用 wg 进行配置,作为常规 WireGuard 隧道或任何其他工具。
还可以通过设置环境变量 WG_QUICK_USERSPACE_IMPLEMENTATION
为 boringtun
来与 wg-quick 一起使用。例如
sudoWG_QUICK_USERSPACE_IMPLEMENTATION=boringtun-cliWG_SUDO=1wg-quick upCONFIGURATION
测试
测试此项目有一些要求
sudo
:创建隧道时必需。当您运行cargo test
时,您将需要输入密码。- Docker:您可以在这里安装它。如果您使用 Ubuntu/Debian,可以运行
apt-get install docker.io
。
支持的平台
目标三元组 | 二进制文件 | 库 |
---|---|---|
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 相同,但有以下区别
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。具体来说,接口名称必须是utun[0-9]+
,用于显式接口名称,或者使用utun
让内核选择最低的可用接口。如果您选择utun
作为接口名称,并且定义了环境变量WG_TUN_NAME_FILE
,则内核选择的实际接口名称将被写入该变量指定的文件。
FFI绑定
库公开了一组C ABI绑定,这些绑定在wireguard_ffi.h
头文件中定义。C绑定可以与C/C++、Swift(使用桥接头)或C#(使用DLLImport,并将CallingConvention设置为Cdecl
)一起使用。
JNI绑定
库公开了一组Java Native Interface绑定,这些绑定在src/jni.rs
中定义。
许可证
该项目采用3-Clause BSD许可证。
贡献
除非您明确声明,否则根据3-Clause BSD许可证定义的任何有意提交以包含在您的工作中的贡献,均应按上述方式许可,不附加任何额外条款或条件。
如果您想为此项目做出贡献,请阅读我们的CONTRIBUTING.md
。
WireGuard是Jason A. Donenfeld的注册商标。BoringTun未经Jason A. Donenfeld赞助或认可。
依赖项
~14–23MB
~414K SLoC