Clash 的核心是一個無介面的命令列程序,但它內建了完整的 RESTful API,允許外部程式透過 HTTP 介面即時查詢狀態、切換節點、修改配置。Dashboard(控制面板)正是基於這套 API 構建的 Web 前端,無需重啟 Clash 即可完成幾乎所有管理操作。本文從 API 配置開始,帶你搭建一套完整的視覺化管控體系。

開啟 Clash 的 External Controller

Clash 的 API 服務由 external-controller 欄位啟用。將以下配置加入 config.yaml

啟用 External Controller
# Clash 外部控制器配置
external-controller: 127.0.0.1:9090   # 仅本地访问(推荐)
secret: your-api-secret               # Bearer Token 认证,留空则无鉴权
external-ui: ui                       # Dashboard 静态文件目录(相对 Home 目录)
external-ui-url: https://github.com/MetaCubeX/metacubexd/archive/gh-pages.zip

external-controller 繫結 127.0.0.1 時 API 只能本機訪問。如果需要區域網內其他裝置訪問(如手機遠端管理路由器上的 Clash),可以改為 0.0.0.0:9090,但務必設定強 secret,防止區域網內其他裝置未授權訪問。

主流 Dashboard 對比

目前有多個開源 Dashboard 可供選擇,各有側重:

名稱定位特點
Yacd輕量經典介面簡潔,資源佔用極低,功能覆蓋基本需求,適合入門使用者
Yacd-metaYacd 的 Mihomo 增強版在 Yacd 基礎上添加了 Mihomo 特有功能(Provider 管理、連線詳情等)
Metacubexd功能全面,現代 UI支援全部 Mihomo API,即時流量圖、規則集更新、連線溯源均有支援,推薦使用
Zashboard極簡風格介面非常精簡,適合只需要節點切換的輕度使用者

安裝 Metacubexd(推薦)

Metacubexd 是功能最完整的 Dashboard,官方提供 CDN 線上版,無需安裝即可使用。

方式一:直接訪問 CDN 線上版

開啟瀏覽器訪問 https://metacubex.github.io/metacubexd/,在輸入框中填入:

  • 後端地址:http://127.0.0.1:9090
  • 金鑰:你在 config.yaml 中設定的 secret

方式二:本地部署(離線使用)

在 Mihomo 的 Home 目錄中建立 ui/ 資料夾,將 Metacubexd 的 gh-pages 分支檔案下載解壓到該目錄。啟動 Clash 後訪問 http://127.0.0.1:9090/ui/ 即可進入本地 Dashboard。

配置 external-ui-url 後,Mihomo 會在首次啟動時自動下載並解壓 Dashboard 檔案到 external-ui 指定目錄,無需手動操作。後續可透過 Dashboard 的「檢查更新」按鈕升級。

Dashboard 核心功能詳解

代理節點管理

Dashboard 的「代理」頁面以卡片形式展示所有策略組和節點。點選策略組中的節點即可立即切換,無需重啟 Clash。延遲數值旁的顏色指示器(綠/黃/紅)直觀顯示節點可用狀態。點選「測速」按鈕可觸發單個策略組的節點延遲測試。

即時連線監控

「連線」頁面(Connections)是排查問題的利器。每條活動連線都顯示:目標域名/IP、命中的規則(及規則來源)、使用的策略組、已傳輸位元組數和連線時長。當某個應用走了錯誤的規則(如本應直連卻走了代理),在這裡可以立刻發現並定位。

規則集與 Provider 管理

Mihomo 的 Dashboard 可以檢視所有已載入的規則集(Rule Provider),顯示最後更新時間,並支援手動觸發更新——無需重啟即可讓新的規則集內容生效。Proxy Provider 同理,可以在不重啟的情況下拉取訂閱更新後的節點列表。

手動呼叫 API 觸發規則集更新
# 触发名为 proxy-list 的规则集更新
curl -X PUT http://127.0.0.1:9090/providers/rules/proxy-list \
  -H "Authorization: Bearer your-api-secret"

# 触发节点订阅更新
curl -X PUT http://127.0.0.1:9090/providers/proxies/my-subscription \
  -H "Authorization: Bearer your-api-secret"

使用 API 實現自動化管理

Clash RESTful API 的能力遠不止 Dashboard 所展示的。透過指令碼,你可以實現更高階的自動化:

常用 API 端點速查
# 获取所有代理节点状态
GET  /proxies

# 切换策略组到指定节点
PUT  /proxies/{group-name}
     Body: {"name": "节点名称"}

# 获取实时流量统计(WebSocket)
GET  /traffic

# 获取日志流(WebSocket)
GET  /logs?level=info

# 热重载配置文件
PUT  /configs?force=false
     Body: {"path": "/path/to/config.yaml"}

配合 Shell 指令碼或定時任務,可以實現諸如「每天凌晨 3 點自動更新所有規則集和訂閱」「當檢測到節點延遲超過閾值時自動切換策略組」等功能,打造真正無人值守的代理管理體系。

external-controller 繫結到公網 IP(如 0.0.0.0)並且不設定 secret,任何人都可以不經授權控制你的 Clash 例項,包括切換節點、檢視所有連線記錄。務必配置 secret 並考慮防火牆規則。