[分享] 使用 Ngrok 实现内网穿透

Ngrok 是什么

ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放。

网络架构如下图所示:

24201429_lLUH.jpg

介绍和图片来自: http://www.oschina.net/p/ngrok

可以用来干什么

其中应用场景最多的是内网穿透, 把局域网内的一些服务暴露到公网.
例如支付对接的异步通知, 微信开发者模式测试等.

ngrok 运行时需要先连接到服务器, 指定或随机分配一个子域名, 公用就能通过这个子域名访问到你的机器上的服务.
例如: 命令行运行 ngrok -subdomain=fengqi 80, 这是访问 fengqi.ngrok.com 数据的来源就是我本地的80端口.
而且客户端有回放功能, 在做测试时就可以不用重复发起请求, ngrok 就能模拟了, 测试表单, ajax 非常方便, 同时可以很直观的看到 http 请求信息.

测试一下

ngrok 客户端运行后, 命令行会显示一些信息, 同时会监听本地 Web 4040 端口.
在浏览器中打开后提示你需要访问的域名, 如下.
QQ20150906-1@2x.png

这里我没有指定, 直接运行 ngrok 80 就随机分配了一个.
QQ20150906-6@2x.png

当访问这个域名时, 和在你本地访问80端口是一样的内容, 而且客户端会显示访问的详细信息.
QQ20150906-2@2x.png
QQ20150906-3@2x.png
QQ20150906-4@2x.png

点击 replay 时, 可以看到和一次普通请求一样, 但是 ip 变掉了.
QQ20150906-5@2x.png

另外这里的域名不是官方的 ngrok.com 是因为用了我自己搭建服务器, 因为大陆网友使用官方有些困难.

ngrok 客户端下载地址是: https://ngrok.com/download/1
客户端是全平台的

如果你也想使用我的服务器测试, 在 ~/.ngrok 中输入以下内容:

Windows 是在用户跟目录下, 如 C:\Users\fengqi\.ngrok

server_addr: "ngrok.fengqi.me:4443"
trust_host_root_certs: true

下载安装并信任我的跟证书, Fengqi Global CA
Windows 安装方法
QQ20150908-1@2x.png

苹果安装方法
QQ20150908-2@2x.png

更多其它配置, 可以参考官方文档: Developer's guide to ngrok

ngrok 详细用法

用法不复杂, 执行下 ngrok -h 就能看到, 内容有点多, 这里就不贴出来了.

简单抽几个:

  1. 转发本地的 80 端口到外网: ngrok 80
  2. 指定一个子域名: ngrok -subdomain=test 80, 访问需要就是: test.ngrok.fengqi.me, 如果已经被占用, 需要换一个.
  3. tcp 端口转发: ngrok -proto=tcp 22, 会随机分配一个端口, 对应到你本地 22 端口.
    如果你是 linux, 那么别人就可以 ssh 到你的机器了, 类似这样: tcp://ngrok.fengqi.me:43797 -> 127.0.0.1:22

不过我自己搭建的服务器没有实现端口转发, 因为我需要留着这些端口, 毕竟跑着很多东西呢.

  1. 设置 http basic 验证: ngrok -httpauth="user:password" 80 这样就安全很多, 防止别人猜到/碰巧访问到你这里去.
  2. 直接指定一个域名, 而不是子域名: ngrok -hostname="example.com" 80, 这个我也没有实现, 因为需要我默认接受全部的域名绑定, 目前还不想这样.

如果你也想搭建自己的服务器

参考:
How to run your own ngrokd server
[[原创]搭建自己的 Ngrok 服务器, 并与 Nginx 并存](https://fengqi.me/unix/409.html)

官方只开源了 1.x 的代码, 所以如果使用我的或你自己搭建服务器需要下载 1.x 的客户端.

标签: ngrok

添加新评论