ekzhang/bore:轻量高效的TCP端口转发工具

ekzhang/bore 在 GitHub 上已经拿到 11,147 Star 了。这个用 Rust 编写的现代TCP隧道工具,功能单一明确,将本地端口暴露到远程服务器,绕过标准NAT连接防火墙。没有多余功能,也不会缺少核心能力。

它的使用逻辑很简单。在本地机器运行命令指定需要暴露的端口和远程服务器地址,即可将本地服务映射到公网。官方提供的公共实例运行在 bore.pub,用户可以直接使用,端口号会随机分配。
和同类工具 localtunnel、ngrok 相比,bore 定位是高效、无约束的TCP流量转发工具,安装简单,支持自行托管,没有附加功能。整个项目代码约400行,全部是安全的异步 Rust 代码,客户端和服务端都只需要运行单个二进制文件即可启动。

正文顶部截图

安装方式

bore 提供多种安装途径,适配不同操作系统和使用场景。
macOS 用户可以直接通过 Homebrew 安装:

brew install bore-cli

Linux 用户可以根据发行版选择对应包管理方式。Arch Linux 中,bore 已经收录在 AUR 仓库,使用 yay 或者其他 AUR 助手即可安装:

yay -S bore

Gentoo Linux 用户可以从 gentoo-zh overlay 安装:

sudo eselect repository enable gentoo-zh
sudo emerge --sync gentoo-zh
sudo emerge net-proxy/bore

不想通过包管理安装的用户,可以直接从项目 releases 页面下载对应平台的预编译二进制文件,解压后将可执行文件移动到 PATH 路径下即可使用。
有 Rust 环境的用户,也可以通过 Cargo 直接从源码编译安装:

cargo install bore-cli

容器场景下,官方还提供了版本化的 Docker 镜像,基于最小 scratch 镜像构建,只包含静态链接的 bore 二进制文件:

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

README区域截图

具体使用

bore 的命令分为本地转发和服务端两种模式。
本地转发模式下,指定需要暴露的本地端口和远程服务器地址即可完成配置:

bore local 5000 --to bore.pub

用户可以通过 --port 参数指定远程端口,如果指定端口已被占用,命令会执行失败。–local-host 参数支持暴露本地网络内其他主机的服务,不需要限制在 localhost。
如果需要自行托管服务端,只需要在远程机器运行服务端命令即可:

bore server

服务端支持配置最小和最大可用端口范围、绑定地址、认证密钥等参数。用户可以根据网络环境调整控制服务和隧道服务的绑定地址,满足私有网络和公网混合部署的需求。

bore 底层使用 7835 作为控制端口,用于客户端和服务端之间的连接协商。客户端向服务端发送代理请求后,服务端会监听对应的远程端口,收到外部连接时生成UUID通知客户端,客户端发起新的TCP流完成连接绑定。为避免内存泄漏,未被客户端接受的连接会在10秒后自动丢弃。
自行托管的服务端可以设置认证密钥,只有持有对应密钥的客户端才能使用服务。密钥验证采用HMAC挑战响应机制,只在初始握手阶段使用,后续流量默认不加密。密钥也可以通过 BORE_SECRET 环境变量配置,不需要显式写在命令中。

项目开源地址:https://github.com/ekzhang/bore

,不需要显式写在命令中。

项目开源地址:https://github.com/ekzhang/bore

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐