You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ngrok多子域名规模化管理机制解析及同类小型服务搭建咨询

构建类ngrok隧道服务:多子域名管理架构与实践

1. 隧道与IP的对应关系及DNS动态管理

  • ngrok不会给每个隧道分配独立IP,这是它能规模化的核心前提。所有子域名都指向少数几个(甚至一个)公网IP。
  • 动态DNS管理靠的是通配符DNS记录,比如配置*.ngrok.io A 1.2.3.4,这样任何随机子域名(如abcde.ngrok.io)都会自动解析到统一IP,完全不需要动态添加单条DNS记录。这种方式成本极低,还能支持无限子域名扩展。

2. 多子域名的流量区分机制

TLS/HTTP隧道:SNI 是核心

当用户访问a.ngrok.io或b.ngrok.io时,TLS握手阶段的SNI字段会携带具体的子域名。ngrok的前端反向代理(不管是Nginx还是自研的)读取这个SNI值,就能精准把流量转发到对应的隧道连接。

无TLS的纯TCP隧道:端口映射 + 客户端标识

纯TCP隧道没有SNI可用,ngrok的解决办法有两种:

  • 给每个TCP隧道分配唯一的公网端口(比如ngrok.io:12345对应某个TCP隧道),用户通过指定端口访问;
  • 客户端发起连接时,先发送一段隧道标识信息(比如隧道ID),前端代理拿到标识后再转发到对应后端连接。

小型项目实现类ngrok系统的关键组件与实践

核心组件

  • 公网代理节点:负责接收公网流量,区分不同子域名/端口的请求,转发到对应隧道。可以用Nginx处理HTTP/TLS,搭配自研TCP代理,或者直接用Go/Rust写轻量代理(ngrok本身就是Go开发的)。
  • 隧道管理服务:维护隧道的创建、销毁、状态同步,存储子域名/端口与隧道的映射关系,给客户端分配子域名或端口。
  • 客户端程序:运行在用户本地,主动和公网代理建立长连接(TCP或WebSocket都可以),把本地服务的流量转发到公网代理。
  • 通配符DNS解析:在域名服务商处配置*.yourdomain.com的A记录,指向公网代理的IP,实现所有子域名自动解析。

最佳实践

  • 优先用通配符DNS:别折腾动态DNS记录,成本高还没必要,通配符完全能满足小型项目的子域名需求。
  • TLS统一终止:在公网代理处统一处理TLS证书(用Let's Encrypt的通配符证书即可),客户端不用管加密逻辑,大幅简化开发。
  • 长连接复用:客户端和代理之间用长连接复用,避免频繁建连的开销,还可以用HTTP/2或自定义协议实现多路复用,提升效率。
  • 轻量状态管理:小型项目不需要复杂数据库,用Redis甚至内存存储就能搞定隧道映射关系,重点是保证查询速度快。
  • 端口范围限制:如果做TCP隧道,提前规划好可用的公网端口范围,避免冲突,同时在管理服务里做好端口的分配与回收。

内容的提问来源于stack exchange,提问作者dimimir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 11:58:11