內網穿透之ngrok 編譯佈署

使用場景:主要內網的應用程序,想被公網看到和訪問。如最簡單的我們自己在內網(本地網建一個網站),但又因我們沒有域名和固定的外網IP,這個時候我們可以藉助於花生殼,netapp之類的都可以讓我們的站點通過外網訪問。

下面環境說明:

  有一臺 10網段的(A類)內網機器 ,在外層加了個防火牆,只允許內網訪問外網。不允許外網直接訪問內網中的應用。

ngrok需要一個服務器端和一個客戶端程序。

準備條件:

     1.經國家工信icp備案的域名 如: ngrok.yun.com 。

     2.有一臺啊裏雲主機(公網主機),且有固定IP,如: 47.xx.xx.107  。

     3.將  ngrok.yun.com 解釋到  47.xx.xx.107  這個主機ip

        將  *.ngrok.yun.com 也解釋到  47.xx.xx.107  這個主機ip

     4.在雲主機上安裝 對應操作系統的ngrok服務端程序並以後臺方式運行。(儘量保證開機自啓,程序不掛吧)

     5.在需要被訪問的內網機上安裝一個ngrok客戶端程序。然後進行啓動。

 

生成ngrok的服務端和客戶端程序。如果不想自己編譯啊。就下個NATAPP吧。

下面我用centos 7 進行編譯 生成的過程。

官網:https://ngrok.com/
源碼:https://github.com/inconshreveable/ngrok

yum install git

yum install golang

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

我的路徑:/opt/ngrok/source/ngrok

2.根據域名生成相關的證書。

cd /opt/ngrok/certs
openssl genrsa -out base.key 2048
openssl req -new -x509 -nodes -key base.key -days 90000 -subj "/CN=fcs.xxx.com" -out base.pem
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj "/CN=fcs.xxx.com" -out server.csr
openssl x509 -req -in server.csr -CA base.pem -CAkey base.key -CAcreateserial -out server.crt -days 50000

然後考證書

cp server.crt /opt/ngrok/source/ngrok/assets/server/tls/snakeoil.crt
cp server.key /opt/ngrok/source/ngrok/assets/server/tls/snakeoil.key
cp base.pem /opt/ngrok/source/ngrok/assets/client/tls/ngrokroot.crt

3.進行編譯.

   cd /opt/ngrok/source/ngrok

  編繹服務端。

make release-server

編譯客戶端和服務端。

########################32 位###########################
#win服務端
GOOS=windows GOARCH=386 make release-server 
#win客戶端
GOOS=windows GOARCH=386 make release-client
#linux服務端
GOOS=linux GOARCH=386 make release-server
#linux客戶端
GOOS=linux GOARCH=386 make release-client
#mac 服務端
GOOS=darwin GOARCH=386 make release-server
#mac 客戶端
GOOS=darwin GOARCH=386 make release-client

########################64 位###########################
#win服務端
GOOS=windows GOARCH=amd64 make release-server 
#win客戶端
GOOS=windows GOARCH=amd64 make release-client
#linux服務端
GOOS=linux GOARCH=amd64 make release-server
#linux客戶端
GOOS=linux GOARCH=amd64 make release-client
#mac 服務端
GOOS=darwin GOARCH=amd64 make release-server
#mac 客戶端
GOOS=darwin GOARCH=amd64 make release-client

最後都輸出到 /opt/ngrok/sourc/ngrok/bin目錄下。

4.啓動服務端,把編譯出來的ngrokd 複製到啊裏雲主機上(因爲我本來說是在這臺主機上編譯的,所以就不用考了)。

如果不能後臺啓動:yum install screen 

然後執行 screen -S  取個名。 如 (ngrokkeeplive)

然後cd到/opt/ngrok/source/ngrok執行:

./bin/ngrokd -tlsKey="/opt/ngrok/certs/server.key"
 -tlsCrt="/opt/ngrok/certs/server.crt" -domain="fcs.xxx.com"
 -httpAddr=":7070" -httpsAddr=":7071" -tunnelAddr=":7443"
 > ngrok.log &

domain: 這個一定要注意不要填錯,就是ICP備案那個。

httpAddr爲 http協議的,不填時,默認爲80端口

httpsAddr爲https        不填時,默認爲443端口

tunnelAddr 爲客戶端連接上來的通道監聽端口。

注意我這裏用7070,7071,7443等,因爲我本機上其它程序佔用了 80,443,同樣要記得在啊裏雲上要打開這些端口哦。

5.將不同操作系統的客戶端考到對應的內網機上運行。

在ngrok客戶端相同目錄下。新建一個ngrok.cfg。注意啊一定是cfg後綴文件,在windows上有時候隱藏了後綴,看起來像cfg,實際上是txt。這樣運行的時候,會報錯。

寫的時候注意是yml格式的文件。

server_addr: "fcs.xxx.com:7443"
trust_host_root_certs: false
tunnels:
 socket:
  remote_port: 5077
  proto:
   tcp: 5077

cmd下然後執行(windows)  D:\ng\ngrok  -config=ngrok.cfg start socket

remote_port 這個爲映射的端口。設這個之後,如果連接上服務端口,這個端口就會在服務端被監聽。因此這裏的端口對應的在啊裏雲上也要打開。

proto中的tcp對應的端口,是內網中默認當前客戶端所在機器已經監聽的端口。

如:tcp: "192.168.4.88:8090"    即將啊裏雲讓機上的5077映射到內網192.168.4.88:8090這個地址上。

然後你用socket工具訪問 fcs.xxx.com:5077 時實際上會被ngrok轉發給 192.168.4.88:8090這個地址。從而實現訪問內網。

 

 

 

 

 

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