前言:作为开发者,你是否遇到过这些场景?本地开发的Web项目想给远程客户演示,却因为没有公网IP无法访问;调试微信公众号、支付回调接口,第三方平台要求必须提供公网HTTPS地址;想远程访问家里的NAS、树莓派,却被内网限制无法连接。今天,就给大家分享一款开箱即用的内网穿透神器——ngrok,从基础概念到实操落地,再到进阶技巧和常见问题,全程详细拆解,新手也能轻松上手,彻底解决“内网服务无法被公网访问”的痛点。

一、先搞懂:什么是内网穿透?为什么需要它?

1.1 内网与公网的核心区别

在开始之前,我们先明确两个基础概念,避免后续操作 confusion:

  • 公网IP:全球唯一的IP地址,相当于互联网上的“门牌号”,任何设备只要拥有公网IP,就能被互联网上的其他设备直接访问(比如阿里云、腾讯云的服务器,都自带公网IP)。

  • 内网IP:局域网内的私有IP,仅在内部网络有效,无法被公网直接定位和访问(比如家里路由器下的电脑、公司办公网络中的设备,IP通常是192.168.x.x、10.x.x.x、172.16.x.x这类格式)。

我们日常使用的电脑、笔记本,大多处于内网环境中(通过路由器连接互联网),路由器会通过NAT(网络地址转换)技术,将内网设备的私有IP转换为自身的公网IP,实现内网设备访问互联网,但反之,公网设备无法主动访问内网设备——这就是内网的“隔离保护”,也是我们无法直接用公网访问本地服务的核心原因。

1.2 内网穿透的核心作用

内网穿透(也叫NAT穿透),本质上是通过“公网中继服务器”,在了你内网设备和公网之间搭建一条加密的双向通信隧道,把内网中运行的服务(比如Web项目、SSH、数据库)“暴露”到公网上,让公网设备能够通过这个隧道,顺畅访问内网服务。

简单来说:内网穿透 = 给你的本地服务,分配一个公网可访问的“临时门牌号”,让全世界都能访问到你电脑上运行的项目。

1.3 内网穿透的3个高频使用场景(开发者必看)

结合开发者日常工作,这几个场景几乎都会用到内网穿透,也是ngrok的核心适用场景:

  1. 本地开发调试:开发微信公众号、小程序、支付宝支付、第三方API接口时,这些平台的回调接口要求必须是公网HTTPS地址,本地localhost:8080无法被识别,此时用ngrok就能快速生成公网HTTPS地址,无需部署到线上服务器,大幅缩短调试周期。

  2. 临时公网演示:本地开发完Web项目、Demo,想给远程客户、同事演示,无需购买服务器、部署项目,用ngrok一键暴露本地服务,生成公网地址,对方直接访问即可查看,省时省力。

  3. 远程访问内网设备:在家想访问公司内网的服务器(SSH连接)、办公电脑;或者出门在外,想访问家里的NAS(存储文件)、树莓派(智能家居控制),用ngrok穿透内网,就能随时随地访问。

除了这3个场景,ngrok还能用于临时发布小型服务、游戏联机、IoT设备远程管理等,实用性拉满。

二、主角登场:ngrok是什么?为什么选它?

2.1 ngrok的核心介绍

ngrok是一款基于反向代理技术的跨平台内网穿透工具,由ngrok公司开发,开源且提供免费版服务,核心优势就是“零配置、开箱即用”——无需手动配置路由器端口映射,无需依赖固定公网IP,仅通过简单的命令行操作,就能快速将本地服务暴露到公网,支持Windows、macOS、Linux、树莓派等所有主流操作系统,是开发者入门内网穿透的首选工具。

ngrok的核心原理的是“加密隧道+反向代理”:本地ngrok客户端主动与ngrok公网服务器建立加密长连接,公网服务器为本地服务分配一个公网域名/端口,公网请求通过这个域名/端口,经加密隧道转发到本地服务,再由本地服务处理后,通过隧道反向传回公网,完成一次完整的通信闭环。

2.2 ngrok的核心优势(对比其他工具)

内网穿透工具不止ngrok,还有frp、natapp、花生壳等,但对于新手和大多数开发者来说,ngrok的优势尤为明显,我们做一个简单对比(重点突出ngrok的核心亮点):

工具

易用性

免费版支持HTTPS

配置复杂度

核心优势

适用人群

ngrok

极高(一键启动)

支持(自动签发证书)

零配置

跨平台、请求监控、免费够用

新手、开发者(调试/临时演示)

frp

中等

需手动配置证书

较高(需配置服务端/客户端)

开源、可自建节点、功能强

有技术基础、需长期稳定使用

natapp

中等

免费版不支持(需手动配置)

中等(需实名认证)

国内节点、速度快

微信生态调试、国内场景

花生壳

中等(图形化操作)

免费版体验2小时

中等(需实名认证)

图形化界面、小白友好

纯小白、临时轻度使用

补充说明:根据CSDN博主实测,ngrok免费版每月有1GB流量限制、最多支持2条隧道,对于日常开发调试、临时演示完全够用;如果需要长期稳定使用、固定域名、更大带宽,可以升级付费版(8美元/月起),企业版还支持自托管节点,满足更高需求。

三、保姆级实操:5分钟上手ngrok(全系统通用)

重点来了!这部分全程图文化(文字详细描述操作步骤,可直接对照执行),覆盖Windows、macOS、Linux三大系统,新手跟着做,保证一次成功,全程无需复杂配置。

3.1 前置准备

  • 一台运行本地服务的设备(电脑/树莓派,确保本地服务能正常访问,比如localhost:8080);

  • 稳定的互联网连接(无需公网IP,无需配置路由器);

  • 一个ngrok账号(免费注册,用于获取授权令牌,后续配置使用)。

3.2 步骤1:注册ngrok账号并获取授权令牌

  1. 访问ngrok官网:https://ngrok.com/(无需科学上网,直接访问);

  2. 点击右上角“Sign Up”,注册账号(支持邮箱、Google、GitHub账号注册,推荐用GitHub账号,一键登录,无需验证);

  3. 注册成功后,自动跳转到ngrok控制台(Dashboard),在“Getting Started”页面,找到“Your Authtoken”(你的授权令牌),点击“Copy”复制令牌(后续配置需要用到,建议复制后保存到记事本);

如下图所示:

       补充:授权令牌的作用是绑定你的账号,让ngrok客户端识别你的身份,实现隧道的创建和管理,每个账号的令牌唯一,免费版和付费版共用一个令牌。

3.3 步骤2:下载并安装ngrok客户端(分系统操作)

ngrok无需安装,下载对应系统的压缩包,解压后得到可执行文件,即可直接使用,分系统操作如下:

(1)Windows系统

  1. 在ngrok官网“Download”页面,选择“Windows”(根据你的电脑位数选择32位/64位,现在大多是64位);

  2. 下载完成后,得到一个zip压缩包(比如ngrok-v3-stable-windows-amd64.zip);

  3. 解压压缩包,将解压后的“ngrok.exe”文件,放到一个容易找到的文件夹(比如D:\ngrok,方便后续命令行操作);

  4. 验证:双击ngrok.exe,弹出命令行窗口,显示ngrok版本信息,说明下载成功。

(2)macOS系统

  1. 官网下载对应版本(Intel芯片/Apple Silicon芯片,根据自己的电脑选择);

  2. 下载后得到zip压缩包,解压后将“ngrok”文件拖到“应用程序”文件夹,或任意自定义文件夹;

  3. 打开终端,进入ngrok所在的文件夹(比如cd /Applications);

  4. 执行命令:chmod +x ngrok(赋予可执行权限),执行完成后,输入./ngrok -v,显示版本信息即成功。

(3)Linux系统

  1. 官网下载对应版本(根据系统架构选择,比如x86_64、arm等);

  2. 通过终端下载(推荐,更快捷),执行命令(以64位系统为例): wget https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-v3-stable-linux-amd64.tgz

  3. 解压压缩包:tar -zxvf ngrok-v3-stable-linux-amd64.tgz;

  4. 执行命令:./ngrok -v,显示版本信息即成功。

3.4 步骤3:配置授权令牌(一次配置,终身可用)

这一步是关键,目的是将你的ngrok客户端与账号绑定,无论哪个系统,操作逻辑一致,只是命令行打开方式不同:

  1. 打开命令行(Windows:Win+R输入cmd,macOS/Linux:打开终端);

  2. 进入ngrok客户端所在的文件夹(比如Windows输入cd D:\ngrok,macOS输入cd /Applications);

  3. 执行授权命令(将“你的令牌”替换成步骤1中复制的授权令牌): ngrok config add-authtoken 你的令牌

  4. 执行完成后,命令行显示“Authtoken saved to configuration file”,说明授权成功,后续无需再次配置。

3.5 步骤4:启动内网穿透(核心步骤,分场景操作)

ngrok支持多种协议的穿透,最常用的是HTTP/HTTPS(Web服务)和TCP(SSH、远程桌面、数据库),我们分别讲解最常用的两个场景,其他场景可类比操作。

场景一:穿透本地Web服务(最常用,比如localhost:5000)

先启动本地Web服务,确保本地能正常访问(比如打开浏览器,输入localhost:5000,能看到项目页面);

在命令行中,进入ngrok所在文件夹,执行核心命令: ngrok http 5000说明:5000是你本地Web服务的端口,如果你本地服务的端口是其他(比如80、3000、8000),替换成对应的端口即可(比如ngrok http 3000)。

执行命令后,ngrok会自动启动,命令行窗口会显示穿透成功的信息,重点关注两个内容:

Forwarding:公网访问地址,格式为 https://xxx.ngrok.io -> http://localhost:5000(xxx是随机字符串),这个https地址就是你的公网访问地址,全世界都能访问;Web Interface:请求监控面板地址,格式为 http://127.0.0.1:4040,打开这个地址,能查看所有公网访问的请求日志、请求参数、响应内容,还能重放请求(调试必备)。

验证:打开浏览器,输入Forwarding中的https地址,能看到和localhost:5000一样的页面,说明穿透成功;同时打开监控面板,能看到刚才的访问请求记录。

场景二:将hdfs变成进行穿透hadoop11

步骤与场景一相同

打开hdfs服务访问9870端口

输入ngrok http hadoop11:9870(hadoop11是我在本地进行了ip映射,如果没有映射需要换回自己的ip地址)

启动命令

接下来便可以根据网址访问hdfs

此举有风险,在让别人访问时,别人可以对你的hdfs进行文件的删除与创建,谨慎使用。

在企业中都会做一些操作,防止知道了网站便可以对hdfs进行随意的操作。以下操作可以防止此类型事件发生。

开启 Kerberos 统一认证

设置 HDFS 权限

ACL 防火墙限制 

IP 启用 NameNode 白名单

重要数据目录加快照与回收站

3.6 步骤5:关闭ngrok穿透

无需穿透时,直接在命令行中按下 Ctrl+C,即可关闭ngrok客户端,同时公网地址会失效(免费版地址重启后会变更,下次启动会生成新的随机地址)。

四、进阶技巧:让ngrok用得更顺手(开发者必备)

掌握基础用法后,这些进阶技巧能大幅提升效率,解决免费版的一些痛点,适合有更高需求的开发者。

4.1 给穿透服务设置访问密码(避免陌生人访问)

免费版的公网地址是随机的,但仍有可能被陌生人访问,尤其是暴露管理后台、敏感服务时,设置访问密码能提升安全性,命令如下(以Web服务为例):

ngrok http --basic-auth="用户名:密码" 8080

示例:ngrok http --basic-auth="test:123456" 8080,访问公网地址时,会弹出账号密码验证框,只有输入正确的用户名和密码,才能访问本地服务。

4.2 自定义公网域名(付费版功能)

免费版的公网域名是随机的,重启ngrok后会变更,如果你需要固定的公网域名(比如用于长期调试、客户演示),可以升级ngrok付费版,自定义域名的操作步骤如下:

  1. 在ngrok控制台,点击“Domains”,点击“New Domain”,添加你自己的域名(需提前拥有该域名);

  2. 在域名服务商的后台,添加CNAME记录,将你的域名指向ngrok提供的CNAME目标(比如xxx.ngrok-cname.com);

  3. 执行穿透命令,指定自定义域名: ngrok http --url 你的域名 8080

  4. 启动后,即可通过你自定义的域名访问本地服务,且域名固定不变。

4.3 查看请求日志与重放请求(调试神器)

ngrok的Web监控面板(http://127.0.0.1:4040)是调试的核心工具,能帮你快速定位问题:

  • 查看请求详情:面板会显示所有公网访问的请求,包括请求方法(GET/POST)、请求地址、请求参数、响应状态码、响应内容;

  • 重放请求:点击请求右侧的“Replay”,可以重新发送该请求,无需重新操作客户端,适合调试接口回调(比如微信支付回调,无需重复发起支付,直接重放回调请求即可);

  • 导出日志:点击面板右上角的“Download”,可以导出请求日志,方便后续分析问题。

4.4 后台运行ngrok(避免命令行关闭后穿透失效)

默认情况下,ngrok在命令行中运行,关闭命令行窗口后,穿透会立即失效,我们可以让ngrok在后台运行,适用于需要长期穿透的场景:

  • macOS/Linux:执行命令 nohup ./ngrok http 8080 &,即可让ngrok在后台运行,关闭终端也不会失效;

  • Windows:可以创建批处理文件,或使用后台运行工具(如nssm),将ngrok注册为系统服务,实现开机自启和后台运行。

五、常见问题排查(避坑指南,新手必看)

实操过程中,难免会遇到一些问题,这里整理了最常见的5个问题,附上排查方法,帮你快速解决,避免踩坑。

问题1:执行ngrok命令时,提示“ngrok不是内部或外部命令”

原因:命令行没有进入ngrok客户端所在的文件夹,或者没有配置环境变量。

解决方法:

  • 方法1(简单):在命令行中,通过cd命令进入ngrok所在的文件夹(比如Windows:cd D:\ngrok),再执行ngrok命令;

  • 方法2(推荐):将ngrok客户端所在的文件夹路径,添加到系统环境变量(Path)中,添加后,任意目录下都能执行ngrok命令。

问题2:启动ngrok后,公网地址无法访问(显示“502 Bad Gateway”)

原因:本地服务未启动,或本地服务端口错误,导致ngrok无法连接到本地服务。

解决方法:

  • 先验证本地服务是否正常:打开浏览器,输入localhost:8080(替换成你的端口),确保能正常访问;

  • 检查ngrok命令中的端口是否和本地服务端口一致(比如本地服务是3000端口,ngrok命令却写了8080,就会报错);

  • 如果本地服务正常,重启ngrok客户端,重新执行穿透命令。

问题3:ngrok启动失败,提示“err_ngrok_120:ngrok agent version is no longer supported”

原因:ngrok客户端版本过低,官方不再支持该版本。

解决方法:

  • 卸载当前旧版本ngrok;

  • 访问ngrok官网,下载最新版本的客户端,重新配置授权令牌,再启动穿透。

问题4:公网访问速度慢,出现卡顿、超时

原因:ngrok免费版使用的是海外公网服务器,国内访问会有延迟,属于正常现象;另外,免费版有带宽限制,大文件传输会卡顿。

解决方法:

  • 如果只是调试接口,无需传输大文件,基本不影响使用;

  • 如果需要更快的速度,可以升级ngrok付费版,选择国内节点;或更换国内内网穿透工具(如natapp)。

问题5:启动ngrok后,提示“err_ngrok_108:you’ve hit your account limit for simultaneous ngrok agent sessions”

原因:你的ngrok账号同时启动了超过限制数量的客户端会话(免费版最多支持2个同时会话)。

解决方法:

  • 关闭其他设备上正在运行的ngrok客户端;

  • 如果没有其他设备运行,执行Ctrl+C关闭当前ngrok,等待1-2分钟后,重新启动即可。

六、总结与扩展

6.1 核心总结

ngrok作为一款极简的内网穿透工具,核心优势就是“零配置、开箱即用”,无需公网IP、无需配置路由器,一行命令就能将本地服务暴露到公网,完美解决开发者调试、临时演示、远程访问的需求。

对于新手和大多数开发者来说,免费版完全够用;如果需要固定域名、更高带宽、长期稳定使用,可以考虑升级付费版;如果有技术基础,也可以尝试frp等开源工具,自建节点,实现更灵活的穿透方案。

6.2 扩展建议

  • 安全提醒:不要用ngrok暴露数据库、管理后台、敏感文件等核心服务,即使设置了访问密码,也存在一定安全风险;用完后及时关闭ngrok,避免不必要的暴露;

  • 版本更新:定期更新ngrok客户端,避免因版本过低导致启动失败、功能异常;

  • 更多场景:ngrok还支持UDP协议穿透(如游戏联机)、自定义端口、请求转发等功能,可参考官方文档(https://ngrok.com/docs)深入学习。

最后,希望这篇保姆级教程能帮你彻底掌握ngrok的使用,解决内网穿透的痛点。如果在实操过程中遇到其他问题,欢迎在评论区留言,我会及时回复解答。觉得有用的话,记得点赞、收藏、关注,后续会分享更多开发者实用工具和技巧!

补充:本文实操步骤基于ngrok v3版本(最新版本),如果你的版本不同,部分命令可能略有差异,建议下载最新版本操作,避免出现兼容性问题。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐