[分享] 使用 Ngrok 实现内网穿透
Ngrok 是什么
ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放。
网络架构如下图所示:
介绍和图片来自: http://www.oschina.net/p/ngrok
可以用来干什么
其中应用场景最多的是内网穿透, 把局域网内的一些服务暴露到公网.
例如支付对接的异步通知, 微信开发者模式测试等.
ngrok
运行时需要先连接到服务器, 指定或随机分配一个子域名, 公用就能通过这个子域名访问到你的机器上的服务.
例如: 命令行运行 ngrok -subdomain=fengqi 80
, 这是访问 fengqi.ngrok.com
数据的来源就是我本地的80端口.
而且客户端有回放功能, 在做测试时就可以不用重复发起请求, ngrok
就能模拟了, 测试表单, ajax 非常方便, 同时可以很直观的看到 http
请求信息.
测试一下
ngrok 客户端运行后, 命令行会显示一些信息, 同时会监听本地 Web 4040 端口.
在浏览器中打开后提示你需要访问的域名, 如下.
这里我没有指定, 直接运行 ngrok 80
就随机分配了一个.
当访问这个域名时, 和在你本地访问80端口是一样的内容, 而且客户端会显示访问的详细信息.
点击 replay
时, 可以看到和一次普通请求一样, 但是 ip 变掉了.
另外这里的域名不是官方的 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 安装方法
苹果安装方法
更多其它配置, 可以参考官方文档: Developer's guide to ngrok
ngrok 详细用法
用法不复杂, 执行下 ngrok -h
就能看到, 内容有点多, 这里就不贴出来了.
简单抽几个:
- 转发本地的 80 端口到外网:
ngrok 80
- 指定一个子域名:
ngrok -subdomain=test 80
, 访问需要就是:test.ngrok.fengqi.me
, 如果已经被占用, 需要换一个. - tcp 端口转发:
ngrok -proto=tcp 22
, 会随机分配一个端口, 对应到你本地 22 端口.
如果你是 linux, 那么别人就可以 ssh 到你的机器了, 类似这样: tcp://ngrok.fengqi.me:43797 -> 127.0.0.1:22
不过我自己搭建的服务器没有实现端口转发, 因为我需要留着这些端口, 毕竟跑着很多东西呢. - 设置 http basic 验证:
ngrok -httpauth="user:password" 80
这样就安全很多, 防止别人猜到/碰巧访问到你这里去. - 直接指定一个域名, 而不是子域名:
ngrok -hostname="example.com" 80
, 这个我也没有实现, 因为需要我默认接受全部的域名绑定, 目前还不想这样.
如果你也想搭建自己的服务器
参考:
How to run your own ngrokd server
搭建自己的 Ngrok 服务器, 并与 Nginx 并存
官方只开源了 1.x
的代码, 所以如果使用我的或你自己搭建服务器需要下载 1.x
的客户端.
谢谢