|
ngrok 是一個反向代理,通過在公共的端點(diǎn)和本地運(yùn)行的 Web 服務(wù)器之間建立一個安全的通道。ngrok 可捕獲和分析所有通道上的流量,便于后期分析和重放。這是百度百科上查到的對于ngrok的定義。說白了就是能穿透內(nèi)網(wǎng),把內(nèi)網(wǎng)的機(jī)器映射到外網(wǎng)上,當(dāng)然首先你得有一臺外網(wǎng)的服務(wù)器。
之前ngrok的官方服務(wù)在國內(nèi)是可用的,但是目前是被qiang了,還好ngrok是開源的,我們可以自己搭建。下面我記錄一下在Ubuntu14.04下搭建ngrok的全過程,以備后查。
1.安裝必要的工具
sudo apt-get install build-essential golang mercurial git
2.git得到ngrok的源代碼
git clone https://github.com/tutumcloud/ngrok.git ngrok
cd ngrok
3.制作自己的證書
###使用自己的域名,定義一個變量,我這里用的是一個免費(fèi)域名
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
###復(fù)制基礎(chǔ)的證書到目錄下,以便編譯
cp base.pem assets/client/tls/ngrokroot.crt
4.編譯代碼
sudo make release-server release-client
編譯完成后ngrok/bin 目錄下應(yīng)該有 ngrok、ngrokd 兩個可執(zhí)行文件
5.域名解析
在域名服務(wù)商處,解析到當(dāng)前服務(wù)器上,需要做兩處解析,一個@,一個*的泛解析。

6.測試運(yùn)行服務(wù)端程序
###ngrok/bin目錄下的ngrokd 就是服務(wù)端程序了,指定證書、域名和端口啟動它(證書就是前面生成的,注意修改域名,這里的域名需要和證書生成時候的一樣)
sudo ./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="" -httpAddr=":19892" -httpsAddr=":19957"
###如果有防火墻,需要放行以上兩個端口,同時還需要放行4443端口
###運(yùn)行成功之后,我們在瀏覽器中通過訪問"http://:19892/”或"https://:19957/”如果在瀏覽器中顯示如下信息,則說明服務(wù)器已經(jīng)啟動成功
Tunnel :19892 not found
7.編譯不同版本的客戶端
通過以上的操作我們搭建完成了服務(wù)端。下來需要進(jìn)行客戶端的編譯,linux在之前編譯的ngrok/bin目錄下ngrok文件就是linux的客戶端。
###windows客戶端編譯命令:
###64位:
sudo GOOS=windows GOARCH=amd64 make release-server release-client
###32位
sudo GOOS=windows GOARCH=386 make release-server release-client
###mac客戶端編譯命令:
sudo GOOS=darwin GOARCH=amd64 make release-server release-client
###ngrok/bin 目錄下會多出來一個 darwin_amd64和windows_amd64 目錄,這里的 ngrok 文件就可以拷到相應(yīng)的系統(tǒng)用了
8.啟動服務(wù)端
###在當(dāng)前終端啟動服務(wù)端
sudo ./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="" -httpAddr=":19892" -httpsAddr=":19957"
###在后臺運(yùn)行服務(wù)端
sudo nohup ./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="" -httpAddr=":19892" -httpsAddr=":19957" &
###在后臺運(yùn)行服務(wù)端時候,我們?nèi)绻枰Y(jié)束服務(wù)可以使用如下代碼
ps -A #找到PID
kill xxxid
9.啟動客戶端程序
###復(fù)制相應(yīng)的客戶端程序到本地,在同目錄下創(chuàng)建ngrok.cfg配置文件,根據(jù)自己的情況進(jìn)行配置
server_addr: “:4443”
trust_host_root_certs: false
###然后再控制臺運(yùn)行啟動客戶端代碼,后面跟著的斷口號是本地服務(wù)的端口號,-subdomain的字母是指定的子域名
ngrok -config=ngrok.cfg -subdomain gs 80

在127.0.0.1:4040界面我們可以清楚的看到所有的通過轉(zhuǎn)發(fā)的網(wǎng)絡(luò)請求

10.啟動ngrok的tcp代理服務(wù)
上面說的是啟動http客戶端服務(wù),因?yàn)閔ttp是默認(rèn)的,所以啟動命令不需要指定-proto參數(shù),如果僅僅要啟動客戶端tcp斷口的轉(zhuǎn)發(fā),可以指定-proto=tcp
示例命令如下:
#啟動局域網(wǎng)其他機(jī)器(192.168.0.66)的3389端口轉(zhuǎn)發(fā)
ngrok -config=ngrok.cfg -proto=tcp 192.168.0.66:3389
#啟動本機(jī)的3389端口轉(zhuǎn)發(fā)
ngrok -config=ngrok.cfg -proto=tcp 3389
當(dāng)然這樣啟動TCP端口之后,服務(wù)器給予的TCP端口是隨機(jī)的,如果要指定,就得修改服務(wù)器源碼,指定哪些客戶端請求,服務(wù)器開發(fā)指定的tcp端口
|