6个版本 (破坏性更新)
0.6.0 | 2023年7月7日 |
---|---|
0.5.3 | 2023年7月8日 |
0.5.2 |
|
0.4.0 | 2022年2月15日 |
0.0.0 | 2019年3月22日 |
#179 in 网络编程
2,108 每月下载次数
用于 7 个crate (6个直接使用)
265KB
6K SLoC
boringtun
警告
boringtun目前正在重构中。您可能不应该现在依赖于或链接到master分支。相反,您应该使用crates.io页面。
BoringTun 是一个为便携性和速度设计的 WireGuard® 协议实现。
BoringTun 已成功部署在数百万台 iOS 和 Android 消费设备以及数千台Cloudflare Linux服务器上。
该项目由两部分组成
- 可执行文件
boringtun-cli
,Linux和macOS的用户空间WireGuard实现。 - 库
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/--前台] INTERFACE-NAME
隧道可以使用 wg 配置,作为一个常规的 WireGuard 隧道,或任何其他工具。
还可以使用 wg-quick,通过设置环境变量 WG_QUICK_USERSPACE_IMPLEMENTATION
为 boringtun
。例如
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本地接口绑定,这些绑定在src/jni.rs
中定义。
许可证
该项目遵循3-Clause BSD许可证。
贡献
除非您明确声明,否则根据3-Clause BSD许可证定义的,您有意提交以包含在作品中的任何贡献,将按上述方式许可,不附加任何额外的条款或条件。
如果您想为此项目做出贡献,请阅读我们的CONTRIBUTING.md
。
WireGuard是Jason A. Donenfeld的注册商标。BoringTun未由Jason A. Donenfeld赞助或认可。
lib.rs
:
WireGuard协议客户端的简单实现。
依赖关系
~11–20MB
~365K SLoC