沒有公網 IP 的樹莓派玩家如果想在公司或其他地方訪問到家裡的樹莓派,需要藉助
內網穿透 技術,ngrok 就是其中一種比較流行的方案。ngrok 是一個開源的基於反向代理的內網穿透軟件,誕生至今已經 7 年,在國外有官網和服務器,提供免費的穿透服務。
安裝 ngrok
首先,前往 ngrok 官網 https://ngrok.com/download,下載客戶端。如果是樹莓派 4B,可以下載 Linux(ARM64) 版本,如果是樹莓派 3B 及以前的型號,可以下載 Linux(ARM) 版本。
如果你是用自己的電腦下載的 ngrok,則要把下載好的 ngrok zip 文件上傳到樹莓派桌面。上傳方法可以參考 教你用樹莓派遠程桌面和電腦互傳文件 - 硬核樹莓派。
或者直接在樹莓派上執行下載指令:
<code>wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-arm64.tgz/<code>
接著,解壓 ngrok zip 包:
<code>unzip ngrok-stable-linux-arm64.tgz/<code>
解壓完成後,當前目錄下會多出一個 ngrok 文件。這個就是 ngrok 的可執行程序了。
啟動 ngrok 內網穿透
ngrok 執行反向代理的時候會同時啟動一個 4040 端口的監控服務,用於監控網絡連接等情況。我們這裡就先內網穿透到樹莓派本地的 4040 端口,讓我們能從外網打開 ngrok 監控頁面。
首先,執行 ngrok 代理到本地的 4040 端口:
<code>./ngrok http 4040/<code>
指令執行成功後,ngrok 會在屏幕上打印反向代理出來的外網地址:
接著,用瀏覽器打開上面 https://cf0eba4d.ngrok.io/ 這個地址,就能看到 ngrok 的監控頁面。
如果你的樹莓派還運行著其他的服務,都可以用類似的方法代理出來。比如:
- ./ngrok http 80 代理 web 服務
- ./ngrok tcp 22 代理 ssh 服務
自定義外網域名
默認情況下,ngrok 每次啟動都會生成隨機的外網域名,臨時用一下可以。但如果你想有穩定的域名,就需要上 ngrok 註冊賬戶。
首先,登錄 ngrok 官網(https://dashboard.ngrok.com/login)註冊賬戶。
接著,複製 ngrok 的賬戶設置指令,並在樹莓派上執行。這個指令只需要執行一次即可。
然後,加 -subdomain 參數指定子域名啟動 ngrok:
<code>./ngrok http -subdomain=hardcore-rpi 4040/<code>
如果有自己的域名的話,還可以配置 CNAME 到 ngrok 指定的域名,用自己的域名做反向代理。具體操作看官方文檔:https://ngrok.com/docs#http-custom-domains
必須要注意的是,免費賬戶不能“保留”自己的域名。也就是說,-subdomain 指定的子域名可能和別人衝突而導致用不了。所以要麼升級 ngrok 賬戶保留自己的域名,要麼指定一個較長的不容易衝突的子域名。
國內 ngrok 替代服務
由於眾所周知的原因,ngrok.io 這個域名其實不太穩定,偶爾會連不上,所以國內一些玩家或服務商提供了 大陸版 ngrok 替代服務,比如:
- NATAPP基於ngrok的國內高速內網穿透服務
- Ngrok國內免費服務器-小米球ngrok
- 樹莓派內網穿透方法大全 - 硬核樹莓派
- inconshreveable/ngrok: Introspected tunnels to localhost
- ngrok - secure introspectable tunnels to localhost
閱讀更多 硬核樹莓派 的文章