ngrok 是一款广泛使用的内网穿透工具,其核心功能是在公共互联网与本地服务之间建立安全隧道。ngrok Agent 是一个轻量级的命令行程序,负责将 ngrok 云端服务创建的端点流量转发至本地应用服务。该工具以独立原生可执行文件的形式发布,无运行时依赖,支持主流操作系统及主流包管理器分发。
一、安装与认证
ngrok 的安装方式因操作系统而异。macOS 用户可通过 Homebrew 包管理器安装;Linux(Debian/Ubuntu)用户可通过 APT 源安装;Windows 用户可通过 WinGet 包管理器安装。
安装完成后,需在 ngrok 官网注册账号并获取身份验证令牌(authtoken),该令牌可在用户仪表盘获取。认证过程通过命令行配置完成,将令牌写入配置文件。若需在 CI 环境等场景中避免写入磁盘,也可通过环境变量传递认证信息,无需修改配置文件。
二、核心命令与功能
ngrok 的基本命令格式为 ngrok command flags。主要子命令包括:
http:创建 HTTP/HTTPS 隧道,将本地 HTTP 服务暴露至公网,分配一个公网 URL
tcp:创建 TCP 隧道,适用于 SSH、数据库等非 HTTP 服务
tls:创建 TLS 隧道(不终止 TLS)
start:从配置文件启动指定隧道,也支持一次性启动所有已配置的隧道
config:管理配置文件(添加认证令牌、检查配置有效性、编辑配置)
diagnose:运行连接诊断,排查网络问题
HTTP 隧道是最常用的方式,执行命令后本地服务即可通过公网访问。指定域名功能支持用户自定义隧道端点域名。TCP 隧道则适用于需要原始 TCP 连接的非 Web 服务。
三、常用命令行参数
ngrok 支持多个命令行参数以定制隧道行为:
自定义域名:指定自定义域名作为隧道端点
区域选择:指定接入区域(如美国、欧洲、亚太、澳大利亚、日本、印度等)
基本认证:为隧道添加 HTTP 基本认证,增加访问安全性
日志输出:将日志写入文件或标准输出,便于调试和监控
配置文件路径:指定自定义配置文件位置,支持多配置文件合并
会话元数据:为隧道会话添加用户自定义元数据,便于标识和管理
四、配置文件管理
ngrok 支持通过 YAML 配置文件管理隧道定义,避免在命令行中反复输入长参数。用户可以在配置文件中预设多个隧道,通过启动命令调用指定隧道,或一次性启动所有配置的隧道。配置检查命令可用于验证配置文件的有效性,避免启动时出错。
五、免费版的功能限制与适用边界
ngrok 提供免费使用计划,但需充分了解其资源限制:
数据传输出口:每月 1 GB
在线端点:最多 3 个
HTTP 请求:每月 20,000 次
TCP 连接:每月 5,000 次
TLS 连接:免费版不支持
并发 Agent:最多 3 个
免费版每月包含一个自动分配的开发域名(格式为 *.ngrok-free.app),不支持自定义域名。当超出带宽或连接数限制时,服务将不可用。
此外,免费版会在所有 HTML 浏览器流量前插入一个提示页面,告知访问者该站点由 ngrok 提供服务,在需要向客户或同事展示的场景下可能产生不佳的观感。该提示页可通过升级至付费计划移除。
六、技术选型参考
ngrok 的命令行工具设计简洁,上手成本较低,适合开发调试、Webhook 测试等临时性场景。然而,其免费版的资源限制------尤其是 1 GB/月的出口流量和每月 5,000 次 TCP 连接------对于需要长期稳定运行或传输较大数据的场景可能构成瓶颈。隧道地址在每次重启后发生变化,也给需要固定访问地址的场景带来不便。
对于需要固定访问地址、更低资源占用或更灵活免费额度的使用场景,可关注同类工具中的其他方案。例如80KM穿云箭同样支持命令行客户端方式实现内网穿透,提供固定公网地址且免费版无月度流量清零限制。具体选型需根据实际使用场景、流量需求和预算综合评估。