内核与控制台 · · 约 14 分钟阅读

Clash Meta 外部控制器与 Secret:局域网启用 Web 面板安全步骤(2026)

许多人的 Clash Meta / mihomo已经能翻墙,却卡在「想用手机或另一台浏览器打开控制台调节点」这一步:YAML 里有 external-controller,但不知道它和 mixed-port谁先谁后;Secret该写多长、请求里怎么带;监听写成 127.0.0.1 还是 0.0.0.0 才算「局域网可访问且不裸奔」。检索词常落在 REST APIbind-address、面板 Yacd-meta 如何把地址和密钥填对,以及是否要单独给控制端口放行防火墙。本文与「局域网共享出站代理」(allow-lanmixed-port)不是同一道题:出站共享解决的是谁走代理;本文解决的是谁有资格动你的内核。若你只关心多台设备共用 HTTP/SOCKS,请并行阅读站内 局域网共享与本机出站一文;若你连订阅都还不会导入,先过订阅导入把基础链路跑稳再开控制面。

1. external-controller 与 mixed-port:两个端口两套职责

mihomo系配置里,mixed-port(或拆开的 port/socks-port)是给浏览器、终端走的代理入站:客户端把 HTTP 或 SOCKS 流量塞进来,由规则和策略组决定去哪个节点。external-controller则是管理面:内核向上暴露的一组 REST API,用来读状态、切换代理、触发重载、看连接与日志(具体路径以你所用版本文档为准)。Web 控制台(例如 Yacd-meta)本质是「带界面的 HTTP 客户端」:它不替你接管系统流量,它只是不断请求 external-controller 所提供的 JSON,再把结果画成图表与按钮。

混淆两者的典型后果是:把面板地址填成了 127.0.0.1:7890(mixed 代理口),控制台当然连不上REST;或者反过来误把9090当成代理端口写进浏览器系统代理里,出站握手也会异常。自检口诀可以记:Proxy 端口让「流量走过去」Controller 端口让「控制台与脚本问问题」。两台端口建议不要相同;若你只在本机用手机浏览器访问控制台,手机和电脑必须在同一局域网且防火墙放行控制器端口所在的 TCP,这和放行 mixed 的规则是两条完全不同的入站语义

2. Secret 与 REST API:请求头 Bearer 与「无密钥」风险

Secret在语义上是一份内核管理口令:凡是能调到 external-controller并携带正确密钥的客户端,通常就具备等价于面板上的读配置切节点一类能力——具体粒度依 API 与你的衍生 GUI 封装而定。RFC 语义下常见写法是把 Secret 放进 HTTP AuthorizationBearer <你的 Secret>;不少面板会把它翻译成「密钥」输入框。务必使用足够随机的长串,不要把生日、手机号或订阅令牌原样搬进 Secret;控制面被撞库或猜到口令时,局域网里任何人都能用你的出口政策「玩旋钮」,比单纯的代理共享更贴近远程操控

另一类常见误区是:以为开了 Secret 就一定能挡住所有探测。若监听仍然绑在0.0.0.0且路由器端口转发误把9090暴露在公网,暴力尝试虽慢但依旧不该出现在你的模型里。密钥 + 收窄监听 + 系统防火墙或上游 ACL要叠在一起。若运行时配置里省略 Secret(或等价地留空),部分构建会弱化甚至关闭鉴权语义——等价于控制台「谁连上谁是管理员」,这在宿舍、合租或公司内网里都算裸奔不要依赖「邻居不懂技术」这一种安全边界。

你可以在终端用一条只读探测(示意,路径以版本为准):对 /version 或等价健康检查发起 HTTPS 或 HTTP GET,附带 Authorization: Bearer YOUR_SECRET,若能返回内核版本 JSON,则说明监听与鉴权链路已通。若控制台报 401/403,多半是 Secret 抄写不一致或前置代理剥掉了包头。

# Example: replace host, port and token
curl -s -H 'Authorization: Bearer YOUR_SECRET' \
  'http://127.0.0.1:9090/version'

3. bind-address:仅本机、全网卡与局域网场景的填法对照

external-controller的值一般是「监听地址加端口」的组合,形如 127.0.0.1:90900.0.0.0:9090。前者表示只有本机进程能直接连到这个管理口:你在同一台电脑上的浏览器、Yacd-meta 标签页可以使用 http://127.0.0.1:9090,而手机在平层 Wi‑Fi 下默认是不可能访问的,因为从路由层面那些 SYN 根本不会落到回环接口上。想让手机在同一局域网网段访问,需要把监听改到可被私网路由到的地址:常见等价写法是使用0.0.0.0(所有 IPv4 接口)或直接写你那张网卡的 局域网 IPv4,具体以你导出的运行时 YAML能接受的语法为准。改完务必重启内核或热重载后,用ss或 Windows 的资源监视器看一眼 LISTEN是否真的落在你期待的地址家族上。

广义上讨论的 bind-address常与「代理监听」一起讨论;在你的配置里可能还会看到单独约束代理侧 bind的键。管理口代理口可以各自绑定不同接口——这也是安全模型里很实用的一点:你可以在保持 mixed-port 只对 127.0.0.1 开放的同时,把控制器临时绑到局域网给手机用一个晚上调试,再在睡前改回。不要假设 GUI 上的一个总开关会自动帮你把两处 bind 对齐:很多客户端只是把常见选项映射成段落,仍以「导出 YAML」为准做一次肉眼审计。

IPv6 双栈环境里若监听写成[::],要同时确认手机和笔记本是否真的走 IPv6;多数家庭仍以 IPv4192.168.0.0/16为主。如果你在 WSL、Docker、虚拟机里套娃访问宿主机控制台,127.0.0.1的「本机」指的是哪一层 namespaces也要事先对齐——这类场景可先读站内 WSL2 与宿主网络专文再回到本文调整监听地址。

4. Web 控制台 Yacd-meta:Base URL、Secret 与常见问题

Yacd-meta一类面板通常提供「后端地址」或「API 地址」输入框:应填external-controller对外暴露的根 URL而不是订阅链接。例如在仅本机场景下:http://127.0.0.1:9090;若在手机浏览器打开且控制器已在192.168.31.42:9090上监听:http://192.168.31.42:9090。Secret 栏填与 YAML secret字段完全一致的一段字符串,注意不要意外复制首尾空格。若内核同时启用了external-ui并在本机挂载内置静态页,你也许能在浏览器路径里直接用官方 UI 开箱;但无论 UI 从何而来,底座仍是同一套REST APISecret

常见问题一:控制台一直转圈却无法拉取代理列表。先排除混合内容(HTTPS 页内请求 HTTP)、浏览器拦截跨域、以及浏览器插件剥 Authorization。问题二:本机能开、手机不行。按第二节检查监听是否在127.0.0.1,以及Windows Defender 防火墙或第三方套件是否只允许了7890却从未允许9090。问题三:能打开页面但一改节点立刻 401。 Secret 不匹配或大小写敏感的复制错误居多;少数反向代理需要你显式 forwardAuthorization头。

# Skeleton — adapt keys to your exact profile
external-controller: '127.0.0.1:9090'
secret: 'REPLACE_WITH_RANDOM_LONG_TOKEN'
mixed-port: 7890

上文片段仅示意管理口与本机常用代理口并排出现时的相对位置;端口数字请与你的本地规划对齐,且不要把示范 Secret 当真值提交到任何公共仓库。

5. 局域网放行:防火墙、访客 Wi‑Fi 与最小暴露原则

Windows 上对控制器端口放行入站和你在 allow-lan 文章里给mixed-port放行是两条独立规则共享出站一文解决的是局域网设备如何通过代理上网;本文场景是允许谁连到你的管理 REST。即便是「自己家路由器」,也存在.iot 智能家居访客 SSID、智能电视等不可信同级别主机,因此更推荐:短期调试开0.0.0.0,调试完立刻收窄;长期方案用专用管理 VLAN只在 127.0.0.1 监听并用 SSH / VPN 跳板

若在宿舍或共享办公网,任何知道你的 IP、端口且具有足够耐心的人都可以在二层域里尝试撞你的面板——这比互联网随机扫描更不显眼。务必确保路由器未做 crazy 的DMZ把整台主机暴露,并定期检查是否有「意外端口映射」残留在光猫或多拨设备上。记住:控制台被攻破通常意味着出站策略、日志与配置文件都可被翻动,其危害大于「别人偷偷用你的 SOCKS 看视频」这一种模型。

6. 进阶收窄:SSH 隧道、拆分管理网段与实践清单

若你希望「手机永远不直接连内核管理口」,但偶尔仍要在另一台电脑的浏览器里看图表,可以在笔记本电脑上只用127.0.0.1:9090监听,然后通过SSH LocalForward把远端环回端口映射到你当前机器的某个本地端口,再用 Yacd-meta 指向 http://127.0.0.1:映射端口。这样局域网里其他租户根本看不到打开的 9090——他们只能看到你有一个 SSH session,语义上更清晰。云上或远程 VPS 场景则更忌讳把external-controller绑到公网,除非外层还有只允许你家庭出口 IP防火墙组WireGuard mesh

喜欢命令行编排的同学还可以用短时脚本调用 REST完成批量测速与健康检查:同一 Secret在脚本环境与面板里是同一把钥匙,因此脚本仓库里禁止使用chmod 0777共享凭据文件、也不要把echo $SECRET打进可被其他用户读的日志。对家庭用户来说,记不住那么多命令也没关系:把本节消化成四条习惯——随机强 Secret、明白 external-controller与 proxy 端口区别、该关就关局域网监听、以及防火墙只开必要端口——就已经比互联网上大量「控制台全开无认证」的旧帖安全一个数量级。

7. 自检表

诉求 建议组合
只在本机用浏览器控制台 external-controller: 127.0.0.1:9090;强 Secret;不要求局域网入站
宿舍短期手机调试 临时 0.0.0.0:9090或显式局域网 IP;强 Secret;防火墙限制源网段;睡前收窄
跨房间长期管理 VPN 入内网后再连 127.0.0.1;或对 SSH 映射本地端口而非长期暴露 REST
Yacd-meta 连不上 核对 Base URL 是控制器而非 mixed-port;查验 Authorization Secret;HTTPS 面板请求 HTTP API 常被浏览器拦截

Clash Meta 外部控制器开好,本质上是在翻墙能力之外再给自己留一块可观测、可旋钮的运维面板:REST API让脚本与控制台共享同一语义,而Secret则是这块面板的门禁。相比客户端内置页偶尔打不开、却说不清内核到底监听在哪里的状态,理顺 bind-address 与防火墙之后,你在宿舍也能用手机快速切节点;相比把 0.0.0.0 大网卡敞开却留空密钥的旧习惯,则少了一个被同一 Wi‑Fi 里陌生人「借控制台改出口」的攻击面。mihomo 生态里图形壳很多,最终以导出 YAML 自检仍是最稳妥的对齐方式。整体体验上,稳定内核配强 Secret、再按需收窄监听,比在搜索里反复搜「面板为什么连的是 mixed-port」要省心得多。

若你已确认本机策略组、DNS 与 TUN 都正常,却还想把命令行/Git/npm 的出口也钉在同一套mihomo语义上,可结合站内 Windows 终端 Git 走代理与 npm 专项文一起看:它们讲的是数据面环境变量,本篇讲的是控制面 API,二者合在一起才构成完整的「自己在家搭一套清晰网络栈」图景。

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

按主题相关度匹配的延伸阅读,覆盖同分类下的实战配置文章。