為什麼要內網穿透
一般來說,外網要訪問伺服器,那麼這個伺服器必須綁定一個公網ip,現在可以購買的雲端服務器都是這樣。比如個人要在家裡組建伺服器,而且要外網的用戶端可以訪問,這時候問題就出現了
- 問題1:現在一般家裡是沒有外網ip的,ip都是路由好幾層的區域網路ip
- 問題2:就算有外網ip,也是動態ip
準備
- 外網伺服器一台,系統為Ubuntu
- 根網域名稱,需要具有網域名稱的A記錄解析許可權
- 內網測試機器,這裡使用個人windows筆記本
正式工作
網域名稱解析
首先需要一個網域名稱作為ngrok的網域名稱,比如ngrok.example.com,那麼需要把ngrok.example.com和*.ngrok.example.com網域名稱的A記錄解析到外網伺服器。
編譯ngrok
安裝Go環境
ngrok是Go語言開發的,需要安裝Go環境,ubuntu使用 sudo apt install golang
安裝
,安裝完成後使用 go version
驗證是否安裝成功。
下載ngrok源碼
ngrok的官方github地址是:https://github.com/inconshreveable/ngrok ,使用 git clone https://github.com/inconshreveable/ngrok.git
拉取代碼。
產生自我簽署憑證
刪除assets/client/tls
和assets/server/tls
目錄下的所有認證檔案,在ngrok根目錄建立指令碼檔案script,檔案內容為:
將NGROK_DOMAIN替換成自己的ngrok網域名稱
cd /usr/local/ngrokNGROK_DOMAIN="ngrok.example.com"openssl genrsa -out rootCA.key 2048openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pemopenssl genrsa -out device.key 2048openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csropenssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000cp rootCA.pem assets/client/tls/ngrokroot.crtcp device.crt assets/server/tls/snakeoil.crtcp device.key assets/server/tls/snakeoil.key
使用sudo sh script
運行檔案
image.png