外網轉址與 Tunnel 服務教材

本單元整理 IoT 與 Web 實作中常見的外網轉址工具,包含 ngrok、Cloudflare Tunnel、Pinggy 與 LocalTunnel,說明它們如何把本機或區域網路中的 HTTP 服務暫時發布到外部網路。

適合搭配 Raspberry Pi、Pico W / Pico W2、Flask API、Node-RED、Webhook 接收端,以及 DDS Bridge 類型的實驗。

一、為什麼需要 Tunnel 服務

Tunnel 服務通常會建立一個公開的 https://... 位址,再把該位址的流量轉送到本機的指定埠,例如 localhost:5000

二、基本概念

名詞說明
Forwarding把公開網址收到的請求轉送到本機服務。
Public URL外部裝置可以存取的網址,通常是 HTTPS。
Local Service本機正在執行的應用,例如 Flask、Node-RED、Django 或測試 API。
Authtoken / Login部分服務需要登入或設定 token 才能啟用更穩定的通道。
TLS / HTTPS外部網址多半提供加密連線,但本機端可能仍是 HTTP。

三、使用前的共通準備

  1. 先讓本機服務在電腦內部可正常存取。
  2. 先用本機測試,例如 curl http://127.0.0.1:5000
  3. 確認要對外開放的是哪一個埠,例如 500080001880
  4. 對外發布前,先確認該服務是否需要基本驗證或資料格式檢查。
curl -X POST http://127.0.0.1:5000/sensor \
  -H "Content-Type: application/json" \
  -d '{
    "device_id": "test-local",
    "temperature": 24.5,
    "humidity": 58.2,
    "timestamp_ms": 1710000000000
  }'

四、常見工具比較

工具特點適合情境
ngrok知名度高、文件完整、操作簡單。課堂展示、API 測試、Webhook 驗證。
Cloudflare Tunnel可綁自訂網域,適合較正式部署。長時間運作的服務、網站或 API 發布。
Pinggy可直接透過 SSH 建立臨時網址,快速輕量。短時間測試、臨時示範。
LocalTunnelNode.js 生態系常見,安裝簡單。前端、Node.js、簡易教學示範。

五、ngrok 實作步驟

適合快速上手

1. 安裝

brew install ngrok/ngrok/ngrok

2. 設定帳號 token

ngrok config add-authtoken <YOUR_AUTHTOKEN>

3. 啟動本機 5000 埠的轉址

ngrok http 5000

4. 取得公開網址

Forwarding  https://abc123.ngrok-free.app  ->  http://localhost:5000

5. 讓裝置或遠端程式改用公開網址

PI5_URL = "https://abc123.ngrok-free.app/sensor"
如果本機服務原本已能正確處理 HTTP POST,換成 ngrok 的公開 URL 後,外部裝置即可經由網際網路送資料進來。

六、Cloudflare Tunnel 實作步驟

適合較正式發布

1. 安裝 cloudflared

brew install cloudflared

2. 登入 Cloudflare

cloudflared tunnel login

3. 最快的臨時方式:Quick Tunnel

cloudflared tunnel --url http://localhost:5000

4. 結果

工具會回傳一個可公開存取的網址,例如:

https://random-name.trycloudflare.com
若要長期使用,可再建立命名 tunnel、綁定 DNS 與自訂網域。

七、Pinggy 實作步驟

適合輕量快速測試

1. 直接用 SSH 建立 HTTP 轉址

ssh -p 443 -R0:localhost:5000 a.pinggy.io

2. 觀察終端機輸出

輸出中會顯示一個臨時公開網址,可把它指定給遠端裝置使用。

3. 結束方式

停止 SSH 連線後,該公開網址通常也會失效。

使用前請先確認當下的 Pinggy 方案、限制與連線規則,因免費方案細節可能調整。

八、LocalTunnel 實作步驟

適合 Node.js 示範

1. 安裝

npm install -g localtunnel

2. 對外發布本機服務

lt --port 5000

3. 若需要自訂子網域

lt --port 5000 --subdomain iot2026-demo
實際是否成功使用指定 subdomain,取決於當下可用性與服務端限制。

九、搭配 Raspberry Pi 與 Pico W2 的使用方式

  1. 在 Raspberry Pi 上先啟動 Flask / Node-RED / Bridge Server。
  2. 用本機 curl 先確認 API 正常。
  3. 選擇一種 tunnel 工具,對外發布 localhost:5000
  4. 把 Pico W2 程式中的目標網址改成公開 HTTPS URL。
  5. 重新上傳程式,觀察 Raspberry Pi 終端機是否收到資料。
PI5_URL = "https://your-public-url.example/sensor"

十、驗證流程

  1. 先用本機 curl 驗證。
  2. 再用另一台電腦或手機測試公開網址。
  3. 最後再讓 Pico W2 或其他外部裝置送資料。
  4. 確認伺服器日誌、資料庫、DDS Subscriber 或 Node-RED 是否收到資料。
檢查項目成功條件
本機 APIcurl 到 127.0.0.1 可成功回應
公開網址其他裝置可連線並收到合理回應
外部裝置發送Pico W2 或外部程式可成功 POST
後端處理伺服器日誌、資料流或資料庫可看到新資料

十一、安全注意事項

Tunnel 工具很適合教學與測試,但若要長期正式運作,通常應改用正式網域、反向代理、TLS 憑證管理與完整的存取控制。

十二、適合搭配的教材頁