聲明:本文主要參考以下文章
http://www.itdecent.cn/p/796c3411f8eb
1. 環(huán)境
服務(wù)器:centos 7.x
客戶機(jī):centos 7.x
正常解析的域名:example.com
2.安裝環(huán)境
- 安裝gcc和git(用于下載ngrok源碼)
yum install gcc -y
yum install git -y
- 安裝go語言環(huán)境
yum install -y mercurial git bzr subversion golang golang-pkg-windows-amd64 golang-pkg-windows-386
3.在服務(wù)器上搭建Ngrok服務(wù)
- 下載ngrok源碼
git clone https://github.com/inconshreveable/ngrok.git
- 生成證書
export NGROK_DOMAIN="example.com"
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 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
- 將新生成的證書替換,執(zhí)行下面命令后 “y” 回車 一行一行執(zhí)行代碼!
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp device.crt assets/client/tls/snakeoilca.crt (這一步原作者及網(wǎng)上大部分教程沒有,但是我操作的時(shí)候開始沒加,會(huì)報(bào)證書錯(cuò)誤,卡了好久)
cp device.crt assets/server/tls/snakeoil.crt
cp device.key assets/server/tls/snakeoil.key
[01/13/19 09:55:46] [INFO] [tun:15dd7522] New connection from 54.149.100.42:38252
[01/13/15 09:55:46] [DEBG] [tun:15dd7522] Waiting to read message
[01/13/15 09:55:46] [WARN] [tun:15dd7522] Failed to read message: remote error: bad certificate
[01/13/15 09:55:46] [DEBG] [tun:15dd7522] Closing
4.編譯文件
- 編譯生成ngrokd(服務(wù)端)
GOOS=linux GOARCH=amd64 make release-server
- 編譯生成ngrok(客戶端)
GOOS=linux GOARCH=amd64 make release-client
如果需要編譯其它客戶端,可以修改GOOS參數(shù),如下
在編譯客戶端的時(shí)候需要指明對(duì)應(yīng)的操作系統(tǒng)和構(gòu)架:
Linux 平臺(tái) 32 位系統(tǒng):GOOS=linux GOARCH=386
Linux 平臺(tái) 64 位系統(tǒng):GOOS=linux GOARCH=amd64
Windows 平臺(tái) 32 位系統(tǒng):GOOS=windows GOARCH=386
Windows 平臺(tái) 64 位系統(tǒng):GOOS=windows GOARCH=amd64
MAC 平臺(tái) 32 位系統(tǒng):GOOS=darwin GOARCH=386
MAC 平臺(tái) 64 位系統(tǒng):GOOS=darwin GOARCH=amd64
ARM 平臺(tái):GOOS=linux GOARCH=arm
5. 復(fù)制客戶端程序到客戶機(jī)
scp 用戶名@遠(yuǎn)程ip:/opt/soft/ngrok/bin/ngrok ./ngrok
5.新建客戶端配置文件ngrok.cfg
server_addr: "example.com:4443" ## 4443 默認(rèn)的監(jiān)控端口
trust_host_root_certs: false
tunnels:
http:
subdomain: "www"
proto:
http: "88" ## http 端口 httpAddr=":80"
https:
subdomain: "www"
proto:
https: "443" ## https 端口 httpsAddr=":443"
ssh:
remote_port: 10022
proto:
tcp: "22"
6.啟動(dòng)服務(wù)端
./bin/ngrokd -domain="abc.com" -httpAddr=":88" -httpsAddr=":443" -tunnelAddr=":4443" &
此處端口要與配置文件里的對(duì)應(yīng)
[16:05:23 CST 2018/01/09][INFO] (ngrok/log.(*PrefixLogger).Info:83) [registry][tun] No affinity cache specified
[16:05:23 CST 2018/01/09][INFO] (ngrok/log.Info:112) Listening for public http connections on [::]:88
[16:05:23 CST 2018/01/09][INFO] (ngrok/log.Info:112) Listening for public https connections on [::]:443
[16:05:23 CST 2018/01/09][INFO] (ngrok/log.Info:112) Listening for control and proxy connections on [::]:4443
[16:05:23 CST 2018/01/09][INFO] (ngrok/log.(*PrefixLogger).Info:83) [metrics] Reporting every 30 seconds
7.啟動(dòng)客戶機(jī)服務(wù)
./ngrok -config=ngrok.cfg -log=ngrok.log start-all
## start-all表示啟動(dòng)所有配置,也可以單獨(dú)指定 如 替換成
## ./ngrok -config=ngrok.cfg -log=ngrok.log http https ssh

(以上圖片是借用別人的,懶得重新配置截圖了,因我已經(jīng)配置成后臺(tái)運(yùn)行了)
- online表示成功,否則需要檢查配置文件與啟動(dòng)命令,或者生成證書的域名與配置文件中的域名是否對(duì)應(yīng)
8.后臺(tái)啟動(dòng)
- start.sh腳本,輸入如下信息
- 服務(wù)端
nohup ./bin/ngrokd -tlsKey=device.key -tlsCrt=device.crt -domain="ngrok.liufei1986.com" -httpAddr=:88 -httpsAddr=":443" -tunnelAddr=":4443"
> ngrokd.log 2>&1 &
- 客戶端
nohup ./ngrok -config=ngrok.cfg -log=stdout start-all > ngrok.log 2>&1 &
此處把-log參數(shù)指定為stdout,只要加入該項(xiàng)log預(yù)設(shè),就不會(huì)顯示terminal狀態(tài)圖像,[取而代之]顯示文本形式的狀態(tài)日志,從而可以使用nohup和&組合,少了該項(xiàng)是不可以后臺(tái)運(yùn)行的。