內(nèi)網(wǎng)穿透利器NGROK學(xué)習(xí)筆記

內(nèi)網(wǎng)穿透利器NGROK學(xué)習(xí)筆記

SofM?2019-10-31 14:13:57

內(nèi)網(wǎng)穿透利器NGROK學(xué)習(xí)筆記

2019.10.31 SofM

1. 介紹

10月28號,某客戶內(nèi)網(wǎng)虛擬機(jī)服務(wù)出現(xiàn)故障,云計算中心工程師是在得到用戶的報障后進(jìn)行的處理。雖然,云計算中心工程師具有高度的責(zé)任心以及快速的問題處理能力,但是監(jiān)控體系的部署使我們進(jìn)一步提升服務(wù)質(zhì)量的目標(biāo)。

因此,為了更及時的發(fā)現(xiàn)客戶系統(tǒng)中的異常,避免因系統(tǒng)服務(wù)對用戶造成使用上的影響,于是安裝部署了Nagios監(jiān)控。但是,由于該機(jī)器深入內(nèi)網(wǎng),并與我們的辦公網(wǎng)進(jìn)行了網(wǎng)絡(luò)隔離,雖然能夠發(fā)出報警郵件,但是及時查看Nagios的管理頁面有一定困難。

經(jīng)過大家討論,可以借助ngrok這一軟件的功能,提供靈活地服務(wù)轉(zhuǎn)發(fā)或者內(nèi)網(wǎng)穿透服務(wù)。

2. 原理介紹

ngrok整個系統(tǒng)由如下四部分組成:

ngrokd服務(wù):服務(wù)端,開放4443端口作為管理端口,用于ngrok之間的管理通信,并且開放http以及https服務(wù)端口。

ngrok程序:客戶端,該客戶端可以使用ngrok程序向ngrokd服務(wù)端發(fā)起驗(yàn)證,并將其代理的http或者其他服務(wù)進(jìn)行ngrokd代理。

業(yè)務(wù)服務(wù)端:和ngrok程序部署在同一臺機(jī)器,或者和ngrok運(yùn)行程序的主機(jī)在同一網(wǎng)絡(luò)中,或者網(wǎng)絡(luò)可達(dá)。

業(yè)務(wù)訪問端:訪問業(yè)務(wù)服務(wù)的客戶。

組成

Client與Server建立一個scoket連接,然后發(fā)送一個Auth請求,Server驗(yàn)證后,返回AuthResp。

接著Client發(fā)送ReqTunnel像服務(wù)器注冊通道,比如,HTTP,HTTPS,TCP,其中包含想要申請的二級域名,服務(wù)器返回NewTunnel,如果Client的二級域名請求為空,服務(wù)器會隨機(jī)分配。

Ngrokd Server等待瀏覽器,APP等客戶端的訪問,當(dāng)有APP訪問,Server會檢查二級域名是否是已經(jīng)注冊了的。如果是,則發(fā)送ReqProxy給Client;Client收到請求后會創(chuàng)建一個新的Socket連接到Server,并發(fā)送RegProxy請求;服務(wù)器收到后,返回StartProxy,并開始使用新的Socket連接做中繼。

原理

3. 實(shí)驗(yàn)步驟

3.1. 準(zhǔn)備實(shí)驗(yàn)環(huán)境

1、ngrokd服務(wù)

一臺阿里云服務(wù)器

2、ngrok程序

自己的PC上,運(yùn)行Win10系統(tǒng)

3、業(yè)務(wù)服務(wù)端

自己的PC上,通過Everything建立一個HTTP服務(wù)

4、業(yè)務(wù)訪問端

手機(jī)網(wǎng)頁瀏覽器

5、域名

sofm.xyz

3.2. Ngrok服務(wù)端部署編譯環(huán)境

1、安裝git

yum install git

2、安裝go

wget https://studygolang.com/dl/golang/go1.8.linux-amd64.tar.gz

tar -zxvf go1.8.linux-amd64.tar.gz

3、配置go

export GOROOT=你的go語言解壓地址

export PATH=$PATH:$GOROOT/bin

source /etc/profile

go version

3.3. Ngrok服務(wù)端部署ngrokd服務(wù)

1、創(chuàng)建一個ngrok目錄

mkdir /usr/local/ngrok

cd /usr/local/ngrok

2、下載源碼

git clone https://github.com/inconshreveable/ngrok.git

3、配置證書

NGROK_DOMAIN=“自己的域名”

openssl genrsa -out base.key 2048

openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out base.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 base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt

4、拷貝證書到目的地

cp base.pem assets/client/tls/ngrokroot.crt

5、編譯程序

# 編譯會持續(xù)5分鐘,編譯完成后,會在ngrok目錄的bin目錄生成ngrok和ngrokd兩個文件

make release-all

6、運(yùn)行命令

./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain=”sofm.xyz” -httpAddr=“:18080”-httpsAddr=“:18090”

7、防火墻端口放行

需要在阿里云虛擬機(jī)的安全組里,開放4443、18080、18090三個TCP端口。

ngrokd運(yùn)行示意圖

3.4. 域名解析配置

我們需要配置兩個域名解析。

A記錄名稱

A記錄解析

1、A記錄名稱@A記錄解析47.104.144.68

A記錄名稱*A記錄解析47.104.144.68

3.5. Ngrok Client端程序生成

1、進(jìn)入目錄

cd /usr/local/ngrok

2、生成windows客戶端

GOOS=windows GOARCH=amd64 make release-client

# 生成的程序在/usr/local/ngrok/bin/windows_amd64/ngrok.exe

3、生成linux客戶端

GOOS=linux GOARCH=amd64 make release-client

3.6. Ngrok Client程序配置與運(yùn)行

1、拷貝

/usr/local/ngrok/bin/windows_amd64/ngrok.exe程序拷貝到PC上。

2、在ngrok.exe目錄里配置ngrok.cfg文件

server_addr: "sofm.xyz:4443"

trust_host_root_certs: false

3、在ngrok.exe目錄里建立start.bat腳本

@echo on

cd %cd%

ngrok -config=ngrok.cfg -log=ngrok.log -subdomain=www 80

4、運(yùn)行

直接雙機(jī)start.bat文件

ngrok運(yùn)行情況示意圖

3.7. 業(yè)務(wù)服務(wù)端配置Everything HTTP服務(wù)

打開Everything軟件,在工具-選項(xiàng)中,配置HTTP服務(wù),并配置用戶名和密碼。

everything HTTP

3.8. 業(yè)務(wù)訪問端測試業(yè)務(wù)訪問

正常訪問

4. 總結(jié)

安全組一定要打開。遇到了好幾次,配置沒有啥問題,但是ngrok程序始終無法連接ngrokd成功。

域名解析一定要解析對。除了新增*的A記錄外,也要新增@的A記錄。@的意思是sofm.xyz的解析。

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

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