能否模仿ngrok或从零搭建同类服务?部署于自有公网IP服务器
能否模仿/从零开发ngrok类内网穿透服务?
完全可以基于你的公网IP服务器,从零开发或复刻与ngrok功能一致的内网穿透服务。ngrok的核心逻辑是反向代理+长连接隧道转发,只要理清底层技术栈,从零实现并非难事。
核心原理拆解
ngrok的核心工作流程很清晰:
- 内网客户端主动向公网服务器发起并维持长连接
- 公网服务器接收外部请求后,通过已建立的长连接将流量转发到内网服务
- 内网服务的响应沿原路回传,最终返回给外部请求方
从零开发的关键技术点
- 长连接维持:基于TCP或WebSocket实现,需加入心跳检测、自动重连机制,防止连接被中间网关主动断开
- 反向代理逻辑:公网服务器需监听指定端口(或绑定自定义域名),将外部请求匹配到对应客户端的隧道连接并转发流量
- 隧道映射管理:维护客户端ID与隧道连接的映射表,支持同时为多个内网服务建立独立隧道
- TLS加密支持:若要提供HTTPS穿透,需在公网服务器配置SSL证书,或实现证书自动下发逻辑
- 跨平台客户端:开发支持Windows/macOS/Linux的客户端程序,负责与公网服务器建联并转发本地端口流量
简化版快速实现思路(以Go语言为例,ngrok原生基于Go开发)
- 公网服务器端:
- 监听两个端口:一个用于客户端注册(如
:8080),一个用于外部请求转发(如:80) - 维护内存映射表,记录客户端标识与对应长连接的关联关系
- 当外部请求到达转发端口时,根据域名/路径匹配到目标客户端连接,双向转发流量
- 监听两个端口:一个用于客户端注册(如
- 内网客户端:
- 连接公网服务器的注册端口,上报本地需暴露的服务端口信息
- 建立双向数据流,将本地服务的请求/响应与公网服务器的转发流量互通
低成本复刻方案(无需从零写代码)
如果不想从头开发,也可以基于开源项目快速修改适配:
- Fork ngrok官方源码,调整配置项、域名绑定逻辑后,直接部署到你的公网服务器
- 使用frp这类轻量开源内网穿透工具,通过自定义配置实现类似ngrok的功能(支持自定义域名、TLS加密等)
部署注意事项
- 确保公网服务器的防火墙/安全组开放所需端口(客户端注册端口、外部访问端口)
- 若使用域名访问,需将域名解析到你的公网服务器IP
- 提供HTTPS服务时,需申请SSL证书(如Let's Encrypt免费证书)并配置在公网服务器
内容的提问来源于stack exchange,提问作者José Corcios
相关产品推荐
相关产品推荐

