注:本文基于Sunny大大的教程“搭建属于自己的ngrok服务器”改编,适合Debian系统使用
文章链接:http://www.sunnyos.com/article-show-48.html
1.编译环境安装
检查并安装 gcc, make 和 git
apt-get install gcc
apt-get install make
apt-get install git
下载go最新版本
进入网页https://www.golangtc.com/download
32bit系统 对应 386版本
64bit系统 对应 amd64版本
右键对应版本的“本地下载”按钮,复制链接地址
我下载的是1.9.2的linux 32位版本
wget https://www.golangtc.com/static/go/1.9.2/go1.9.2.linux-386.tar.gz
解压并移到/usr/loacl/下
tar -zxvf go1.9.2.linux-386.tar.gz
mv go /usr/local/
由于编译GO 1.6版本以上的需要依赖GO 1.4版本的二进制文件
还需要下载go1.4.2版本
百度网盘:https://pan.baidu.com/s/1pL0Ca4V#list/path=%2Fgo
解压go1.4.2到root文件夹下
cd /root/
tar -zxvf go1.4.2.linux-386.tar.gz
mv go go1.4
2.获取并编译ngrok
cd /usr/local/
git clone https://github.com/inconshreveable/ngrok.git
添加环境变量
假设ngrok使用的域名为ngrok.luziqi.cn
vi /etc/profile
//在最下加入以下两条内容
GOPATH=/usr/local/ngrok/
NGROK_DOMAIN="ngrok.luziqi.com"
//
source /etc/profile
为域名生成证书并拷贝到指定位置
cd 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
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp server.crt assets/server/tls/snakeoil.crt
cp server.key assets/server/tls/snakeoil.key
如果服务器在国内,需要修改文件
vim /usr/local/ngrok/src/ngrok/log/logger.go
//第五行改成
log "github.com/keepeye/log4go"
编译服务端(linux 32bit)
cd /usr/local/go/src
GOOS=linux GOARCH=386 ./make.bash
cd /usr/local/ngrok/
GOOS=linux GOARCH=386 make release-server
编译客户端(windows 64bit)
cd /usr/local/go/src
GOOS=windows GOARCH=amd64 ./make.bash
cd /usr/local/ngrok/
GOOS=windows GOARCH=amd64 make release-client
编译好的内容存放在/usr/local/ngrok/bin下
3.运行ngrok
运行服务端
/usr/local/ngrok/bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":80"
配置和运行客户端
在ngrok.exe的所在目录下创建ngrok.cfg文件,编辑一下内容
假设我服务器下的变量$NGROK_DOMAIN为ngrok.luziqi.com,则
server_addr: "ngrok.luziqi.com:4443"
trust_host_root_certs: false
还可以加入以下内容定义tunnel方便使用
tunnels:
ssh:
remote_port: 8022
proto:
tcp: 192.168.2.211:22
mc:
remote_port: 8200
proto:
tcp: 25565
http:
subdomain: www
proto:
http: 80
打开cmd,cd到ngrok.exe所在目录
映射http端口80,子域名为blog
ngrok.exe -config=ngrok.cfg -subdomain=blog 80
映射tcp端口8888
ngrok.exe -config=ngrok.cfg -proto=tcp 8888
使用tunnel参数映射
ngrok.exe -config=ngrok.cfg start mc