external-controller 與代理埠有什麼不同
許多新手會把 mixed-port/port/socks-port 與 external-controller 搞混:前者是給應用程式走流量的代理入口;後者是給管理工具連線的控制平面,對應一組 REST API(例如查版本、讀設定摘要、切換代理模式、操作 proxy-groups 等)。圖形客戶端與 Yacd 這類面板,本質上都是對這個 API 發送 HTTP 請求。
因此,您在面板裡填的「API 位址」通常不是 7890 那類代理埠,而是外控埠(常見預設如 9090,實際以您的設定檔為準)。兩者可以並存:瀏覽器或系統代理仍指向 Mixed/HTTP;面板則連到 http://127.0.0.1:9090 這類控制器位址。
1在設定檔啟用外控與密鑰
在 config.yaml 根層級加入(或確認)external-controller。最常見寫法是監聽本機全部介面中的 IPv4 本機位址,僅供同一台電腦的管理工具使用:
# Mihomo / Clash.Meta — external API listener (example)
external-controller: 127.0.0.1:9090
secret: "replace-with-a-long-random-string"
secret 用於在請求標頭帶上 Authorization: Bearer …(實際欄位名稱依版本與工具而定,面板通常會提供輸入框)。若留空,部分環境仍可連線,但極不建議:任何能觸及該埠的程式都能改您的路由策略。請把 secret 當成管理後台密碼來看待。
安全提醒:勿將 external-controller 以 0.0.0.0 暴露到公網,或在未隔離的區網長期開放而無認證。需要遠端管理時,優先使用 SSH 轉發、VPN 內網或反向代理並加驗證。
2本機與區網:何時要開 allow-lan
若您只在執行 Mihomo 的同一台機器上開瀏覽器填 http://127.0.0.1:9090,通常不需要額外開放區網。但若出現下列情境,就要檢查 bind-address/external-controller 是否只綁在 127.0.0.1,以及是否啟用 allow-lan(或圖形客戶端同等選項):
- 手機或另一台筆電想開 Yacd,連到桌機上的核心;
- Docker 或虛擬機內的核心,要從宿主機瀏覽器連外控埠;
- 您把
external-controller設成0.0.0.0:9090以便區網存取(務必搭配secret與防火牆)。
實務上可記一條簡單規則:連線來源與核心是否在同一個「本機位址語意」。例如從區網另一台裝置連線時,目標應是宿主機的區網 IP 加埠號,而不是裝置自己的 127.0.0.1。容器場景的埠映射可對照 Mihomo Docker 部署:compose 卷掛載與埠映射 一文,避免只映射了代理埠卻漏掉 9090。
3Yacd 面板:從開啟到填對 API
Yacd(Yet Another Clash Dashboard)是靜態前端,透過瀏覽器直接向您的 REST API 發請求。常見用法有兩種:使用公開託管的頁面(請自行判斷信任來源與更新頻率),或在內網自行託管。開啟頁面後,重點是將「API Base URL」或同等欄位設成可從當前瀏覽器環境連到的控制器根位址,例如:
- 本機同一台電腦:
http://127.0.0.1:9090 - 區網從手機連桌機:
http://192.168.x.x:9090(請替換為實際 IP)
若設定了 secret,在面板內一併填入;儲存後通常會看到版本資訊、代理與規則概況。若頁面長時間轉圈或顯示無法連線,請先不要急著改規則,改依下一節由外向內排查。
小提示:以 curl 對 http://127.0.0.1:9090/version(路徑依版本文件為準)測試,可快速分辨是「核心沒起來/埠錯」還是「純瀏覽器/CORS 問題」。
REST API 與訂閱、節點管理
面板上的「切換節點」「檢視連線」背後,對應的是對 proxy-groups、connections 等端點的請求;訂閱更新則對應另一組 API。您不必背路徑,但要理解:面板只是 API 的皮,若設定檔裡沒有合理的 proxy-groups 與 rules,面板也無法憑空變出分流。訂閱格式若需轉換,可延伸閱讀 Subconverter 訂閱轉換指南。
與管理面互補的資料面題材,本站另有 Linux 安裝 Mihomo 並啟用 TUN、Meta 核心 DNS 防洩漏 等文,分別涵蓋全系統流量接管與解析策略;本文刻意聚焦在外控與網頁面板,避免與規則集對比或 TUN 細節重複。
連不上面板:建議排查順序
核心是否真的在聽該埠
確認 Mihomo 行程已啟動、設定檔無語法錯誤,且日誌沒有在啟動階段就退出。變更 external-controller 後通常需要重載或重啟核心;圖形客戶端請確認「外部控制器」開關與埠號顯示一致。
URL、通訊協定與埠號是否一致
外控 API 預設為 HTTP。若手動改成 https:// 卻未在核心前放置 TLS 終止,瀏覽器會連不上。另請確認沒有把代理埠與外控埠對調,也沒有被其他程式佔用同一埠(可替換成未使用埠測試)。
只綁 127.0.0.1 卻從別台連線
這是最常見的誤會之一:在桌機瀏覽器能用 127.0.0.1,換成手機同一個 URL 卻失敗——因為手機上的 127.0.0.1 指向手機自己。請改用宿主機區網 IP,並確保外控監聽範圍與 allow-lan 設定允許該來源。
CORS 與「公開託管 Yacd」
若 Yacd 網頁與 API 不同來源,瀏覽器會做跨來源檢查。多數現代核心與面板已處理常見情境;若您仍遇到攔截,可改為同源託管面板、使用客戶端內建面板,或透過本機反向代理把兩者掛到同一域名下。這類問題與「核心沒起來」不同,宜用開發者工具網路面板判讀狀態碼。
防火牆、安全軟體與 Docker 映射
Windows/macOS/Linux 本機防火牆可能攔截入站連到 9090。Docker 則需在 ports 中宣告 9090:9090(或對應映射),並注意 127.0.0.1 在容器內與宿主機語意不同。
圖形客戶端與純核心
多數圖形客戶端會自動幫您寫好 external-controller 並提供「開啟面板」按鈕;若您以 CLI/systemd 自行執行純核心,就要自己維護 YAML 與重載流程。無論哪一種,取得安裝包與對照文件時,建議優先走 本站下載頁 與 設定說明文件,與開源倉庫的 Issue、版本說明分開使用:前者適合日常安裝與教學路徑,後者適合查證與回報問題。
結語
把 Mihomo 的 external-controller 設對,等於為您的代理核心接上標準化管理介面:Yacd 這類 Web 面板讓 節點切換與連線觀察回到「看得見、點得到」的體驗,而不必每次打開編輯器改 YAML。請記住三件事:外控埠不是代理埠、127.0.0.1 只在該機本機有效、以及secret 與防火牆是標配而非可選。
相較於只會在終端機裡試錯,搭配面板與 REST API 的除錯路徑通常更短;若您希望桌面端也享有相近的整合度,可從本站取得圖形客戶端後再對照同一套名詞。整體而言,基於 Meta 系核心的 Clash 生態在工具鏈上較一致,長期維護成本往往低於拼湊多種不相容設定格式。