>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
CSS

轻松将本地端口暴露到互联网

一个常见的场景:你在本地机器上启动了一个后端服务,配置了与 Stripe 或 Telegram 等外部服务的集成,然后需要测试 webhook。但你的 localhost:8000 没有外部访问权限,申请静态 IP 太麻烦,而为了几个请求部署一套预发布环境又太费时间。

通常在这种情况下,你会本能地想到 ngrok 或类似服务。但商业替代方案总是伴随着恼人的限制:流量上限、每次重启都会变化的 URL,或者需要付费订阅才能使用的基本功能。最近我发现了 tunnelto——一款开源 Rust 工具,它名副其实地完成了它声称的功能,没有额外的麻烦。

这个工具是什么

tunnelto 项目可以让你通过隧道将本地 Web 服务器暴露到公共互联网。你在终端运行一条命令,获得一个有效的公共 URL,然后将其交给外部服务或客户端用于演示目的。

主要亮点是客户端和服务器都是使用 Rust 和异步 tokio 引擎编写的。这带来了适度的内存占用和快速处理传入连接的能力。没有臃肿的运行时或后台进程占用数 GB 的 RAM。

项目仓库位于 https://github.com/tunneltodev/tunnelto。

实际工作原理

安装只需几分钟。如果你在 macOS 上,可以通过 Homebrew 安装:

brew install agrinman/tap/tunnelto

如果你已经配置了 Rust 工具链,可以通过 Cargo 构建:

cargo install tunnelto

对于其他系统,作者在 GitHub 的 Releases 部分准备了编译好的二进制文件。

快速开始

假设你有一个在本地 8000 端口上运行的 Web 应用。你可以用这条命令将其暴露给外部世界:

tunnelto --port 8000

执行后,工具会打开一个隧道并立即提供一个可用的地址。从互联网发送到该地址的任何请求都会即时转发到你的本地端口。

有用的参数

在日常工作中,你经常需要额外的配置。以下是节省时间的标志:

  • --subdomain 设置固定的子域名,这样你就不必在每次重启后更改 webhook 设置中的 URL
  • --scheme 在 http 和 https 之间切换协议,如果你的本地服务需要安全连接
  • --dashboard-address 启动一个本地界面用于检查和查看传入的请求
  • --key 接受 API 密钥用于隧道授权

带有显式子域名规范的命令示例:

tunnelto --port 3000 --subdomain my-test-app

这有什么用

在开发中,有几种场景隧道可以节省大量时间:

  1. 直接在本地调试器中通过断点调试来自支付系统、消息应用或 OAuth 提供商的传入 webhook。
  2. 在连接到移动网络的真实智能手机上测试移动应用,无需配置 Wi-Fi 路由器。
  3. 在代码尚未推送到仓库或部署到测试服务器之前,快速向同事展示布局或原型。
  4. 在发布前验证 HTTPS 证书和安全头。

个人感受

README 中提到了自托管服务器组件的能力,尽管文档缺少详细说明。如果你对完整流量隐私有要求,你需要深入研究代码库并在自有 VPS 上部署中继。

该项目没有太多 star(大约 400 个),提交也不是每天都有,但对于基本任务来说这个工具运行可靠。它启动快速,基本隧道功能无需注册,而且只做一件明确的事情。如果你正在寻找 ngrok 的简单开源替代品,值得查看一下仓库并尝试使用。

相关项目