Ngrok搭建内网穿透

什么是Ngrok

Ngrok是一款用go语言开发的开源软件,它是一个反向代理。它可以通过一个公共的断点和本地运行的Web服务器建立一个安全通道,实现内网穿透功能。

Ngrok主要用于对处在内网环境中,无外网IP的计算机的远程连接。Ngrok对于开发来说,很是实用,例如,微信公众平台二次开发时,服务器必须要能通过外网访问,而且必须是80接口。我们一般会在自己的电脑上写代码,但是由于电信运营商将80端口屏蔽了,甚至很多人通过无线路由器上网,根本就没有公网ip。在这种情况下,我们每次都要上传代码到服务器对微信公众平台进行接口调试,十分的不方便。而Ngrok可以将内网映射到一个公网地址,这样就完美的解决了我们的问题。

情况一:无外网域名,使用二级域名

下载:
  • 官网下载地址:https://ngrok.com/download
  • Mac OS: https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-darwin-amd64.zip
  • Linux amd64: https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
  • Windows x64: https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-windows-amd64.zip
  • Linux arm: https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-arm.zip
解压:

在linux或OSX上,使用以下命令解压。在windows下,直接右键

unzip /path/to/ngrok.zip
启动穿透:

可以参照官网文档来自定义配置,也可以通过命令行查看帮助:

./ngrok help

用命令开启http的8010管道(假设我本地服务器开的是8010端口)

./ngrok http 80

情况二:有外网域名,搭建ngrok服务器,映射到本地

环境:
  • 服务器:centos 对外域名:xxxx.abc.com
  • 本地机器:window 运行tomcat应用,端口8015
  • 编译机器:centos (无论服务端软件和客户端软件在window或者linux,都是可以在linux下编译,可以直接选择服务器编译)
编译ngrok服务端&客户端:
  • 安装go get git 工具
yum install mercurial git bzr subversion  golang
  • 获取ngrok源码
GOPATH=~/goproj
mkdir ~/goproj/src/github.com/inconshreveable
cd ~/goproj/src/github.com/inconshreveable
git clone https://github.com/tutumcloud/ngrok.git ngrok
export GOPATH=~/goproj/src/github.com/inconshreveable/ngrok
  • 生成自签名证书
cd ngrok
NGROK_DOMAIN="xxxx.abc.com"
openssl genrsa -out base.key 2048
openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out base.pem
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr
openssl x509 -req -in server.csr -CA base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt
## 复制至源码下
cp base.pem assets/client/tls/ngrokroot.crt
cp server.crt assets/server/tls/snakeoil.crt
cp server.key assets/server/tls/snakeoil.key
  • 编译Linux服务端
make release-server
  • 编译Window客户端
GOOS=windows GOARCH=amd64 make release-client 
# GOOS=linux GOARCH=amd64 make release-client
# GOOS=linux GOARCH=arm make release-client
  • 下载exe到window客户端
cd ~/goproj/src/github.com/inconshreveable/ngrok
sz bin/windows_amd64/ngrok.exe
客户端和服务器 设置域名解析

添加两条记录:xxxx.abc.com和*.xxxx.abc.com,指向所在服务器ip。

服务器运行ngrok服务
./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="xxxx.abc.com" -httpAddr=":8081" -httpsAddr=":8082"
客户端
  • 到ngrok.exe所在目录,创建ngrok.cfg
  • 对ngrok.cfg进行编辑
server_addr: "xxxx.abc.com:8082"
trust_host_root_certs: false
  • 运行客户端
./bin/ngrok -subdomain app -proto=http -config=ngrok.cfg 8015
  • 访问http://app.xxxx.abc.com即可

你可能感兴趣的:(环境部署)