使用ngrok做内网穿透

less than 1 minute read

Published:

为什么使用ngrok?

ngrok我们可以不用购买云服务器作为公网IP机器进行转发,ngrok自己提供公网服务器,而且已经全部配置好了,我们只要启动一下就可以了。

什么是ngrok?

ngrok 是一个功能强大的工具,主要用于将本地服务器暴露到公网,使得外部网络可以访问本地运行的服务。它通过创建一个安全的隧道,将公网的请求转发到本地机器上的指定端口,非常适合开发、测试和调试工作。


ngrok 的主要功能

  1. 本地服务暴露到公网
    • ngrok 可以将运行在本地机器上的服务(如 Web 服务器、API 服务等)通过一个公网 URL 暴露出去,方便外部访问。
    • 例如,你可以将本地的 localhost:8080 服务暴露为一个公网可访问的 URL,如 https://abcd1234.ngrok.io
  2. 支持 HTTPS
    • ngrok 自动为生成的 URL 提供 HTTPS 支持,无需额外配置 SSL 证书。
  3. 实时请求监控
    • ngrok 提供了一个 Web 界面(默认地址为 http://127.0.0.1:4040),可以实时查看所有传入的请求和响应,方便调试。
  4. 支持多种协议
    • 除了 HTTP/HTTPS,ngrok 还支持 TCP、TLS 等协议,适用于更多场景。
  5. 跨平台支持
    • ngrok 支持 Windows、macOS、Linux 等操作系统,使用方便。
  6. 免费和付费计划
    • ngrok 提供免费计划,适合个人开发者和小规模使用。
    • 付费计划提供更多功能,如自定义域名、更多并发连接、更长的隧道持续时间等。

ngrok 的使用场景

  1. 开发和测试
    • 在开发过程中,开发者可以通过 ngrok 将本地服务暴露给团队成员或客户,方便实时测试和反馈。
    • 例如,测试 Webhook 或 API 时,可以直接将本地服务暴露给第三方服务。
  2. 调试远程服务
    • 当你在本地调试远程服务时,ngrok 可以帮助你将远程请求转发到本地,方便调试。
  3. 演示和分享
    • 你可以通过 ngrok 生成的 URL 向他人展示本地运行的应用或服务,无需部署到远程服务器。
  4. 临时公网访问
    • 如果你需要临时将本地服务暴露到公网(例如演示或测试),ngrok 是一个快速且安全的解决方案。

ngrok 的优点

  1. 简单易用
    • 只需一条命令即可将本地服务暴露到公网。
  2. 安全性
    • 默认使用 HTTPS,支持身份验证和 IP 限制。
  3. 跨平台
    • 支持多种操作系统。
  4. 免费计划
    • 免费计划已经足够满足大多数开发者的需求。

ngrok 的缺点

  1. 免费计划限制
    • 免费计划的 URL 是随机的,且每次启动都会变化。
    • 免费计划的隧道持续时间有限(通常为 2 小时)。
  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