写在前面
如果你只是需要穿墙工具,并且是自己架设服务器的话,不要用ngrok了,这个是我研究Ngrok用法一个星期之后的教训,直接用frp既简单又方便,ngrok基本无法配置多端口,自己架设服务器,我是没有整明白,不知道作者是什么脑回路,没开放一个端口好像就得运行一个服务端,客户端可以配置。总之,要用穿墙服务直接用frp吧,frp就是在ngrok的基础上重新开发的
ngrok是内网穿透的一个工具,支持http、tcp协议,构建过程出现了点问题
最总解决办法:找了有80,443,端口的机子试了下,然后再查看帮助,ngrok -h,更改端口,发现一切正常
客户端开始运行是显示的是127.0.0.1:端口,连接成功后才显示域名–>127.0.0.1:端口
上面图是我用processon画的服务运行原理图,可以看到其实ngrok就像是反向代理服务器
如何搭建自己的ngrok服务器,详细可以看github上的ngrok项目里的doc文件夹里面的文档和README文件:
- 配置好环境,git,go(参考的博客是基于1.42的基础上的,所以推荐安装1.42,
其他版本没试过,实际上高于1.42的是可以的) - 按照步骤配置
下载ngrok源码
1
2
3
4cd /usr/local/
git clone https://github.com/inconshreveable/ngrok.git
export GOPATH=/usr/local/ngrok/
export NGROK_DOMAIN="jame-zhang.tops" #改成自己的域名生成证书
1
2
3
4
5
6cd ngrok #进入源码的文件夹里面
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配置自己的证书到项目里面
1
2
3cp rootCA.pem assets/client/tls/ngrokroot.crt
cp server.crt assets/server/tls/snakeoil.crt
cp server.key assets/server/tls/snakeoil.key指定编译环境变量,如何确认GOOS和GOARCH,可以通过go env来查看
编译服务端:1
2
3
4cd /usr/local/go/src
GOOS=linux GOARCH=386 ./make.bash
cd /usr/local/ngrok/
GOOS=linux GOARCH=amd64 make release-server
编译mac客户端:1
2
3
4cd /usr/local/go/src #这步很重要,需要先编译,再生成,否者报错
GOOS=darwin GOARCH=amd64 ./make.bash
cd /usr/local/ngrok/
GOOS=darwin GOARCH=amd64 make release-client
编译windows客户端:1
2
3
4cd /usr/local/go/src #这步很重要,需要先编译,再生成,否者报错
GOOS=windows GOARCH=amd64 ./make.bash
cd /usr/local/ngrok/
GOOS=windows GOARCH=amd64 make release-client
- 客户端配置文件
文件名:ngrok.cfg1
2server_addr: "example.com:4443"
trust_host_root_certs: false
服务端启动
1
/usr/local/ngrok/bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":80"
客户端启动
1
2/ngrok -config=./ngrok.cfg -subdomain=blog 80
setsid ./ngrok -config=./ngrok.cfg -subdomain=test 80 #在linux下如果想后台运行
几点注意事项
- 为了避免防火墙问题导致转发失败,推荐直接用关闭防火墙的vps进行测试和布置,在你测试成功后再更改对应的端口;
- 某位大神跟我说ngrok有内存泄露问题,不会回收释放内存,实际情况还没有验证,所以推荐使用frp。
ngrok内存泄露问题
ngrok替代品
frp
参考: