目录
1.安装前置软件
安装git
#安装命令
yum -y install git
2.go语言环境
1.安装go语言并解压到/usr/local/目录下,目录可以自己换别的,go语言版本也可以换高级点的
wget https://storage.googleapis.com/golang/go1.12.0.linux-amd64.tar.gz
tar -C /usr/local/ -zxvf go1.12.0.linux-amd64.tar.gz
2.配置go语言的环境变量
1)打开配置文件
vi /etc/profile
2)在最下面新增以下代码
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
3)重新加载配置文件
source /etc/profile
3)验证go是否安装成功
go version
结果显示版本信息就表示安装成功
[root@localhost bin]# go version
go version go1.12.0 linux/amd64
3.下载Ngrok
1)使用大佬已处理好依赖的ngrok文件
下载下来会有一个ngrok文件夹,里面有ngrok压缩包,此时将这个ngrok下载到/usr/中,后面解压后就没用了,可以删除这里下载的ngrok文件夹
cd /usr/
git clone https://github.com/haungjianli/ngrok
2)解压里面的ngrok压缩包
这里解压的ngrok是真正的ngrok文件
tar -C /usr/local/ -zxvf ./ngrok.tar.gz
4.详细配置
1)创建证书
使用域名和IP地址两种方式创建证书时配置有部分不同
①使用域名时
#进入ngrok目录
cd /usr/local/ngrok
#使用openssl创建证书
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=ngrok.site"-days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=ngrok.site"-out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
②使用公网IP地址时
#进入ngrok目录
cd /usr/local/ngrok
#证书(使用IP地址时必须要配置这一行):echo subjectAltName = IP:36.134.235.178 > extfile.cnf
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=xx.xx.xx.168"-days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=xx.xx.xx.168"-out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000 -extfile extfile.cnf
2)复制并覆盖到 assets 构建的时候自动引用
yes|cp rootCA.pem assets/client/tls/ngrokroot.crt
yes|cp device.crt assets/server/tls/snakeoil.crt
yes|cp device.key assets/server/tls/snakeoil.key
3) 生成服务端与客户端
根据自己服务器与客户端的操作系统选择命令。
<!--linux服务端/客户端-->
GOOS=linux GOARCH=386 make release-server (32位)
GOOS=linux GOARCH=amd64 make release-server(64位)
GOOS=linux GOARCH=386 make release-client (32位)
GOOS=linux GOARCH=amd64 make release-client(64位)
<!--Mac OS服务端/客户端-->
GOOS=darwin GOARCH=386 make release-server
GOOS=darwin GOARCH=amd64 make release-server
GOOS=darwin GOARCH=386 make release-client
GOOS=darwin GOARCH=amd64 make release-client
<!--windows服务端/客户端-->
GOOS=windows GOARCH=386 make release-server
GOOS=windows GOARCH=amd64 make release-server
GOOS=windows GOARCH=386 make release-client
GOOS=windows GOARCH=amd64 make release-client
4)启动服务端
#进入到bin目录
cd /usr/local/ngrok/bin
#启动(如果是域名,则把domain中的IP换成域名)./ngrokd -domain="xx.xx.xx.168"-httpAddr=":80"-httpsAddr=":443"-tunnelAddr=":4443"
如果需要后台启动
#后台启动命令
nohup ./ngrokd -domain="xx.xx.xx.168"-httpAddr=":80"-httpsAddr=":443"-tunnelAddr=":4443" & >/dev/null 2>&1 &
端口可以自行设置
①httpAddr是 http的端口,默认80,
②httpsAddr是 https的端口,默认443,
③tunnelAddr是 客户端连接ngrok的端口,默认设置4443
5)启动客户端
以windows为例:
把/bin/windows_amd64/ngrok.exe文件传输到本地。
然后在当前目录下新建文件ngrok.cfg,注意与ngrok.exe在相同目录下。
server_addr:"xx.xx.xx.xx:4443"trust_host_root_certs:false
此处xx.xx.xx.xx需要写服务端所在的IP或者域名,4443为之前设置的tunnelAddr端口
新建脚本start.bat
①直接启动(IP方式或者直接使用服务端配置的域名)
ngrok -config=ngrok.cfg -log=ngrok.log 8080
8080就是本地需要穿透的端口
norok.log 就是日志的日志的名称
②使用子域名方式启动
ngrok -config=ngrok.cfg -log=ngrok.log -subdomain=xxx 8080
-log不是必须的,可以删除-log
双击start.bat即可。
如果是以IP地址来穿透,会出现穿透后地址为 xxxxxx.36.134.235.178:80 这种情况,此时无法成功访问,解决办法看最后的问题与解决方案
5.问题与解决方案
1.使用IP地址穿透时,穿透成功的链接地址为xxxxxx.36.134.235.178这种时。
去掉随机生成的 subdomain
ngrok 客户端会自动生成一个随机子域名或者用户自定义一个,总之无论如何都会有一个域名,这就会导致 ip 域名无效, 例如http://41254wg5.36.134.235.178 -> localhost:80, 解决办法就是改源码,去掉随机生成的 subdomain。代码地址:src/ngrok/server/tunnel.go 第89 行
// src/ngrok/server/tunnel.go #89 行// Register for random URL
t.url, err = tunnelRegistry.RegisterRepeat(func()string{return fmt.Sprintf("%s://%x.%s", protocol, rand.Int31(), vhost)}, t)
修改后:
return fmt.Sprintf("%s://%s", protocol, vhost)
注意: 删掉 %x. ,rand.Int31(), 以及该文件第一行引入的 math/rand,重新编译出服务端与客户端即可。这样不加 -subdomain 选项就不会有子域名。
重新生成服务端与客户端,再启动
2.生成服务端与客户端时发生错误
go get ngrok/…: malformed module path “ngrok”: missing dot in first path element
make: ***[Makefile:8: deps] Error 1
进入环境配置文件,新增配置
vi /etc/profile
export GO111MODULE=off
重新载入配置文件
source /etc/profile
版权归原作者 学徒级选手 所有, 如有侵权,请联系我们删除。