3个不稳定版本

0.6.0 2023年7月7日
0.5.2 2022年7月20日
0.5.1 2022年7月14日
0.5.0 2022年7月12日

#1174 in 网络编程

Download history 242/week @ 2024-03-13 207/week @ 2024-03-20 192/week @ 2024-03-27 208/week @ 2024-04-03 205/week @ 2024-04-10 184/week @ 2024-04-17 191/week @ 2024-04-24 252/week @ 2024-05-01 190/week @ 2024-05-08 160/week @ 2024-05-15 185/week @ 2024-05-22 187/week @ 2024-05-29 261/week @ 2024-06-05 181/week @ 2024-06-12 261/week @ 2024-06-19 216/week @ 2024-06-26

952每月下载量

BSD-3-Clause

275KB
6K SLoC

boringtun logo banner

BoringTun

警告

BoringTun目前正在重构。你现在可能不应该依赖于或链接到master分支。相反,你应该使用crates.io页面。

  • boringtun: crates.io
  • boringtun-cli crates.io

BoringTun是一个专为便携性和速度设计的WireGuard®协议实现。

BoringTun已成功部署在数百万台iOSAndroid消费设备以及数千台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_IMPLEMENTATIONboringtun 来与 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-64aarch64armv7 架构受到支持。行为应与 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