ngrok 搭建指南:从零开始构建内网穿透服务

首页 2026-05-13 15:39:13

前言

ngrok 是一款经典的内网穿透工具,它通过建立一条安全的加密隧道,将本地服务映射到公网,让没有公网 IP 的电脑也能被外部访问。搭建 ngrok 有两种主要方式:一种是直接使用 ngrok 官方提供的现成服务,注册账号即可使用;另一种是在自己的云服务器上从零搭建一套私有的 ngrok 服务端。本文将重点介绍自建 ngrok 服务器的完整流程,适合希望拥有独立控制权、避免依赖第三方服务的用户。
 

准备工作

自建 ngrok 服务端需要提前准备三项基础资源。
首先是一台具有公网 IP 的云服务器。由于 ngrok 的服务端需要监听公网端口,因此必须拥有一台能够对外提供服务的机器。建议选择 Linux 系统,例如 CentOS 或 Ubuntu,这类系统对服务端程序的支持最为完善。服务器的带宽和配置不需要太高,轻量级的云服务器即可满足基本需求。
 
其次是一个域名。这个域名用于生成隧道地址,例如当你的基础域名设定为 example.com 时,客户端可以创建形如 test.example.com 的子域名来访问本地服务。你需要在域名服务商的控制面板中,为这个域名添加一条泛解析记录,将所有子域名都指向你的云服务器公网 IP。
 
最后是 Go 语言开发环境。ngrok 的源码基于 Go 语言编写,因此服务端和客户端都需要通过编译源码来生成可执行文件。你需要在服务器上安装合适版本的 Go,并配置好环境变量,确保编译工具链可以正常工作。
 

获取源码与生成证书

ngrok 的第一版源码是开源的,可以从官方仓库克隆到本地。虽然这个版本已经停止更新,但对于自建服务来说功能完全足够。将源码下载到服务器后,接下来的关键步骤是生成 TLS 证书。
 
ngrok 的所有通信都基于 TLS 加密,因此必须准备一套属于自己的证书,而不能使用源码中自带的默认证书。生成证书的过程需要使用 OpenSSL 工具,首先创建一个根证书私钥,然后用它签发一个自签名的根证书。接着再生成一个设备私钥和证书请求,最后用根证书对设备证书进行签名。
 
证书生成完毕后,需要将根证书复制到客户端的证书目录,将设备证书和私钥复制到服务端的证书目录,替换掉源码中的默认文件。这一步至关重要,因为只有在服务端和客户端使用同一套证书体系时,它们之间的加密连接才能被正确验证和建立。
 

编译服务端与客户端

完成证书替换后,就可以开始编译 ngrok 的两个核心组件了。服务端程序名为 ngrokd,负责接收客户端连接、管理隧道、转发外部流量。客户端程序名为 ngrok,运行在本地开发机上,用于建立与服务端的隧道连接。
 
编译服务端时,需要指定目标操作系统和架构。如果你的云服务器是六十四位的 Linux 系统,就使用对应的编译参数。编译完成后,会在指定目录下生成 ngrokd 可执行文件。
 
客户端的编译则需要考虑你的本地开发环境。如果你主要在 Windows 上开发,就需要编译 Windows 版本的客户端;如果在 macOS 上开发,就需要编译 macOS 版本。ngrok 支持多种操作系统和架构组合,你可以根据需要分别编译不同平台的客户端,然后将对应的可执行文件分发给团队成员使用。
 

启动服务端

服务端启动时需要指定几个关键参数。首先是你的基础域名,ngrokd 会根据这个域名为客户端生成子域名。其次是 HTTP 和 HTTPS 的监听端口,默认分别是八十和四百四十三,如果服务器上这些端口已被其他服务占用,可以自定义为其他端口。还有一个重要的参数是隧道监听端口,默认是四千四百四十三,客户端正是通过连接这个端口来建立隧道的。
 
启动成功后,服务端会显示监听状态,每隔一段时间刷新一次连接信息。为了让服务端在后台持续运行,不因关闭终端窗口而中断,可以使用后台运行工具将其挂起。如果你希望服务端随系统开机自动启动,还可以将其注册为系统服务,通过服务管理命令来统一控制启动和停止。
 

配置与启动客户端

客户端启动前需要创建一个配置文件。这个文件的核心内容是服务端地址,也就是你的域名加上隧道监听端口号。由于使用的是自签名证书,还需要在配置中关闭对主机根证书的信任检查,这样客户端才会接受服务端提供的自签名证书。
 
启动客户端时,需要指定配置文件路径,还可以为隧道设置一个子域名前缀。例如,如果你设定前缀为 demo,基础域名为 example.com,那么最终生成的公网访问地址就是 demo.example.com。同时你需要指定本地服务的端口号,ngrok 会将所有访问该公网地址的流量转发到这个本地端口。
 
客户端启动成功后,终端会显示隧道已建立的信息,包括分配的公网地址和本地映射地址。此时你就可以将这个公网地址分享给他人,或者在手机、其他网络环境中测试访问你的本地服务了。
 

高级功能与扩展

自建 ngrok 不仅支持 HTTP 和 HTTPS 协议的穿透,还支持 TCP 协议。这意味着你可以将本地数据库、远程桌面、SSH 服务等非 Web 应用也暴露到公网。配置 TCP 隧道时,需要在客户端配置文件中指定协议类型为 TCP,并设置远程端口号。服务端也需要在防火墙中放行对应的端口范围。
 
ngrok 在本地还提供了一个 Web 管理面板,默认可以通过本地特定端口访问。这个面板实时展示所有经过隧道的请求详情,包括请求时间、来源 IP、访问路径、响应状态码等。对于调试 Webhook 或分析接口调用非常有帮助,你可以清楚地看到外部系统是如何与你的本地服务交互的。
 

安全与维护建议

自建 ngrok 服务虽然自由度高,但也需要自行承担安全责任。建议为云服务器配置防火墙规则,仅开放必要的端口,避免将管理端口暴露到公网。定期更新服务器系统和依赖组件,及时修补安全漏洞。如果不再需要某个隧道,应及时停止客户端连接,避免本地端口长期暴露在公网。
 
此外,自签名证书在某些浏览器或系统中可能会触发安全警告,这是正常现象。如果你希望获得更好的兼容性,可以考虑使用正式的域名证书替换自签名证书,但这会增加一定的维护成本。对于内部开发测试场景,自签名证书已经完全够用。

或者可以考虑80km穿云箭工具(https://www.80km.com/cyj/),是一款轻量、高效、安全的内网端口映射与动态域名解析(DDNS)工具
 

总结

自建 ngrok 服务端是一项性价比很高的技能,它让你摆脱了对第三方服务的依赖,拥有了完全自主的内网穿透能力。整个搭建流程包括准备服务器和域名、安装 Go 环境、下载源码、生成 TLS 证书、编译服务端和客户端、启动服务并配置连接。虽然步骤较多,但每一步都有明确的目的,理解原理后操作起来并不复杂。对于团队协作或长期项目来说,拥有一套私有的 ngrok 服务,既能保证稳定性,又能灵活定制各种高级功能,是开发运维工作中非常实用的基础设施。

 
 

ngrok 搭建指南:从零开始构建内网穿透服务
ngrok 怎么用?新手零基础使用完整教程
ngrok 使用指南:让本地服务走向公网
生产环境用Linux端口转发暴露内网服务,安全性和稳定性如何保障?
Windows netsh端口转发到底支持哪些协议?为什么只能转TCP?
Linux做软路由和硬路由器比,性能差距到底有多大?
Linux IP 转发功能详解
Linux 转发全解析:从网络转发到流媒体转发的完整指南
微信转发服务器,微信转发服务器是什么
虚拟服务器与端口转发:内网服务“上云”的必备技能