大多数 GUI 客户端已经内置了图形界面,但如果你想更直观地看到实时连接列表、每条连接的流量、节点延迟曲线,接入一个 Web 面板会比翻日志方便得多。这一切的入口,就是 external-controller

开启 external-controller

它会在本机开启一个 RESTful API 服务,Web 面板通过这个接口读取内核的实时状态,本身不涉及流量转发。

external-controller: 127.0.0.1:9090 secret: "设置一个访问密钥"
如果把 external-controller 监听地址改成 0.0.0.0 以便局域网内其他设备访问,一定要同时设置 secret,否则任何能访问到这个端口的人都能读取甚至修改你的代理配置。

external-ui:内置一个静态面板

部分内核支持 external-ui 字段,指向一份打包好的面板静态资源目录,这样访问 http://127.0.0.1:9090/ui 就能直接打开面板,不需要额外部署。

external-ui: ./ui

面板能看到什么

模块内容
Proxies所有节点及策略组,可查看/手动切换、发起测速
Connections当前所有活跃连接:目标地址、使用的节点、已用流量、连接时长
Logs实时日志流,规则命中、连接建立/断开等事件
Rules当前加载的全部规则及规则集,方便核对匹配顺序
Traffic实时上下行速率图表,直观看到当前带宽占用

常见的面板项目怎么选

开源社区里有多款成熟的 Web 面板项目可以直接接入使用,普遍都是纯前端静态页面,部署方式也很简单——下载打包好的静态资源,配置 external-ui 指向对应目录,或者直接用浏览器打开对应的在线版本页面,填入你的 external-controller 地址和 secret 即可连接。选择时主要看两点:界面是否清晰直观,以及是否支持你正在用的内核版本的 API 字段(不同内核分支偶尔会有 API 差异,面板版本太旧可能显示不全)。

面板的安全加固建议

  • 务必设置 secret:哪怕只在本机 127.0.0.1 使用,养成设置密钥的习惯也能避免以后误改监听地址时留下风险。
  • 不要把控制端口暴露到公网:如果确实需要远程访问,优先通过 SSH 隧道或 VPN 转发到本机端口,而不是直接把 external-controller 监听在公网 IP 上。
  • 定期检查面板来源:只使用来自官方仓库或知名开源项目的面板资源,避免使用来源不明的第三方打包版本。

手机上能不能用面板

可以,原理完全一样——只要手机和运行 Clash 的设备处于同一局域网,用手机浏览器访问 http://内核所在设备的局域网IP:9090/ui(需要把 external-controller 监听地址改成 0.0.0.0 并配合 secret)即可打开同一个面板。不少人会把这个当作「远程遥控」内核的方式:在电脑上跑内核,手机上开面板查看连接和流量,不用来回切换设备。

用面板排查问题的思路

  1. 某个网站慢/连不上:在 Connections 里找到对应连接,看它落在哪个节点,再单独测这个节点的延迟。
  2. 怀疑规则匹配错了:在 Logs 里打开规则匹配日志级别,实时观察某个域名具体命中了哪一条规则。
  3. 流量异常偏高:在 Connections 按流量排序,快速定位是哪个连接/进程在大量消耗带宽。
如果客户端本身没有内置面板入口,也可以用浏览器直接打开常见的开源 Web 面板项目,填入你的 external-controller 地址和 secret 即可连接使用。

面板和客户端自带界面有什么区别

很多人会疑惑:客户端本身就有图形界面,为什么还要额外接入 Web 面板?两者的定位其实不太一样。客户端内置界面通常做了大量简化,突出「一键连接」「快速切换节点」等日常最常用的操作,隐藏了大部分底层细节;而 External Controller + Web 面板暴露的是内核最原始的运行状态,字段更全、更新更实时,也支持通过接口做二次开发(比如写个脚本定时拉取流量数据做统计)。日常使用客户端自带界面完全够用,只有在需要深入排查问题或做自动化监控时,才有必要额外接入面板。

用接口做简单的自动化监控

External Controller 提供的是标准 RESTful 接口,意味着你不仅可以用现成的 Web 面板查看,也可以自己写脚本定期请求接口,把流量数据记录下来做长期统计,或者在检测到某个节点连续异常时触发通知。这部分属于进阶玩法,不是必需操作,但如果你对自己的网络使用情况有更精细的监控需求,这是一个值得探索的方向,比反复手动打开面板查看要省心得多。

多设备共用同一个面板

如果家里有多台设备(电脑、路由器、NAS)都跑着独立的 Clash 实例,理论上也可以给每一个实例都单独分配一个 external-controller 端口,再用同一个面板项目、切换不同的连接地址来分别查看,不需要为每个实例单独部署一份面板。这种「一个面板管多个实例」的用法在有路由器旁路由或多节点部署场景下会比较常见。

小结

External Controller 本质是内核对外暴露的一层「可观测性」接口,不需要额外的性能开销就能拿到连接级别的详细数据。配合面板使用之后,很多「感觉网速变慢了」「是不是走错节点了」这类模糊的问题,都能变成可以直接观察验证的具体现象。