使用 ngrok 来实现“局域网”
CS配置:https://jingyan.baidu.com/article/48b558e32c91b77f38c09aa7.html
此博文只是简单记录一下博主搭建 ngrok 的经历,并不能保证一定成功,毕竟会遇到各种未知情况,仅提供给师兄师弟们参考
自己的服务器,TX的,最垃圾配置,自己的 .me 域名
域名这块有个坑,自己的域名必须是泛解析
服务器系统 CentOS7
1. 安装GCC和依赖包
如果安装过了 可以跳过步骤
sudo yum -y install gcc glibc-devel
2. 安装Git
如果已安装,跳过
sudo yum -y install git
3. 安装Golang编译环境
这里我遇到一个坑(由于博主是主搞 Java 的所以不太懂 Go),在 1.4 版本后的 Go 环境源码,编译环境也必须是 Go。可能我表达不清楚,反正大概意思就是在1.4版本前,golang环境源码可以使用gcc编译,在1.4版本后,源码要使用 go 编译,自己编译自己源码!当然 1.4 版本后的golang源码也可以使用 gcc 编译,但是如果新 go 环境源码使用 gcc 编译后,go 的特色“编译成其他平台可执行文件”就无法成功了,我不知道说得对不对,反正这坑我搭建的时候是遇上了...
我只是用 go 编译一下 ngrok 源码,所以安装的是 老版本 go1.4.2 环境
wget https://storage.googleapis.com/golang/go1.4.2.linux-amd64.tar.gz
#wget https://storage.googleapis.com/golang/go1.8.linux-amd64.tar.gz
解压并且到 go 的 src 目录下执行
#解压
tar -zxvf go1.4.2.linux-amd64.tar.gz
#解压后可以移动到其他地方去
#解压完成后再到 src 目录下执行
./all.bash
配置环境变量
# /usr/local/go1.4 是我解压的目录
export GOROOT=/usr/local/go1.4
export GOBIN=$GOROOT/bin
export GOPATH=/usr/local/gopath
#export GOROOT_BOOTSTARP=/usr/local/go1.4
export PATH=$PATH:$GOPATH:$GOBIN
#变更一下
source ~/.bash_profile
看看是否成功
go version
4. 配置golang多环境编译(交叉编译)
到 go 的 src 目录下执行
GOOS=linux GOARCH=amd64 ./make.bash
GOOS=linux GOARCH=amd64 是我的系统和多少位
不清楚的话使用下面的命令查看
go env
这样执行后是让go编译环境编译出的东西 是在 linux 64位系统上运行的(我猜的 )
32位:GOARCH=386
GOOS=linux GOARCH=amd64
GOOS=darwin GOARCH=amd64 #MACOS
GOOS=windows GOARCH=amd64 #windows
5. Ngrok 配置
git clone https://github.com/inconshreveable/ngrok.git
生证书,生成完后建议保存到一个位置放着
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj '/CN=你的域名' -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj '/CN=你的域名' -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
我这里跟其他博客的有点不一样,他们都是把域名配置到环境变量里面,我觉得没必要所以没配置
复制并替换到 ngrok 的目录下面的证书
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp device.crt assets/server/tls/snakeoil.crt
cp device.key assets/server/tls/snakeoil.key
使用 go 编译 ngrok 服务端 和 客户端
#在 ngrok 目录下执行
GOOS=linux GOARCH=amd64 make release-server release-client
#编译 windows 客户端
GOOS=windows GOARCH=amd64 make release-client
#可以看看本上面的
编译完成后的东西在 go 的 bin 下面 :ngrokd (服务端)和 ngrok (客户端)
windows 的是 windows_amd64 文件夹下 ngrok.exe
配置并启动服务端(Linux)
./ngrokd -domain="你的域名" -httpAddr=":1117" -httpsAddr=":1118" -tunnelAddr=":1119"
#后台启动,具体参阅 nohup 命令
#nohup ./bin/ngrokd -domain="qq.cn" -httpAddr=":1117" -httpsAddr=":1118" -tunnelAddr=":1119" > ~/nohup.out &
启动成功后如图:
配置并启动客户端(windows)
创建一个 ngrok.cfg 文件
server_addr: "你的域名:1119"
trust_host_root_certs: false
tunnels:
http:
subdomain: "banan"
proto:
http: "18080"
https:
subdomain: "banan"
proto:
https: "80"
ssh:
remote_port: 12222
proto:
tcp: "22"
在dos启动
ngrok.exe -log ngrok.log -config ngrok.cfg start http https ssh
Tunnel Status online 表示成功
别人通过http协议访问 “banan.你的域名:1117” 这个地址会自动转到 你本地配置的那个端口
到这里就结束了,本文仅能作为参考,不能保证一定可以成功!(反正我的是配置成功了)
如果配置失败可能的情况:
1. go编译环境没有安装正确
2. 没有正确配置go的环境变量,导致使用 make 命令的时候 仍旧是 gcc 的 make
4. go 的交叉编译环境没有配置好,原因可能不是go1.4或1.4+的版本没有使用go1.4编译
3. go是谷歌的,你懂得
注意:go语言版本的 ngrok 1.7 (我现在安装的就是1.7版)有内存泄漏的bug!
我不知道会不会内存泄漏,都是在全球最大的同性交友网站github上看到的,不过本人不建议长期挂起跑,偶尔跑一跑游戏私服和网站调试还是可以滴,现在已经出现有Python稳定版的了,如果长期想跑建议装Python版的,不过我准备有自己写一个 Java 版的 。