ngrok 内网穿透利器

3,145次阅读
没有评论

ngrok 内网穿透利器

由于开发 Web 项目,经常需要将本地部署的网站让外网能直接访问到,最便捷的做法当然是在 ADSL 路由器上直接做端口映射,很不幸大部分运
营商都屏蔽了 80 等常用端口,曾经的做法是在公网一台 VPS 上架设 OpenVPN,将笔记本和 VPS 连到一个虚拟局域网,再用 iptables 做端口转发
来达到目的,虽然可行,但速度比较慢,由于线路不稳定造成掉线几率较高。偶然发现还有个叫 ngrok 的神器专门做了这件事,不但提供了一个在外网能够安全
的访问内网 Web 主机,还能捕获所有请求的 http 内容,方便调试,甚至还支持 tcp 层端口映射,不局限于某一特定的服务。支持 Mac OS
X,Linux,Windows 平台。

1. ngrok 下载运行

体积很小,官网 下载后直接解压得到一个二进制文件,在 shell 中执行./ngrok 80 即可,默认会分配随机的二级域名来访问,转发到本机的 80 端口。可以通过 -help 参数来查看详细的说明,运行后如下提示:

Tunnel Status                 online
Version                       1.6/1.5
Forwarding                    http://steven-mbp.ngrok.com -> 127.0.0.1:8080
Forwarding                    https://steven-mbp.ngrok.com -> 127.0.0.1:8080
Web Interface                 127.0.0.1:4040
# Conn                        16
Avg Conn Time                 558ms

我这里是使用了自定义二级域名,意味着访问 http://steven-mbp.ngrok.com 就如同访问内网的 http:
//127.0.0.1:8080,很方便吧。通过 ngrok 提供的管理界面 (127.0.0.1:4040) 可以清楚的看到当前有哪些连接,以及请求的
url,可以进行 replay。

2. ngrok 常用示例

1. 采用自定义二级域名 steven-mbp.ngrok.com 转发到本机的 8080 端口。

./ngrok -subdomain steven-mbp 8080

2. tcp 端口转发,这意味着可以在外网 ssh 到本机了,当然外网端口是随机分配的。

./ngrok -proto=tcp 22

3. 转发到局域网其他的机器

./ngrok 192.168.0.1:80

4. 绑定顶级域名(付费才可用),在 dashboard 中添加域名,将域名 cname 解析到 ngrok.com 即可。

./ngrok -hostname test.dorole.com 8080

3. ngrok 配置文件

ngrok 可以将参数写到文件中,默认是放在~/.ngrok。例如:

tunnels:
  client:
    auth: "user:password"
    proto:
      https: 8080
  ssh:
    proto:
      tcp: 22
  test.dorole.com
    proto:
      http: 9090

这里定义了三个隧道,client 表示转发 http 到本机 8080,同时要求验证,ssh 表示支持远程访问,第三个是绑定了域名转发到
9090。这时候只需要一个./ngrok start client ssh test.dorole.com 即可快速启动这三个隧道服务。

每一个隧道的配置节点都有五个参数,proto,subdomain,auth,hostname 和 remote_port,每个隧道必须有
proto 参数来指定本地地址和端口。auth 参数用于在 http(s)中身份认证,而 remote_port 用于在 tcp 隧道中指定远程服务器端口。如
果没有配置 subdomain 参数,ngrok 会默认一个二级域名与隧道节点一样的名字。

4. 配置文件中的其他参数

authtoken: abc123
inspect_addr: "0.0.0.0:8888"
tunnels:
  ...

authtoken 用于设置登录 ngrok 的授权码,可以在 ngrok 首页的 dashboard 中查看到。inspect_addr 用于设置监
听 ip,比如设置为 0.0.0.0:8080 意味着监听本机所有 ip 的 8080 端口上。ngrok 也支持自己架设 ngrokd 服务器,在配置中通过
server_addr:“dorole.com:8081″来指定自己搭建的服务器地址。设置 trust_host_root_certs:
true 来支持 TLS 加密协议的证书信任。ngrok 支持 http
proxy,可以将 ngrok 配置成一个 http 代理,这在本机网络受限制的地方用比较合适。

官网:https://ngrok.com/

正文完
 0
评论(没有评论)
验证码