6个版本 (破坏性更新)

0.6.0 2023年7月7日
0.5.3 2023年7月8日
0.5.2 2022年7月20日
0.4.0 2022年2月15日
0.0.0 2019年3月22日

#179 in 网络编程

Download history 634/week @ 2024-03-13 872/week @ 2024-03-20 749/week @ 2024-03-27 798/week @ 2024-04-03 499/week @ 2024-04-10 439/week @ 2024-04-17 476/week @ 2024-04-24 733/week @ 2024-05-01 489/week @ 2024-05-08 460/week @ 2024-05-15 387/week @ 2024-05-22 488/week @ 2024-05-29 496/week @ 2024-06-05 379/week @ 2024-06-12 556/week @ 2024-06-19 577/week @ 2024-06-26

2,108 每月下载次数
用于 7 个crate (6个直接使用)

BSD-3-Clause

265KB
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,可用于在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_IMPLEMENTATIONboringtun。例如

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#(使用DLLImportCallingConvention设置为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协议客户端的简单实现。

git clone https://github.com/cloudflare/boringtun.git

依赖关系

~11–20MB
~365K SLoC