1 external-controller 在做什麼
Mihomo(Clash.Meta)與多數 Clash 相容核心一樣,除了監聽本機混合埠提供代理服務外,還會在另一個位址上暴露一組 REST API:用來查詢狀態、切換策略組與節點、重新載入設定等。設定檔裡對應的欄位就是 external-controller,常見寫成 127.0.0.1:9090 這類「IP:埠號」形式。
圖形用戶端(例如 Clash Verge Rev)在介面上點選節點,背後往往也是透過同一套 API 與核心溝通;而 Yacd、MetaXD 等Web 面板則把這些能力做成可在瀏覽器操作的介面。對使用者而言,搜尋「想用網頁管 Clash」時,關鍵字幾乎都會落在 external-controller、Yacd 與 secret 上——因為沒有 API 位址與驗證,面板無法安全地連上核心。
若您是在 Linux 或伺服器上純命令列部署 Mihomo,可先對照站內Linux 安裝 Mihomo 與 systemd一文,確認服務已正常監聽,再回到本文把 API 綁定位址與金鑰調整到符合「只給自己用」或「只給區網管理」的情境。
2 設定檔:監聽位址與 secret
最典型、也最建議的本機寫法是讓 API 只聽在迴環位址,並設定一段足夠長的 secret。下列片段僅示意結構,埠號請避免與系統上其他服務衝突:
# Local-only API — recommended baseline
external-controller: 127.0.0.1:9090
secret: "replace-with-a-long-random-string"
# Optional: dedicated UI path (depends on core build)
# external-ui: /path/to/ui-folder
secret 用於 HTTP 請求的驗證:面板或腳本會在標頭帶上 Authorization: Bearer <您的 secret>(實際欄位名稱與是否必填請以您使用的核心版本說明為準)。請勿使用 123456、password 這類弱密碼;若設定檔會備份到雲端或多人協作,請把 secret 當成與代理帳密同等級的敏感資訊保管。
有些教學會示範 external-ui 掛載內建儀表板靜態檔;Yacd 則多為獨立網頁,您可在瀏覽器開啟官方託管或自行託管的 Yacd,再在介面中填入「控制器位址」與金鑰。兩種方式不互斥,但安全原則相同:誰能連到 external-controller,誰就接近完整的遠端管理能力。
allow-lan 的關係
allow-lan 影響的是代理埠是否對區網開放,與 API 是否暴露並非同一個開關。即使 allow-lan 為 false,只要 external-controller 綁在 0.0.0.0 且防火牆放行,區網或外網仍可能存取到 API——兩者請分開檢查。
3 連接 Yacd Web 面板
Yacd(Yet Another Clash Dashboard)是常見的開源儀表板,介面可顯示策略組、即時流量、並以點選方式切換節點。一般流程是:在 Yacd 的設定中填入控制器 URL(例如 http://127.0.0.1:9090)以及與設定檔一致的 secret,儲存後即可載入目前設定與節點清單。
若您使用線上託管的 Yacd 頁面,瀏覽器會向您填寫的 API 位址發請求;因此該位址必須從執行瀏覽器的這台電腦可達。本機 Mihomo 跑在同一台機器上時,用 127.0.0.1 最直覺;若核心跑在區網另一台主機,則應改成該主機的區網 IP,並一併確認 API 有聽在對應介面上。
讀到策略組與自動選線時,可搭配url-test/fallback 策略組一文,先在設定裡把測速與備援邏輯調好,再用面板觀察切換結果是否符合預期。若您同時使用訂閱與本地覆寫,亦可參考mixin 與訂閱覆寫,避免更新訂閱後名稱與規則脫鉤。
https 開啟,而 API 為 http,部分瀏覽器可能阻擋跨網域或非安全請求。若遇連線失敗,可改為本機開啟 Yacd、使用支援的瀏覽器設定,或改為透過反向代理為 API 加上 TLS(進階)。
4 區網與遠端:何時改綁 0.0.0.0
僅在本機瀏覽器管理時,請維持 external-controller: 127.0.0.1:埠,讓 API 不對其他網路介面廣播。若您希望同一區網內的手機或另一台電腦用 Yacd 連線,常見作法是把監聽改為 0.0.0.0:9090(或指定區網介面 IP),並立刻在作業系統防火牆或路由器上限制來源 IP 範圍,只允許信任的裝置存取該埠。
遠端(跨網際網路)若要操作面板,強烈建議不要直接把 API 埠轉發到公網 IP。較穩妥的作法包括:先連上公司或家中的 VPN,再以區網 IP 存取;或使用 SSH 區域轉發(將遠端主機的 127.0.0.1:9090 對應到本機某埠),讓 API 仍只綁在迴環位址,外層由 SSH 加密與身分驗證保護。
若必須跨網段管理,亦可評估在 API 前加一層反向代理並啟用 HTTPS、存取控制與速率限制;細節依您的環境而異,但核心觀念不變:把暴露面縮到最小,並假設「任何能連上 API 的人都能改您的代理策略」。
5 降低面板遭他人存取的風險
下列項目可當成檢查清單:第一,secret 使用長隨機字串,並在更換後同步更新所有面板與腳本。第二,優先維持 127.0.0.1 監聽;若改為 0.0.0.0,必須搭配防火牆白名單或僅 VPN 內可達。第三,避免在論壇、截圖、錄影中露出完整 API 位址與金鑰。第四,定期更新 Mihomo 與用戶端,減少已知漏洞被利用的機會。
家用路由器後方的裝置常被預設成「信任區網」,但若 Wi‑Fi 密碼外洩或訪客網路設定不當,區網內仍可能有陌生人。將 API 視為高權限後門,比單純擔心「有人用我的代理流量」更關鍵——因為變更策略可能導致資料走錯隧道或外洩。若您與他人共用電腦,亦應鎖定作業系統帳號,並避免在公用電腦長期保存帶有 secret 的設定檔。
external-controller 直接對公網開放,或在雲端主機上把 API 埠對全世界 0.0.0.0/0 放行。這等同邀請陌生人遠端操作您的代理核心。
6 API 與驗證方式(給進階使用者)
外部控制器本質上是 HTTP 服務,許多自動化腳本會用 curl 或程式語言呼叫 /configs、/proxies 等路徑。若設定檔啟用了 secret,請在請求標頭加入 Authorization,否則會收到 401。實際路徑與方法請以官方文件為準;升級核心版本後也建議快速回歸測試腳本是否仍相容。
部分環境會搭配 external-controller-pipe 或 Unix socket(視版本與平台而定),用以避免在本機開 TCP 埠;若您對攻擊面極度敏感,可查閱所使用版本的進階選項。對一般桌面使用者,維持 127.0.0.1 + 強 secret 通常已能顯著降低風險。
7 常見問題
- Yacd 顯示連線失敗:確認 Mihomo 已啟動、埠號與設定檔一致、防火牆未擋,並檢查
secret是否打錯或含有未跳脫的特殊字元。 - 區網手機連不上:確認 API 已綁
0.0.0.0或該區網 IP,且手機與電腦在同一子網路;仍建議只開放區網來源。 - 想遠端但又不想開公網埠:優先使用 VPN 或 SSH 轉發,讓 API 維持本機監聽。
- 更新核心後面板異常:檢查 API 路徑或驗證方式是否有破壞性變更,並清除瀏覽器快取後重試。
8 總結
Mihomo 的 external-controller 讓核心能以標準 REST API 接受查詢與指令,是Yacd 等 Web 面板與自動化腳本的共同基礎;secret 則是防止陌生人隨意連線的第一道門檻。日常建議維持 API 綁在 127.0.0.1、使用長隨機金鑰,並在需要區網或遠端管理時,優先選擇防火牆白名單、VPN 或 SSH 轉發,而非把埠裸露在公網。
相較僅依賴桌面視窗操作,瀏覽器面板適合快速切換節點與檢視連線;若您也希望在 Windows、macOS 上有一站式圖形用戶端與 TUN 等進階能力,可從本站下載頁取得安裝指引,與命令列或伺服器上的 Mihomo 部署並存。