利用ngrok做内网穿透 解决本地进行微信开发无法调试难题

0 评论
/ /
1287 阅读
/
4728 字
02 2018-07

最近做微信开发,刚好之前买的内网穿透过期了, 续费太贵,又恰好自己有一台做vpn的香港服务器 于是便有了自己搭建内网穿透的想法,

于是 便有了这篇文章

看看效果图:

利用ngrok做内网穿透 解决本地进行微信开发无法调试难题

 

环境 : Ubuntu 16.04 64位

卸载 已安装的go

sudo apt-get purge golang*

进入

sudo mkdir -p /var/ngrok

cd /var/ngrok

安装go1.8

创建go18存放go文件

mkdir go18

cd go18/

下载go1.8

sudo curl -O https://storage.googleapis.com/golang/go1.8.linux-amd64.tar.gz

解压go1.8

sudo tar zxvf go1.8.linux-amd64.tar.gz

移动go到环境变量目录下

sudo mv go /usr/local/

编辑文件 profile

sudo vim /etc/profile

再最后输入:

export GOROOT=/usr/local/go

export PATH=$PATH:$GOROOT/bin

查看go是否安装成功

利用ngrok做内网穿透 解决本地进行微信开发无法调试难题

 

go version

利用ngrok做内网穿透 解决本地进行微信开发无法调试难题

 

二、安装 git

apt-get update

apt-get install git

三、下载(克隆)ngrok源码

cd /var/ngrok

git clone https://github.com/inconshreveable/ngrok.git ngrok

四、生成证书

把 下面命令中的 ct.16e.me 改成您自己的域名 ,这里也可以用 letsencrypt的免费证书,

这里说明一点:如果你没有https的需求,仅仅用http 如果用letsencrypt反而麻烦(个人感觉),因为你几个月都要去续签一次,自签的则不需要

mkdir /var/ngrok/cert

cd /var/ngrok/cert

openssl genrsa -out rootCA.key 2048

openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=ct.16e.me" -days 5000 -out rootCA.pem

openssl genrsa -out server.key 2048

openssl req -new -key server.key -subj "/CN=ct.16e.me" -out server.csr

openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000

五、复制证书到 ngrok

客户端证书

cp rootCA.pem /var/ngrok/ngrok/assets/client/tls/ngrokroot.crt

服务端证书

cp server.crt /var/ngrok/ngrok/assets/server/tls/snakeoil.crt

cp server.key /var/ngrok/ngrok/assets/server/tls/snakeoil.key

如果用 letsencrypt

客户端证书

cp /etc/letsencrypt/live/ct.16e.me/chain.pem /var/ngrok/ngrok/assets/client/tls/ngrokroot.crt

服务端证书

cp /etc/letsencrypt/live/ccce.top/cert.pem /var/ngrok/ngrok/assets/server/tls/snakeoil.crt

cp /etc/letsencrypt/live/ccce.top/privkey.pem /var/ngrok/ngrok/assets/server/tls/snakeoil.key

这里提示:证书一定要和你做内网穿透用的域名一致,否则将无法链接

六、去解析域名,选择 A记录 主机值如:

第一条: ct 地址为自己服务器的ip

第二条: *.ct (即第一条的泛解析) 地址为自己服务器的ip

cd /var/ngrok/ngrok

七、编译服务端

make release-server

文件会放到 /var/ngrok/ngrok/bin/下 名字是 ngrokd

启动:

/var/ngrok/ngrok/ngrokd -domain="ct.16e.me" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":8848" -log=none -log-level=ERROR

:80为 监听的【服务器】 http端口 :443为http端口 :8848为 ngrokd 和 ngrok 客户端的通信端口

提示:如果上述端口已被占用,可以更换其它端口,或使用nginx转发 , 如果是阿里云(我的是)腾讯云 需要再安全策略中开放对应端口 (入方向 tcp 80 )

八、编译客户端:

由于客户端种类很多,所以自己试试编译哪一个可以使用(只需要再 /var/ngrok/ngrok 目录执行下面的对应命令 即可再 bin目录下看到客户端文件 ngrok 下载到本地使用)

#32位 linux 我的开发机是 linux 64位的 这个可用

GOOS=linux GOARCH=386 make release-client

64位 linux 但我用不了,百度也没找到答案

GOOS=linux GOARCH=amd64 make release-client

32位 windows

GOOS=windows GOARCH=386 make release-client

64位 windows

GOOS=windows GOARCH=amd64 make release-client

九、客户端启动方法:

建立一个文件 命名问 ngrok.cfg

输入:

server_addr: "ct.16e.me:8848"

trust_host_root_certs: false

ct.16e.me:8848换成自己的

启动:

./ngrok --config ngrok.cfg -subdomain fwechat 127.0.0.1:80

fwechat 为子域名

启动后访问 fwechat.ct.16e.me

127.0.0.1:80 监听本地的 80端口

本地多个虚拟主机的情况,请把 fwechat.ct.16e.me 绑定到本地虚拟主机的对应位置。

否则 你已访问就自动定位到第一个本地虚拟主机上

说明:

本文用的是 1.7开源版本,从 1.7之后ngrok就不再开源了,毕竟没有资金是无法运转的。1.7之后的使用方法和1.7差不多

如果你觉着太麻烦,直接使用natapp,他们提供的域名都是备案了的,速度快又便宜