内网穿透服务器ngrok网上有现成的ngrok服务器,如下:
ngrok官网:https://ngrok.com/
国外版,自定义二级域名功能已收费.
sunny-ngrok:https://www.ngrok.cc/
国内版,只需要绑定隧道id即可使用,网速较快。
ittun-ngrok:https://www.ittun.com/
小米球Ngrok:http://ngrok.ciqiuwl.cn/
自建国内免费Ngrok服务器,免费共享使用, 支持一键启动和https.
但是世界上没有免费的午餐,要不就是收费,要不就是免费但是偶尔会出现连接失败的问题(当然大多数时间是没有问题的)。
正在测试微信的某些功能,但是正在使用的ittun-ngrok连接失败了。导致测试无法进行,最终萌生出自己搭建一个ngrok服务器的想法。
1、必要条件
(1)服务器,用来搭建ngrok的服务器,必须有公网ip,并且可以正常访问(本次测试使用的是Ubuntu 16.04 64位)。
(2)域名,用来生成访问域名。
2、安装git 和Golang
Golang,Go语言支持,因为Ngrok是基于Go语言编写的,安装git 和Golang.
apt-get install build-essential golang mercurial git
3、编译ngrok
下载源码,当然也可以不安装git,但是需要手动上传代码到需要的位置。
cd /usr/local/
git clone https://github.com/inconshreveable/ngrok.git
export GOPATH=/usr/local/ngrok/
export NGROK_DOMAIN="ngrok.xiaomiqiu.cn"(*此处改为你自己的域名即可)
cd ngrok
4、为域名生成自签名证书
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.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 rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000
5、编译服务端
cd /usr/local/go/src
GOOS=linux GOARCH=amd64 ./make.bash
cd /usr/local/ngrok/
GOOS=linux GOARCH=amd64 make release-server
编译成功后会在bin目录下找到ngrokd和ngrok这两个文件。其中ngrokd 就是服务端程序了。
6、编译客户端
6.1 适用于mac os 64位操作系统
cd /usr/local/go/src
GOOS=darwin GOARCH=amd64 ./make.bash
cd /usr/local/ngrok/
GOOS=darwin GOARCH=amd64 make release-client
6.2 Windows的客户端编译
cd /usr/local/go/src
GOOS=windows GOARCH=amd64 ./make.bash
cd /usr/local/ngrok/
GOOS=windows GOARCH=amd64 make release-client
7、启动服务端
./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="weixin.yangjiace.xyz" -httpAddr=":80" -httpsAddr=":443"
httpAddr、httpsAddr 分别是 ngrok 用来转发 http、https 服务的端口,可以随意指定。ngrokd 还会开一个 4443 端口用来跟客户端通讯(可通过 -tunnelAddr=”:xxx” 指定)。由于微信限制不能出现端口号,因此这个使用了80、443端口。
8、本地客户端
(1)配置文件ngrok.cfg
server_addr: "weixin.yangjiace.xyz:4443"
trust_host_root_certs: false
(2)启动脚本startup.bat
@echo on
cd %cd%
#ngrok -proto=tcp 22
#ngrok start web
ngrok -config=ngrok.cfg -log=ngrok.log -subdomain=yjc 8080
其中,-config指向配置文件,-log存放日志文件位置,-subdomain为自定义的域名前缀。8080为端口号。