配置教程 精选 标签: external-controller bind-address secret Web 面板

Clash 外部控制器打不开?核对 bind-address 与 secret 逐步操作

Clash 外部控制器(REST API,常被 Web 面板或脚本调用)依赖 external-controller 所绑定的地址与端口。托盘显示「已运行」并不等于面板一定能连上:若 bind-address 只监听回环地址、端口被占用、secret 与请求头不一致,或系统防火墙拦截入站,你会看到浏览器一直转圈超时连接被拒绝,以及典型的 401。本文按「先读生效配置 → 再对齐监听范围与端口 → 最后验证密钥与防火墙」的顺序给出清单,并说明与 Windows 混合端口、局域网放行 一文如何衔接。

约 19 分钟阅读
Clash 编辑部

一、外部控制器在做什么

内核在本地(或你显式绑定的网卡上)打开一个 HTTP 服务,对外提供版本查询、代理模式切换、连接列表、规则与配置热更新等接口。第三方 Web 面板、自动化脚本、以及部分桌面客户端内置的「仪表盘」都通过这一接口与内核对话。字段名在文档里通常写作 external-controller,值形如 127.0.0.1:90900.0.0.0:9090,冒号后是端口,前面是监听地址

因此「打不开」很少是单一原因:可能是地址只绑在 127.0.0.1 而你从另一台电脑访问;可能是面板填的端口与 YAML 不一致;也可能是 secret 开了认证但浏览器或面板没带正确的 Authorization。先把「谁在监听、监听哪里」搞清楚,再谈规则与节点。

二、常见现象与第一层判断

用户侧最常见的三类反馈如下。第一类是浏览器长时间无响应,最后报超时——往往意味着数据包没到监听端口(地址不对、服务未起、或被防火墙丢弃)。第二类是立即提示「连接被拒绝」——通常说明目标 IP 上该端口没有进程在 LISTEN,或你访问的根本不是运行 Clash 的那张网卡。第三类是能连上 HTTP,但返回 401 或空白/错误 JSON——多数与 secret 有关:未带令牌、带错令牌、或面板缓存了旧密钥。

小贴士:先在运行 Clash 的同一台机器上,用本机浏览器访问 http://127.0.0.1:端口(端口以你的配置为准)。若本机可开、跨设备不可开,问题几乎一定在 bind-address / 局域网路由 / 防火墙;若本机也不开,先核对进程是否真的在跑、端口是否一致。

三、确认生效的端口与 YAML

以「内核正在用的那份配置」为准

图形客户端常把「界面里看到的文本」与「实际下发给内核的文件」分开管理:你可能改了磁盘上的 config.yaml,但托盘里的实例仍在使用旧档案;也可能订阅合并后生成了临时配置,其中的 external-controller 与手改版本不同。排错时请以内核日志或客户端「当前配置 / 运行中配置」展示的内容为准,而不是凭记忆。

典型 YAML 片段

下面是一段仅作结构说明的示例(具体键名以你所用内核与版本文档为准;Mihomo / Clash Meta 与经典 Clash 在扩展字段上可能略有差异):

external-controller: 127.0.0.1:9090
secret: "your-token-here"

若你同时使用了 external-controller-pipe 等仅适用于 Windows 命名管道的设置,请确认面板是否支持该通道;多数 Web 面板仍走 TCP 端口,此时应以 external-controller 的 host:port 为准。

需要系统查阅各字段含义时,可打开本站 配置说明与文档索引,把顶层通用项与扩展项分开阅读,避免把仅适用于某一发行版的键名抄进不兼容的内核。

四、bind-address 与局域网访问

监听地址决定「谁可以连上这个端口」。当值为 127.0.0.1localhost 时,只有本机进程能访问,这是默认且较安全的行为:你在本机浏览器打开面板没问题,但用手机或另一台电脑访问本机局域网 IP 会失败。若你确实需要从局域网管理,必须把 外部控制器绑到 0.0.0.0(全部 IPv4)或具体网卡 IP,并确保客户端设置里允许局域网连接(部分图形界面单独提供「允许局域网」开关,背后仍对应绑定地址或防火墙规则)。

IPv6 与双栈环境

在仅绑定 ::1 或某一 IPv6 地址时,用 IPv4 字面量去访问也会失败。若你不确定当前环境,可在本机分别尝试 127.0.0.1::1,并与 bind-address 对齐。

与 mixed-port、socks-port 的区别

代理入站端口(如 mixed-port)与 external-controller 不是同一个端口:把浏览器代理指向 API 端口、或把面板地址写成混合端口,都会出现「代理能上网但面板永远不通」的错觉。请各自使用正确端口。若你还启用了局域网共享代理,可对照 混合端口与防火墙专文,区分「代理入站放行」与「管理接口放行」。

安全提示:外部控制器暴露到 0.0.0.0 且不设 secret,等价于在局域网内开放无认证管理口。务必设置强随机 secret,并避免在公共网络开启。

五、secret 与 401

当配置中存在非空 secret 时,内核通常要求请求携带 Authorization: Bearer <secret>(具体格式以所用内核文档为准;少数工具使用查询参数,但不建议依赖)。401 的常见原因包括:面板设置页里仍保存着旧令牌;你在 YAML 里改了密钥却未重启内核或未让客户端重新下发;Bearer 前缀拼错、多空格、或引号被一并复制进令牌。

若你暂时无法确认面板行为,可先在同一台电脑用命令行带齐头发起 GET(见下一节),排除「纯网络问题」后再回到面板配置。生产环境不建议长期关闭 secret 仅图省事。

六、端口占用与防火墙

external-controller 指定的端口已被其他程序占用,内核可能降级为监听失败、改用随机端口,或直接启动失败——表现依客户端而定。此时在设置里改一个未被占用的端口,并同步更新面板里的「API 地址」,往往立刻见效。

Windows 上还需检查「专用 / 公用网络」配置文件下的入站规则:即便 bind-address 已是 0.0.0.0,系统防火墙仍可能拦截来自局域网的 TCP。为管理接口单独放行你使用的那一个端口,比整体关闭防火墙更安全。macOS 若弹出网络权限提示,请允许对应辅助进程接受传入连接。

七、用本机请求自测

在运行 Clash 的机器上打开终端,将示例中的主机、端口与令牌换成你的实际值。若下列请求返回版本或配置类 JSON,则说明 外部控制器工作正常,问题转移到浏览器扩展、面板缓存或跨机网络路径。

curl -sS -H "Authorization: Bearer your-token-here" \
  http://127.0.0.1:9090/version

若去掉 Authorization 仍返回 200,说明当前未启用 secret 或规则未按预期生效;若带错令牌返回 401,则与第四节结论一致。跨设备访问时,把 127.0.0.1 换成那台电脑在局域网中的 IP,并重复上述测试,可快速判断是绑定地址还是防火墙。

八、现象对照表

现象 建议优先检查
本机可访问,其他设备不行 bind-address 是否为 127.0.0.1;是否需改为 0.0.0.0 或内网 IP;防火墙入站
连接被拒绝 内核未监听、端口填错、external-controller 与面板不一致、端口被占用
长时间超时 路由不可达、防火墙丢弃、代理链把管理流量导到错误出口、地址写成主机名但未解析
401 Unauthorized secret 是否与 Authorization: Bearer 完全一致;面板是否缓存旧密钥
面板显示在线但无数据 API 路径与内核版本是否匹配;是否连到了另一个仍在运行的旧实例

九、小结

Clash 外部控制器排错的核心,是同时对齐四件事:external-controller端口bind-address 决定的监听范围、secret 与请求头是否一致,以及操作系统是否放行对应入站。多数「托盘正常、面板打不开」并不是代理链路坏了,而是管理接口根本没监听在你以为的地址上,或被防火墙拦在半路。

相比反复重装客户端,先在本机用 curl 或浏览器验证 API,再决定要不要改配置,能节省大量时间。把 YAML、客户端覆盖项与内核日志对照看一遍,往往比在网络论坛里猜测「是不是节点坏了」更有效。

若你打算换用新客户端或在新系统上从零开始,建议先通过本站获取安装包,再按本文清单完成一次外部 API 自检,后续接入任何 Web 面板都会更顺畅。

立即免费下载 Clash,开启流畅上网新体验