
在本地开发调试、演示 Demo 或临时分享文件时,将内网服务暴露到公网是高频需求。传统的解决方案如 ngrok 往往伴随着免费版的限速、强制注册账户、闭源以及无法自托管等限制;而其他的开源替代品则在性能、易用性或功能完整性上略有欠缺。
Tunelo 是一个完全开源、基于 Rust 构建的单二进制文件工具。凭借 QUIC 协议 的强大能力,Tunelo 实现了极低延迟、高吞吐的内网穿透,同时保持了惊人的轻量化:客户端与服务端内存占用仅 8 MB,二进制文件大小约 4 MB,且支持 零拷贝 (Zero-Copy) 数据转发。
无需配置文件,无需注册账户,只需一行命令,即可为你的本地端口或文件目录生成一个即时的 HTTPS 公共链接。
核心特性:极简与极致的统一
1. 一行命令,即时隧道
Tunelo 摒弃了复杂的配置流程。无论是暴露本地端口还是提供文件服务,仅需一条指令即可完成。
暴露本地端口:
$ tunelo port 3000
Tunnel is ready.
Public URL: https://swift-fox-3847.tunelo.net
Forwarding: http://localhost:3000
一键启动服务并建立隧道:
Tunelo 支持自动管理子进程。它会启动你的开发服务器,等待端口就绪后自动建立隧道;当隧道关闭时,子进程也会自动清理。
$ tunelo port 3000 -- pnpm dev
2. 内置高性能文件服务器
不同于其他工具仅能转发端口,Tunelo 内置了一个功能完整的 Web 文件服务器。无需安装 Nginx 或运行 Python 脚本,直接通过二进制文件即可浏览目录、预览代码、渲染 Markdown 甚至播放媒体。
# 通过隧道共享当前目录
$ tunelo serve .
# 共享特定构建目录
$ tunelo serve ./dist
# 仅本地预览(不创建公网隧道)
$ tunelo serve . --local
内置浏览器支持的能力包括:
- 📂 目录浏览与导航
- 💻 代码语法高亮查看
- 📝 Markdown 实时渲染
- 📄 PDF 在线预览
- 🎬 媒体文件播放器
- 📊 数据表格查看
- ⚡ 支持 HTTP Range 请求(大文件分片加载)
前端界面在编译时通过 include_dir! 宏直接嵌入二进制文件中,真正实现了“单文件交付”。
3. 基于 QUIC 的极速传输
Tunelo 的数据平面完全基于 QUIC 协议 (基于 UDP),相比传统的 TCP/HTTP2 隧道,具有显著优势:
- 多路复用:单个连接即可处理多个并发请求,无队头阻塞。
- 低延迟:握手更快,连接迁移更平滑。
- 零拷贝中继:数据在中继节点不进行任何 HTTP 解析或缓冲,直接在 TCP 套接字与 QUIC 流之间进行双向字节拷贝。
- 加密传输:默认全链路加密,保障数据安全。
数据流向架构:
浏览器 (HTTPS) → 中继服务器 → (QUIC 流) → 客户端 → localhost:3000
- 控制流:持久化 QUIC 流,负责心跳与注册。
- 数据流:每个 HTTP 请求对应一个新的双向 QUIC 流,原始字节透传。
性能标杆:轻量级的奇迹
在追求功能的同时,Tunelo 对资源占用进行了极致优化。以下是其在压力测试下的表现:
| 指标 | 数值 | 备注 |
|---|---|---|
| 中继内存占用 | 8 MB | RSS 常驻内存 |
| 客户端内存占用 | 8 MB | 极低资源消耗 |
| 二进制文件大小 | ~4 MB | 易于分发与部署 |
| 隧道额外开销 | ~14% | 相比直连的性能损耗极低 |
| 顺序延迟 | ~6ms | 每请求增加延迟 |
| 吞吐量 | 670 req/s | 单核高压测试 |
| 错误率 | 0 | 稳定性极佳 |
无 GC (垃圾回收) 暂停,无运行时开销,纯粹的异步 Rust 带来了确定性的性能表现。
完全自主:自托管中继服务器
不想使用公共中继?Tunelo 的客户端与中继完全解耦,且中继服务端也是同一个二进制文件。你可以轻松在任何 VPS 上部署自己的中继,掌握数据主权。
部署步骤:
- 构建/获取二进制文件:
cargo build --release --bin tunelo - 运行中继:
./target/release/tunelo relay --domain yourdomain.com - 客户端连接:
tunelo port 3000 --relay yourdomain.com:4433
自托管前置要求:
- 一个拥有通配符 DNS 解析 (
*.yourdomain.com) 的域名。 - 有效的通配符 TLS 证书。
- 使用 Nginx 或其他反向代理进行 TLS 终止(端口 443)。
- 开放 UDP 端口 4433 用于 QUIC 隧道连接。
竞品对比:为什么选择 Tunelo?
| 特性 | Tunelo | ngrok | bore | Cloudflare Tunnel |
|---|---|---|---|---|
| 开源程度 | ✅ 完全开源 | ❌ 核心闭源 | ✅ 开源 | ❌ 闭源 |
| 自托管支持 | ✅ 支持 | ❌ 不支持 | ✅ 支持 | ❌ 不支持 |
| 账户依赖 | ❌ 无需 | ✅ 需要 | ❌ 无需 | ✅ 需要 |
| 传输协议 | QUIC | HTTP/2 | TCP | HTTP/2 |
| 路由方式 | 子域名 | 子域名 | TCP 端口 | 子域名/TCP |
| TLS 支持 | ✅ 内置 | ✅ 内置 | ❌ 无 | ✅ 内置 |
| 内存占用 | 8 MB | ~50 MB | ~10 MB | ~30 MB+ |
| 二进制大小 | ~4 MB | ~25 MB | ~5 MB | ~20 MB+ |
| 文件服务 | ✅ 内置 | ❌ 无 | ❌ 无 | ❌ 无 |
- vs ngrok:Tunelo 提供了免费无限制的开源替代,且内存占用仅为 ngrok 的 1/6,支持自托管避免供应商锁定。
- vs bore:Tunelo 基于子域名路由而非端口,更符合 HTTP 习惯;内置 TLS 终止,安全性更高;独有的文件服务功能使其场景更广。
- vs Cloudflare Tunnel:Tunelo 摆脱了对 Cloudflare 生态的依赖,可在任意 VPS 上部署,配置复杂度大幅降低(无需命名隧道、DNS 记录配置)。
安全设计原则
Tunelo 在设计之初就将安全作为核心考量:
- 仅出站连接:客户端主动连接中继,无需在本地防火墙开放任何入站端口。
- 端到端加密:基于 QUIC 的内置加密与中继端的 TLS 终止,确保数据传输安全。
- 零数据存储:中继节点仅作为字节拷贝的管道,不记录、不存储任何流量内容。
- 访问控制:支持通过
--password参数为隧道设置访问密码,防止未授权访问。 - 数据主权:通过自托管中继,企业和个人可完全掌控数据流向,满足合规需求。
AI 智能体原生支持
Tunelo 专为 AI 编码时代设计。项目包含标准的 SKILL.md 文件,可被各类 AI 智能体(如 Cursor, GitHub Copilot 等)识别。
只需运行以下命令,即可教会你的 AI 助手如何使用 Tunelo:
npx -y skills add tunelo/tunelo
安装后,当你向 AI 发出“分享这个本地服务”或“暴露我的开发服务器”指令时,AI 将自动调用 tunelo port 命令,智能处理端口检测与隧道建立,极大提升开发效率。
快速开始
无需复杂安装,只需两个终端即可与世界共享你的本地服务。
第一步:启动本地服务
python3 -m http.server 3000
第二步:暴露到公网
tunelo port 3000
即刻获得一个 https://xxx.tunelo.net 的公共链接。默认连接至 Tunelo 公共中继,也可通过 --relay 指定私有中继。
Tunelo 让内网穿透变得像 ping 一样简单,却拥有企业级的性能与安全。无论是独立开发者、开源贡献者还是企业运维团队,这都是值得尝试的新一代隧道工具。
数据统计
相关导航


OpenCTI

Make Comics

PDF夜间模式

fuckit.sh

Claude Code Subagents Collection

抖音推荐影响器 (Smart Feed Assistant)







