linux部署ngrok服務端實現內網穿透

最近公司空出來幾臺主機,於是乎我就把他們都安裝了centos,想着替換掉阿里雲上的dev和test環境省點錢,於是乎在內網服務器上部署好了環境和應用後,測試人員想通過公網在家測試。哎,沒辦法,作爲一個愛替別人着想的後端,我準備研究搭建一下ngrok做個內網穿透,廢話不說,搭建過程記錄下來

 首先簡單介紹一下ngrok的工作原理(我的理解):要想讓ngrok替你完成內網穿透,你需要配置並安裝服務端,服務端需要被安裝在一個具有公網IP的服務器上。然後通過服務端的配置文件和證書,生成你需要使用的客戶端(必須通過服務端搭配配置來生成,否則客戶端會不好用)。然後將客戶端複製在你想使用的終端上,通過配置文件,運行客戶端,讓客戶端與服務端完成通訊,從而映射到你安裝客戶端的本地應用上。

 一. 準備工作

①首先要有一臺公網IP的服務器。我這裏使用的是阿里雲ESC雲服務器。

②要有一個域名,最好是備過案的。然後將域名解析到你的公網服務器IP中。

    解析時需要注意,如果你想使用的是一級域名給ngrok,例如xxx.com,則你需要解析兩個A記錄值:@和*兩個記錄值

    如果你想使用的是二級域名給ngrok,例如mmm.xxx.com,則你需要解析兩個A記錄值:mmm.xxx.com本身和*.mmm.xxx.com兩個

③需要完成內網穿透的服務器,哈哈哈(這是一句廢話)

④在部署ngrok服務端的機器上安裝go語言環境與git,並通過git將ngrok的源碼下載下來(也可以手動下載,然後複製在相應位置,害,太麻煩了):

   安裝go環境:

cd /usr/local
wget https://dl.google.com/go/go1.11.linux-amd64.tar.gz
tar -zxvf go1.11.linux-amd64.tar.gz
環境變量(vim /etc/profile)

export GOROOT=/usr/local/go
export PATH=$GOROOT/bin:$PATH
export NGROK_DOMAIN="你的域名"

更新環境變量:source /etc/profile

查看go環境安裝是否成功:go version

安裝git

# 下載新版本git (版本列表 https://www.kernel.org/pub/software/scm/git/)  
cd /usr/local  
wget https://www.kernel.org/pub/software/scm/git/git-2.16.2.tar.gz  

# 解壓  
tar zxvf git-2.16.2.tar.gz  

# 編譯git  
cd git-2.16.2  
./configure --prefix=/usr/local/git  
make  
make install  

#刪除剛纔下載的git包
cd /usr/local
rm git-2.16.2.tar.gz -y

或者:

安裝 git
yum install git

#注意git版本應大於1.7.9.5

#下載ngrok源碼包
cd ~
git clone https://github.com/inconshreveable/ngrok.git
cd ngrok/

 

克隆ngrok代碼到本地

cd /usr/local/  
git clone https://github.com/inconshreveable/ngrok.git

二. 配置ngrok服務端 

進入到ngrok的路徑

cd /usr/local/ngrok

以下操作均在該路徑下完成

①生成ngrok服務端證書:

cd /usr/local/ngrok
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 server.key 2048  
openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr  
openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000 

②將生成的證書替換默認的證書文件:

過程會讓你輸入y 回車
cp rootCA.pem assets/client/tls/ngrokroot.crt 
cp server.crt assets/server/tls/snakeoil.crt 
cp server.key assets/server/tls/snakeoil.key

③根據證書生成編譯完成服務端和客戶端

生成Linux服務端和Linux客戶端:生成後在bin路徑下

make release-server release-client

編譯生成Windows客戶端:

GOOS=windows GOARCH=amd64 make release-client

生成後客戶端在ngrok/bin/windows_amd64

編譯生成Mac版本客戶端:

GOOS=darwin GOARCH=amd64 make  release-client

④啓動ngrok服務端

./bin/ngrokd -domain="你的域名" -httpAddr=":80" -httpsAddr=":443"
#後臺一直運行,並輸出日誌到指定文件
nohup ./bin/ngrokd -domain="你的域名" -httpAddr=":80" -httpsAddr=":443" ->  ngrok.log &

三. 配置客戶端

 

①將編譯生成的window版客戶端下載保存到本地D:ngrok/,然後同路徑下創建ngrok的配置文件ngrok.cfg

配置文件內容如下:

tunnels表示隧道的意思就是下面的都是我需要進行穿透的東西

matsc和pms是需要進行穿透的配置別名

進行穿透可以有兩種方式,比如ngrok服務端設置的域名是xxx.com,則可以通過子域名和端口的方式完成穿透:xxx.xxx.com或者xxx.com:15000。以下配置文件中,remote_port是通過端口的方式,例如下面配置,穿透出來就是xxx.top:15001穿透到了內網192.168.1.153:3389

subdomain是通過子域名的方式穿透,下面配置翻譯過來就是:pms.xxx.top穿透到了內網127.0.0.1:8083

server_addr: "xxx.top:4443"
trust_host_root_certs: false
tunnels:
  mstsc:
    remote_port: 15001
    proto:
      tcp: "192.168.1.153:3389"
  pms:
    subdomain: "pms"
    proto:
      http: "127.0.0.1:8083"

②打開cmd命令提示符,路徑切換到ngrok.exe所在路徑,執行命令:

ngrok.exe -config=ngrok.cfg start pms

此時就啓動了pms配置的穿透服務

成功的截圖如下:

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章