bore:极简 TCP 内网穿透工具(Rust 原生)
来源: https://github.com/ekzhang/bore
分析日期: 2026-05-22
标签: #内网穿透 #Rust #TCP-隧道 #自托管 #开源
一句话版本
bore 是一个极简的 TCP 隧道工具——你在本机跑个服务,一行命令 bore local 8000 --to bore.pub 就把它暴露到公网了,别人就能通过公网地址访问你的本机服务。类似 ngrok 但更轻更简单,还能自己搭服务器。
这是什么
bore 是 Eric Zhang(Eric Zhang,MIT 本科/Stanford PhD,Rustacean,知名竞赛选手)用 Rust 写的一个极简 TCP 内网穿透工具。整个项目只有约 400 行代码,但能干 ngrok 最核心的活。
> "That's all it does: no more, and no less."
核心理念:简单到极致。没有 ngrok 那些花里胡哨的仪表盘、付费墙、配置声明,就是一个二进制跑两端。
核心用法
客户端(暴露本地端口)
bore local 8000 --to bore.pub
这会把本机 localhost:8000 映射到 bore.pub:<随机端口>。
可选参数:
--port 1234:指定远程端口(如果可用)--local-host 192.168.1.x:暴露局域网内其他机器--secret xxx:服务端认证密钥
服务端(自建隧道服务器)
bore server
在你的 VPS 上运行这一个命令就搭好了。支持端口范围限制和密钥保护。
技术原理
[客户端] ←控制连接(7835)→ [bore.pub 服务端]
↓
[客户端] ←UUID+数据代理→ [服务端] ←公网用户连接→
1. 客户端通过 TCP 控制端口 7835 向服务端发送 "Hello",请求代理某个端口
2. 服务端确认后开始监听该端口
3. 公网用户连接该端口 → 服务端生成 UUID → 发给客户端
4. 客户端另开一条 TCP 流 → 发 "Accept" + UUID
5. 服务端把两条连接桥接(双向代理)
6. 未及时接受的连接最多等 10 秒
安全设计
- 可选
--secret:基于 HMAC 随机挑战的认证 - 认证仅在初始握手阶段,后续流量不加密(需要自己加 TLS/SSH 隧道)
- 端口范围限制:
--min-port/--max-port
安装方式
| 平台 | 命令 |
|---|---|
| macOS | `brew install bore-cli` |
| Arch Linux | `yay -S bore` |
| Cargo | `cargo install bore-cli` |
| Docker | `docker run ekzhang/bore |
| 二进制 | 下载 release 页面的预编译包 |
与同类工具对比
| 工具 | 语言 | 代码量 | 公网实例 | 自托管 | 认证 | 加密 | 协议 |
|---|---|---|---|---|---|---|---|
| **bore** | Rust | ~400行 | ✅ bore.pub | ✅ | ✅ HMAC | ❌ 默认不加密 | TCP |
| **ngrok** | Go | 庞大 | ✅ 付费 | ❌ 付费 | ✅ | ✅ TLS | TCP/HTTP |
| **localtunnel** | Node.js | 中等 | ✅ 免费 | ✅ | ❌ | ❌ | HTTP |
| **Cloudflare Tunnel** | Go | 中等 | ✅ Free | - | ✅ | ✅ | HTTP/TCP |
| **sish** | Go | 中等 | ❌ | ✅ | ✅ | ✅ SSH | TCP/HTTP |
bore 的独特卖点:极端简洁 + 纯 TCP 透明代理。它不是 HTTP 反向代理,是纯粹的 TCP 层隧道——任何 TCP 流量(包括但不限于 HTTP)都能透传。
作者
Eric Zhang(@ekzhang1)— MIT 本科,Stanford PhD candidate。知名 Rust 开发者,代表作还有 RSpotify、竞争编程。bore 是他的典型风格:精简到极致,但该有的都有。
项目状态
- 最新版本:v0.6.0 (2025-06-09)
- 稳定维护中,功能基本不再新增
- 11.2k stars, MIT License
- 社区活跃,issue/PR 响应良好
与我们项目的关联
跟 TryCloudflare 的对比
我们之前研究过 TryCloudflare(Cloudflare Quick Tunnel),跟 bore 的核心场景一样但取向不同:
| 维度 | bore | TryCloudflare |
|---|---|---|
| 定位 | 自托管 + 公网实例 | Cloudflare 生态内的隧道 |
| 自托管 | ✅ `bore server` 一行 | ❌ 必须用 Cloudflare |
| 协议 | 纯 TCP | HTTP/HTTPS 为主 |
| 部署 | Homebrew / Cargo | `cloudflared tunnel` |
| 认证 | HMAC 可选 | Cloudflare Access |
| 免费性 | 完全免费 | 免费但有流量限制 |
在 Agent 部署中的用途
- Teames / Hermes / OpenClaw 远程 Portal:你的 Agent 跑在没公网 IP 的机器上时,bore 可以快速暴露 Web Dashboard 给外部访问
- Hook 回调测试:本地开发 Agent 时,用 bore 暴露 Webhook 接收端调试
- SSH 穿透替代:
bore local 22 --to my-server替代传统 SSH 反向隧道 - 轻量级远程调试:Neovim/Codex 等需要临时公网地址的场景
评分
| 维度 | 评分 | 说明 |
|---|---|---|
| 简洁性 | ⭐⭐⭐⭐⭐ | 400 行 Rust,单二进制,极致精简 |
| 实用性 | ⭐⭐⭐⭐ | 内网穿透刚需,但功能确实单一 |
| 性能 | ⭐⭐⭐⭐⭐ | Rust + Tokio,异步高效 |
| 部署便利 | ⭐⭐⭐⭐⭐ | brew/cargo/docker/binary 全覆盖 |
| 文档 | ⭐⭐⭐⭐ | README 够用但不算详尽 |
| 安全 | ⭐⭐⭐ | HMAC 认证不错,但无默认加密 |
| **综合** | **⭐⭐⭐⭐** | 极简主义内网穿透的典范 |
一句话再强调:如果你想用一行命令把本机服务暴露到公网,或者想自己搭一个 ngrok 平替,bore 是 Rust 生态里最优雅的选择。