Ngrok實(shí)現(xiàn)內(nèi)網(wǎng)穿透

聲明:本文主要參考以下文章
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
image.png

(以上圖片是借用別人的,懶得重新配置截圖了,因我已經(jīng)配置成后臺(tái)運(yùn)行了)

  • online表示成功,否則需要檢查配置文件與啟動(dòng)命令,或者生成證書的域名與配置文件中的域名是否對(duì)應(yīng)

8.后臺(tái)啟動(dòng)

  • start.sh腳本,輸入如下信息
  1. 服務(wù)端
nohup  ./bin/ngrokd -tlsKey=device.key -tlsCrt=device.crt -domain="ngrok.liufei1986.com" -httpAddr=:88 -httpsAddr=":443" -tunnelAddr=":4443" 
> ngrokd.log 2>&1  &
  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)行的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容