最近做微信开发,刚好之前买的内网穿透过期了, 续费太贵,又恰好自己有一台做vpn的香港服务器 于是便有了自己搭建内网穿透的想法,
于是 便有了这篇文章
看看效果图:
环境 : 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是否安装成功
go version
二、安装 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,他们提供的域名都是备案了的,速度快又便宜