2024年1月15日 星期一

无聊,让你可以访问内网的工具

  bore 是一个简单的 CLI 工具,用于建立到本地主机的隧道。

构建状态 Crates.io

Rust 中的现代、简单的 TCP 隧道将本地端口暴露给远程服务器,绕过标准 NAT 连接防火墙。这就是它的全部作用:不多也不少。

视频演示

# Installation (requires Rust, see alternatives below)
cargo install bore-cli

# On your local machine
bore local 8000 --to bore.pub

这会将您的本地端口暴露localhost:8000给公共互联网bore.pub:<PORT>,其中端口号是随机分配的。

与localtunnelngrok类似, exceptbore 旨在成为一种高效、无偏见的工具,用于转发 TCP 流量,安装简单,易于自托管,没有任何附加功能。

bore总共大约 400 行安全、异步 Rust 代码,设置起来很简单——只需为客户端和服务器运行一个二进制文件。)

安装

如果您使用的是 macOS,bore则打包为 Homebrew 核心公式。

brew install bore-cli

否则,安装钻孔的最简单方法是使用预构建的二进制文件。这些可在macOS、Windows 和 Linux 的发布页面上找到。只需解压适合您平台的文件并将bore可执行文件移动到您的 PATH 上的文件夹中即可。

您还可以使用Rust 包管理器Cargobore从源代码构建。此命令将二进制文件安装在用户可访问的路径中。bore

cargo install bore-cli

我们还为每个版本发布了版本化的 Docker 镜像。该映像是为 AMD 64 位架构构建的。bore它们标有特定版本,并允许您从最小的“临时”容器运行静态链接的二进制文件。

docker run -it --init --rm --network host ekzhang/bore <ARGS>

详细使用方法

本节介绍boreCLI 命令的详细用法。

本地转发

您可以使用该bore local命令转发本地计算机上的端口。这需要一个位置参数、要转发的本地端口以及一个强制--to选项,该选项指定远程服务器的地址。

bore local 5000 --to bore.pub

您可以选择传入一个--port 选项来选择远程上要公开的特定端口,但如果该端口不可用,该命令将失败。此外,传递还--local-host允许您公开局域网上除环回地址之外的不同主机localhost

完整选项如下所示。

Starts a local proxy to the remote server

Usage: bore local [OPTIONS] --to <TO> <LOCAL_PORT>

Arguments:
  <LOCAL_PORT>  The local port to expose

Options:
  -l, --local-host <HOST>  The local host to expose [default: localhost]
  -t, --to <TO>            Address of the remote server to expose local ports to [env: BORE_SERVER=]
  -p, --port <PORT>        Optional port on the remote server to select [default: 0]
  -s, --secret <SECRET>    Optional secret for authentication [env: BORE_SECRET]
  -h, --help               Print help information

自托管

正如启动说明中提到的,有一个bore服务器的公共实例在 运行bore.pub但是,如果您想在自己的网络上自行托管bore,可以使用以下命令来实现:

bore server

这就是所需要的一切!服务器开始在给定地址运行后,您可以bore local使用选项更新命令--to <ADDRESS>以将本地端口转发到此远程服务器。

bore server命令的完整选项如下所示。

Runs the remote proxy server

Usage: bore server [OPTIONS]

Options:
      --min-port <MIN_PORT>  Minimum accepted TCP port number [default: 1024]
      --max-port <MAX_PORT>  Maximum accepted TCP port number [default: 65535]
  -s, --secret <SECRET>      Optional secret for authentication [env: BORE_SECRET]
  -h, --help                 Print help information

协议

有一个隐式控制端口7835用于按需创建新连接。初始化时,客户端在 TCP 控制端口上向服务器发送“Hello”消息,请求代理选定的远程端口。然后,服务器以确认响应并开始侦听外部 TCP 连接。

每当服务器在远程端口上获得连接时,它都会为该连接生成一个安全的UUID 并将其发送回客户端。然后,客户端向服务器打开一个单独的 TCP 流,并发送一条包含该流上的 UUID 的“接受”消息。然后,服务器代理彼此之间的两个连接。

出于正确性原因并避免内存泄漏,传入连接仅由服务器存储最多 10 秒,如果客户端不接受,则将其丢弃。

验证

在 的自定义部署中bore server,您可以选择要求机密 以防止服务器被其他人使用。该协议要求客户端通过以 HMAC 代码的形式回答随机质询来验证每个 TCP 连接上是否拥有秘密。(此秘密仅用于初始握手,默认情况下不会加密进一步的流量。)

# on the server
bore server --secret my_secret_string

# on the client
bore local <LOCAL_PORT> --to <TO> --secret my_secret_string

如果参数中不存在机密,bore还将尝试从环境变量中读取BORE_SECRET

致谢

由 Eric 张 ( @ekzhang1 ) 创建。根据MIT 许可证获得许可。

作者要感谢Tokio项目的贡献者和维护者,他们使得用 Rust 编写符合人体工程学且高效的网络服务成为可能。

来自 https://github.com/ekzhang/bore

沒有留言:

張貼留言