Loading...

文章背景图

ngrok:开源版内网穿透反向代理自建服务端与客户端指南

2026-10-27
0
- 字
- 分钟
|

ngrok:开源版内网穿透反向代理自建服务端与客户端指南

一、项目官方信息

项目 信息
GitHub 仓库 https://github.com/inconshreveable/ngrok
官网 https://ngrok.com
开源协议 BSD(v1 开源版,GitHub 未自动识别)
主要语言 Go(约 72.4%)
Star 数 约 24k

重要现状说明:本仓库是 ngrok 旧 v1 版本的代码库,2013–2016 年间活跃开发,现已归档(archived),官方不再开发、支持或维护 v1。ngrok 云端服务继续运营,新版本转向闭源客户端 + 官方云服务(见 https://ngrok.com/signup)。本文按该开源仓库 README,记录自建 ngrok 服务端(ngrokd)+ 客户端的传统用法,供学习与自建内网穿透使用。

ngrok 是一个全局分布式反向代理,把你本机/内网的服务安全地暴露到公网:你可以把它理解为应用的"前门",把反向代理、防火墙、API 网关、全局负载均衡合而为一。

典型用途:

  • 开发者预览:不部署即可从本机演示 App;
  • Webhook 调试:接收并回放 HTTP 回调;
  • 站点到站点连通:安全连接到客户网络内的 API/数据库;
  • 调试分析:抓取并检查发往 Web 服务的 HTTP 流量。

ngrok 仓库封面

二、官方图片

上图为 ngrok 开源仓库在 GitHub 上的社交预览图。

三、环境要求

  • Go 语言环境(v1 基于 Go,需从源码编译)。
  • 一台有公网 IP 的服务器(用于运行 ngrokd 服务端),以及一台需要暴露内网服务的机器(运行客户端)。
  • 一个域名(可选,用于把二级域名指向 ngrokd,便于按子域名分发)。
  • 编译产物为单二进制,运行时无外部依赖。

四、部署步骤(自建 v1 服务端)

1. 克隆源码

git clone https://github.com/inconshreveable/ngrok.git
cd ngrok

2. 编译服务端 ngrokd

用 Go 编译服务端(按仓库内 Makefile 说明,通常 make server 或直接 go build 对应 server 目录):

# 编译服务端二进制 ngrokd
make server

产物为 ngrokd,部署到公网服务器。

3. 编译客户端

make client

产物为 ngrok 客户端,放到需要暴露内网服务的机器上。

提示:跨平台时可用 GOOS/GOARCH 指定目标系统,例如为 Linux 服务器编译、为 macOS 本机分别编译。

4. 启动服务端 ngrokd

在公网服务器上运行 ngrokd,指定隧道与 HTTP/HTTPS 监听端口:

ngrokd -domain="ngrok.yourdomain.com" \
       -httpAddr=":8080" \
       -httpsAddr=":8081" \
       -tunnelAddr=":4443"
  • -domain:客户端隧道分配的二级域名根;
  • -httpAddr/-httpsAddr:对外提供给浏览器访问的 HTTP/HTTPS 地址;
  • -tunnelAddr:客户端连接隧道的端口。

5. 启动客户端建立隧道

在本机(内网)上运行客户端,连接自建服务端并转发本地端口:

ngrok -server="ngrok.yourdomain.com:4443" \
      -subdomain="demo" \
      80

含义:把本机 80 端口的服务,通过自建隧道暴露为 http://demo.ngrok.yourdomain.com:8080。

五、使用方法

  • 暴露 HTTP 服务:ngrok -server=... -subdomain=web 8080,浏览器访问分配的公网地址即可。
  • 暴露 TCP 服务:v1 支持指定 TCP 隧道,把数据库/SSH 等端口转发出去。
  • 查看会话:客户端自带本地 Web 界面,可查看经过隧道的请求记录并回放。
  • 生产替代:若不希望维护 v1 归档代码,可直接使用 ngrok.com 官方客户端(免费额度),或选用 gost、frp 等仍在维护的开源隧道项目。

六、常见问题 FAQ

  1. 这个仓库还能直接用吗? 代码可编译、可自建,但官方已归档,不再修 bug/发版。学习和自建内网穿透没问题,生产环境建议评估仍在维护的替代方案。

  2. ngrokd 启动后客户端连不上? 检查服务器防火墙/安全组是否放行 tunnelAddr(如 4443)、httpAddr/httpsAddr;确认 -domain 与 DNS 解析一致。

  3. 必须有域名吗? 自建 v1 推荐用域名做二级域名分发;只用 IP 也可跑基础隧道,但按子域名分发会受限。

  4. ngrok 新版和这个 v1 什么关系? 新版 ngrok 是闭源客户端 + 官方云服务,不再开源服务端;本仓库只是历史开源 v1。

  5. 客户端怎么编译成 Windows 版? 用 GOOS=windows GOARCH=amd64 go build 交叉编译。

  6. 想看流量调试怎么做? 客户端本地 Web 界面会列出经过隧道的请求,可查看、回放,用于复现 webhook。

七、跳转链接

评论交流

文章目录