1个不稳定版本
0.6.0 | 2024年6月2日 |
---|
#4 在 #便携性
936 每月下载量
用于 easytier
265KB
5.5K 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本地接口绑定,这些绑定在src/jni.rs
中定义。
许可证
该项目受3-Clause BSD许可证许可。
贡献
除非您明确声明,否则根据3-Clause BSD许可证定义的,您有意提交供工作包含的贡献,将按上述方式许可,不附加任何额外条款或条件。
如果您想为此项目做出贡献,请阅读我们的CONTRIBUTING.md
。
WireGuard是Jason A. Donenfeld的注册商标。BoringTun不是由Jason A. Donenfeld赞助或认可的。
lib.rs
:
WireGuard协议客户端的简单实现。
依赖项
~10–20MB
~371K SLoC