最接地氣的Ngrok服務(wù)器搭建教程

前言:

簡單說一下什么是ngrok:

ngrok是一個內(nèi)網(wǎng)穿透的解決方案,它使得你本地的服務(wù)器可以被局域網(wǎng)外的公網(wǎng)訪問到
ngork有服務(wù)端和客戶端,服務(wù)端運行在公網(wǎng)服務(wù)器,客戶端運行在本地服務(wù)器
ngrok服務(wù)端會建立http和https服務(wù),默認端口80/443,以及供ngrok客戶端連接的服務(wù),默認端口4443

它的工作流程如下:

訪問端輸入域名->DNS->ngrok服務(wù)端->請求映射到ngrok客戶端->客戶端返回響應(yīng)到ngrok服務(wù)端->ngrok服務(wù)端返回響應(yīng)到訪問端

本文環(huán)境:

centos7 64位 (其它環(huán)境請根據(jù)流程自行嘗試)

準備工作:
  1. 一臺公網(wǎng)服務(wù)器
  2. 一個域名,頂級或二級均可

關(guān)于域名:我們聲明兩個概念:一個是基礎(chǔ)域名,可以是頂級或者二級,它用來為ngrok服務(wù)端本身提供外部訪問(ngrok客戶端連接用)。二就是基于基礎(chǔ)域名的二級或者三級域名,它用來映射到你的本地服務(wù)器,我稱它為映射域名。它可以設(shè)置多個,這取決于你的需要。例如 abc.comngrok.abc.com / ngrok2.abc.com,每個映射域名對應(yīng)一個ngrok客戶端

假設(shè)你的域名是 abc.com (全文皆使用此假設(shè))

如果你需要使用頂級域名作為基礎(chǔ)域名,那么請將 abc.com 泛解析到服務(wù)器ip,然后將你需要使用的二級域名通過A記錄解析到服務(wù)器ip,例如 ngrok.abc.com

如果你需要使用二級域名,那么先將你的二級域名 xxx.abc.com 通過A記錄解析到服務(wù)器域名。然后將三級域名(比如 test.xxx)通過CNAME的方式解析到 xxx.abc.com,這次 xxx.abc.com 便成為了客戶端與服務(wù)端的連接域名,test.xxx.abc.com 則是映射域名

下面的教程我們使用 abc.com 作為基礎(chǔ)域名演示,請根據(jù)實際替換域名

一,安裝git和go以及其它依賴
yum install gcc mercurial git bzr subversion golang golang-pkg-windows-amd64 golang-pkg-windows-386 -y

二,下載源碼 (項目早已停止更新,源碼完全固定)
git clone https://github.com/inconshreveable/ngrok.git

完成后會在當前目錄生成ngrok目錄

三,生成證書(默認的證書是 ngrok.com,我們需要改成 abc.com

生成:

cd ngrok  

mkdir cert 

cd cert

export NGROK_DOMAIN="abc.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

替換(提示overwrite輸入y)

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

cp device.crt ../assets/server/tls/snakeoil.crt

cp device.key ../assets/server/tls/snakeoil.key

四:生成服務(wù)端與客戶端

切換回ngrok目錄

以下命令按需生成

<!--linux服務(wù)端/客戶端-->
GOOS=linux GOARCH=386 make release-server (32位)
GOOS=linux GOARCH=amd64 make release-server(64位)

GOOS=linux GOARCH=386 make release-client (32位)
GOOS=linux GOARCH=amd64 make release-client(64位)

<!--Mac OS服務(wù)端/客戶端-->
GOOS=darwin GOARCH=386 make release-server
GOOS=darwin GOARCH=amd64 make release-server

GOOS=darwin GOARCH=386 make release-client
GOOS=darwin GOARCH=amd64 make release-client


<!--windows服務(wù)端/客戶端-->
GOOS=windows GOARCH=386 make release-server
GOOS=windows GOARCH=amd64 make release-server

GOOS=windows GOARCH=386 make release-client
GOOS=windows GOARCH=amd64 make release-client

所有程序都將生成在bin目錄中,不同平臺將建立不同的子目錄

(當我生成linux 64位程序時,會直接保存在bin目錄下無子目錄。所以我個人推測,如果生成是當前系統(tǒng)的程序,則無子目錄,直接存放于bin目錄下。各位若有條件可驗證下)

目錄中,ngrok是客戶端,ngrokd是服務(wù)端

linux
bin/linux_386
bin/linux_amd64

mac os 
bin/darwin_386 
bin/darwin_amd64 

windows
bin/windows_386
bin/windows_amd64

啟動服務(wù)器:

./bin/ngrokd -domain="$NGROK_DOMAIN"

其它配置:

-httpAddr=":80" http服務(wù)的訪問端口 默認80

-httpsAddr=":443" https服務(wù)的訪問端口 默認443

-tunnelAddr=":4443" 客戶端連接服務(wù)端的端口 默認4443

以上端口,如若與系統(tǒng)其他服務(wù)有沖突,開啟服務(wù)時請自行配置其他端口,同時記得配置防火墻

五:客戶端配置與連接

通過sz或者ftp等方式將ngrok下載到你需要使用客戶端的電腦中

新建配置文件ngrok.cfg

<!--配置服務(wù)端連接地址,也就是基礎(chǔ)域名。端口則與服務(wù)端-tunnelAddr配置相同-->
server_addr: "abc.com:4443"  
trust_host_root_certs: false

運行客戶端

ngrok -config=ngrok.cfg -subdomain ngrok 80 

-subdomain用來指定域名的前綴(也就是映射域名的前綴),如上設(shè)置ngrok,當訪問ngrok.abc.com時,ngrok服務(wù)端接收到請求后,便會將客戶端http相應(yīng)返回給訪問端。80用來指定本地http服務(wù)的端口

此時,ngrok服務(wù)便搭建完成

以上,如有問題,歡迎提問。如有錯誤,也歡迎指出,謝謝

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

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

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