【docker系列】搭建Ngrok實現內網穿透

  • 2020 年 1 月 16 日
  • 筆記

先來一張效果圖鎮樓

內網穿透是什麼?

內網穿透,即NAT穿透,網路連接時術語,電腦是區域網內時,外網與內網的電腦節點需要連接通訊,有時就會出現不支援內網穿透。就是說映射埠,能讓外網的電腦找到處於內網的電腦,提高下載速度。不管是內網穿透還是其他類型的網路穿透,都是網路穿透的統一方法來研究和解決。

什麼場景下會使用到內網穿透?

上面說的比較官方,我們還是來聊聊實際應用場景,比如你接了一個外單系統,做完了以後老闆想驗貨,這時候大部分無非就2種做法,開遠程讓他看/自己部署到公網的伺服器讓別人看,兩種都很麻煩,費時費力,那麼我們做一個內網穿透,直接讓別人通過外網域名訪問你的本地機器,豈不是很簡單。

還有作為開發人員來講,用內網穿透來做本地調試還是挺方便的,現在第三方對接都是需要公網域名的,比如微信的一些介面,不用內網穿透將會花費很多的時間和精力在調試上。

準備工作

  • 一台公網伺服器
  • 自己的域名,並解析出來一個ngrok伺服器的子域名,小編這裡用的是ngrok.javakhbd.com

PS:本文基於騰訊雲

拉取鏡像

docker pull hteen/ngrok

執行編譯命令,編譯服務端和客戶端

docker run --rm -it -e DOMAIN="ngrok.javakhbd.com" -v /data/ngrok:/myfiles hteen/ngrok sh /build.sh

執行成功截圖

此刻在/data/ngrok目錄下面,你會看到以下文件:

我們生成的客戶端和伺服器在/data/ngrok/bin目錄下

bin/ngrokd                  服務端  bin/ngrok                   linux客戶端  bin/darwin_amd64/ngrok      osx客戶端  bin/windows_amd64/ngrok.exe windows客戶端

啟動伺服器端

由於之前的命令是編譯命令並不是啟動容器,所以我們開始根據剛才下載的鏡像來啟動容器

docker run -idt --name ngrok-server -v /data/ngrok:/myfiles -p 80:80 -p 443:443 -p 4443:4443 -e DOMAIN='ngrok.javakhbd.com' hteen/ngrok sh /server.sh

如果是這些宿主埠被nginx等佔用可以換以下宿主埠,然後自己做映射即可。

客戶端連接

這裡以window客戶端為例。

先將伺服器上編譯好的客戶端下載下來。

創建一個文件ngrok.cfg,作為配置文件,裡面配置如下:

server_addr: "你的ngrok域名:4443埠"  trust_host_root_certs: false

配置文件弄好以後雖然也能通過命令啟動,但是總歸太麻煩了,我們把命令放到start.bat可執行文件,這樣每次要用到內網穿透的時候雙擊就可以了。

ngrok.exe -config  ngrok.cfg -subdomain ceshi localhost:8081

見證效果

話不多說,直接上動圖吧!

– End –