最近公司空出來幾臺主機,於是乎我就把他們都安裝了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配置的穿透服務
成功的截圖如下: