使用ngrok做内网穿透
Published:
为什么使用ngrok?
ngrok我们可以不用购买云服务器作为公网IP机器进行转发,ngrok自己提供公网服务器,而且已经全部配置好了,我们只要启动一下就可以了。
什么是ngrok?
ngrok
是一个功能强大的工具,主要用于将本地服务器暴露到公网,使得外部网络可以访问本地运行的服务。它通过创建一个安全的隧道,将公网的请求转发到本地机器上的指定端口,非常适合开发、测试和调试工作。
ngrok 的主要功能
- 本地服务暴露到公网:
ngrok
可以将运行在本地机器上的服务(如 Web 服务器、API 服务等)通过一个公网 URL 暴露出去,方便外部访问。- 例如,你可以将本地的
localhost:8080
服务暴露为一个公网可访问的 URL,如https://abcd1234.ngrok.io
。
- 支持 HTTPS:
ngrok
自动为生成的 URL 提供 HTTPS 支持,无需额外配置 SSL 证书。
- 实时请求监控:
ngrok
提供了一个 Web 界面(默认地址为http://127.0.0.1:4040
),可以实时查看所有传入的请求和响应,方便调试。
- 支持多种协议:
- 除了 HTTP/HTTPS,
ngrok
还支持 TCP、TLS 等协议,适用于更多场景。
- 除了 HTTP/HTTPS,
- 跨平台支持:
ngrok
支持 Windows、macOS、Linux 等操作系统,使用方便。
- 免费和付费计划:
ngrok
提供免费计划,适合个人开发者和小规模使用。- 付费计划提供更多功能,如自定义域名、更多并发连接、更长的隧道持续时间等。
ngrok 的使用场景
- 开发和测试:
- 在开发过程中,开发者可以通过
ngrok
将本地服务暴露给团队成员或客户,方便实时测试和反馈。 - 例如,测试 Webhook 或 API 时,可以直接将本地服务暴露给第三方服务。
- 在开发过程中,开发者可以通过
- 调试远程服务:
- 当你在本地调试远程服务时,
ngrok
可以帮助你将远程请求转发到本地,方便调试。
- 当你在本地调试远程服务时,
- 演示和分享:
- 你可以通过
ngrok
生成的 URL 向他人展示本地运行的应用或服务,无需部署到远程服务器。
- 你可以通过
- 临时公网访问:
- 如果你需要临时将本地服务暴露到公网(例如演示或测试),
ngrok
是一个快速且安全的解决方案。
- 如果你需要临时将本地服务暴露到公网(例如演示或测试),
ngrok 的优点
- 简单易用:
- 只需一条命令即可将本地服务暴露到公网。
- 安全性:
- 默认使用 HTTPS,支持身份验证和 IP 限制。
- 跨平台:
- 支持多种操作系统。
- 免费计划:
- 免费计划已经足够满足大多数开发者的需求。
ngrok 的缺点
- 免费计划限制:
- 免费计划的 URL 是随机的,且每次启动都会变化。
- 免费计划的隧道持续时间有限(通常为 2 小时)。
- 性能依赖:
- 由于流量需要通过
ngrok
的服务器转发,性能可能受限于ngrok
的服务器负载。
- 由于流量需要通过
总结
ngrok
是一个非常实用的工具,特别适合开发者在本地开发、测试和调试时使用。它能够快速将本地服务暴露到公网,并提供实时监控和 HTTPS 支持。无论是个人开发者还是团队,ngrok
都是一个值得尝试的工具。
怎么使用ngrok ssh到内网的机器?
1. 在内网的机器安装ngrok
访问ngrok setup,有详细的安装指令。我们这里以linux为例:
- 安装
curl -sSL https://ngrok-agent.s3.amazonaws.com/ngrok.asc \ | sudo tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null \ && echo "deb https://ngrok-agent.s3.amazonaws.com buster main" \ | sudo tee /etc/apt/sources.list.d/ngrok.list \ && sudo apt update \ && sudo apt install ngrok
- authtoken
ngrok config add-authtoken your_token(访问上面的链接就有)
2. 启动ssh服务
最好在远程机器上开启一个tmux终端,这样可保持服务在远程机器上持续运行。
ngrok tcp 22
这时候终端会提示开启失败,要我们访问官网添加一个银行卡用于验证。访问错误信息的链接,去添加一个银行卡就可以了。银行卡不是为了扣钱,而是为了验证你的身份。
添加上银行卡后,再回来重新执行上面的指令,就可以启动内网穿透的ssh服务了。
访问ngrok dashboard,就可以看到访问的链接和端口了。如下图
根据上图,访问远程机器就可以了。
ssh -p 17872 远程机器的用户名@0.tcp.jp.ngrok.io