前提:
需要域名一个,在域名控制台新建一个ngrok.**.cn的A类域名。
go环境搭建
通过这个url可以很快获取golang源码,然后编译安装就可以了。
cd /usr/local
wget https://storage.googleapis.com/golang/go1.4.2.linux-amd64.tar.gz
tar -C /usr/local -zxf go1.4.2.linux-amd64.tar.gz
在root环境执行下面的命令:
mkdir $HOME/go
echo 'export GOROOT=/usr/local/go' >> ~/.bashrc
echo 'export GOPATH=$HOME/go' >>~/.bashrc
echo 'export PATH=$PATH:/$GOROOT/bin' >>~./bashrc
source $HOME/.bashrc
安装go get工具
yum -y install git bzr subversion mercurial
获取源码:
git clone https://github.com/inconshreveable/ngrok.git
编译
配置环境变量
export NGROK_DOMAIN="ngrok.***.cn"
生成自签名ssl证书
cd ngrok
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -k rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
新生成6个文件:device.crt device.csr device.key rootCA.key rootCA.pem rootCA.srl。
ngrok通过bindata将ngrok源码目录下的assets目录(资源文件)打包到可执行文件(ngrok和ngrokd)中去,assets/clinet/tls和assets/server/tls下分别放着用于ngrok和ngrokd的默认证书文件,我们需要将他们替换成自己生成的:(此步骤必须放在编译可执行文件之前)。
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp device.crt assets/server/tls/snakeoil.crt
cp device.key assets/server/tls/snakeoil.key
设置变量
GOOS=linux GOARCH=amd64
生成客户端和服务端
make release-server release-client
交叉编译生成windows客户端
上述编译过程生成的服务端和客户端都是linux下的,不能在windows下使用。如果想编译生成windows客户端,需要重新配置环境并编译。
进入go目录,进行环境配置
cd /usr/local/go
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash
进入ngrok目录重新编译
cd /root/ngrok
GOOS=windows GOARCH=amd64 make release-server release-client
编译完成后会在bin目录下生成windows_amd64目录,其中包含windows下运行的服务器和客户端程序。
ngrokd服务启动与使用
启动ngrokd服务端
cd ngrok/bin
./ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":80"
结束进程ctrl+c,或者是在后台运行ngrokd。
./ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":80" &
结束进行可以通过ps命令。查找到pid,然后kill掉。
启动ngrok客户端
将生成的ngrok.exe拷贝到本地D盘的新建ngrok文件夹中,然后新建ngrok.cnf文件,并在其中添加如下内容:
server_addr:"ngrok.***.cn:4443"
trust_host_root_certs:false
在windows控制台执行:
ngrok -config=ngrok.cnf -subdomain test 80
回车就可以连接,因为这不是实际搭建的环境,所以就不测。
本文参考:
http://tonybai.com/2015/03/14/selfhost-ngrok-service/
https://blog.ni-co.moe/p/340.html
http://www.tuicool.com/articles/ZraURrq