使用 Caddy 和 devtunnel 實現內網穿透
Contents
在開發和測試過程中,我們經常需要讓外部網路能夠訪問內部網路的服務。本文介紹如何使用 Caddy 反向代理和 Microsoft devtunnel 來實現內網穿透,讓外部網路可以安全地連接到內部網路服務。
使用場景
實際案例分享
最近 PM 去公司外面開會,臨時需要讓客戶測試內網的開發環境,叫我幫忙他操作內網系統,我突然想起一招,利用 Caddy 和 devtunnel 快速架設一個通道,讓客戶能夠透過公開網址訪問內網服務。
這個方案適用於以下場景:
- 需要讓客戶或同事測試內部開發環境
- 在本地開發環境進行 webhook 測試
- 遠端存取家裡或辦公室的內部服務
- 臨時分享本地開發的網站給其他人查看
什麼是 Caddy?
Caddy 是一個功能強大、使用簡單的開源網頁伺服器,內建自動 HTTPS 功能。它可以作為反向代理,將請求轉發到指定的後端服務。
什麼是 devtunnel?
Microsoft devtunnel 是微軟推出的開發工具,可以將本地端口暴露到公網,類似於 ngrok。它特別適合需要臨時測試的場景。
步驟一:安裝 Caddy
Windows 安裝
|
|
Linux 安裝
|
|
macOS 安裝
|
|
步驟二:設定 Caddy 反向代理
建立一個 Caddyfile 設定檔:
|
|
這個設定的意思是:
- 在本機的 3000 端口監聽請求
- 將所有請求轉發到
https://stage.com.tw - 設定 Host header 為
stage.com.tw,確保目標伺服器能正確處理請求
步驟三:啟動 Caddy
在 Caddyfile 所在目錄執行:
|
|
你應該會看到類似這樣的輸出:
|
|
這表示 Caddy 已經成功在 3000 端口啟動。你可以透過 http://localhost:3000 測試是否正常運作。
步驟四:安裝 devtunnel
Microsoft devtunnel 是命令列工具,可以透過多種方式安裝。
Windows 安裝
|
|
Linux/macOS 安裝
|
|
或者手動下載:
- 前往 Microsoft devtunnel 下載頁面
- 下載對應平台的版本
- 解壓縮並加入到 PATH 環境變數
步驟五:使用 devtunnel 建立通道
首次使用需要登入:
|
|
建立並啟動通道:
|
|
執行後,devtunnel 會產生一個公開網址,類似:
|
|
現在,任何人都可以透過這個網址訪問你的內部服務了!
devtunnel 常用參數
|
|
完整流程圖
|
|
注意事項
-
安全性考量
- 使用
--allow-anonymous時,任何人都可以訪問你的服務,請確保不要暴露敏感資訊 - 生產環境建議使用身份驗證
- 定期更換或關閉不使用的通道
- 使用
-
效能限制
- devtunnel 免費版本有流量和連接數限制
- 不建議用於生產環境
-
替代方案
- ngrok: 功能更豐富,但免費版有限制
- frp: 需要自己架設伺服器
- Cloudflare Tunnel: 整合 Cloudflare CDN
-
防火牆設定
- 確保本機防火牆允許 Caddy 監聽的端口
- 如果無法連接,檢查防火牆規則
常見問題
Q: devtunnel 連接失敗怎麼辦?
A: 檢查以下幾點:
- 確認 devtunnel 是否正常登入
- 檢查本機端口 3000 是否被其他程式佔用
- 確認 Caddy 是否正常運行
Q: 如何停止服務?
A:
- Caddy: 在終端機按
Ctrl+C即可停止 - devtunnel: 按
Ctrl+C會關閉通道
Q: 可以同時開多個端口嗎?
A: 可以,使用多個 devtunnel 實例:
|
|
總結
透過 Caddy 和 devtunnel 的組合,我們可以快速建立一個從外部網路連接到內部網路的通道。這個方案特別適合:
- 快速展示開發成果
- 進行 webhook 測試
- 遠端除錯
- 臨時分享本地服務
記得在不需要時關閉通道,以確保安全性。如果需要長期使用,建議考慮更專業的解決方案如 VPN 或正式的反向代理架構。