Advanced configuration / 系统查阅

Clash 配置进阶手册

从配置骨架进入策略组、规则集、DNS、TUN、Fake-IP、域名嗅探与外部控制。内容面向已经完成基础连接、需要理解配置行为与排错链路的使用者。

8 个配置章节 YAML 示例 mihomo 语法 更新于 2026-08-11

阅读方式

快速上手之后,按问题定位章节

快速上手教程负责完成导入、选节点、开启连接和验证结果这条主线;本页负责解释配置为什么这样运行,以及设置冲突时应该检查哪一层。第一次调整配置时建议依序阅读,已有明确问题时可以直接使用下方目录跳转。

Chapter 01 / Baseline

配置骨架与调试基线

Clash 配置不是一张彼此独立的设置清单,而是一条有先后关系的处理链。客户端先读取监听端口、运行模式和 DNS 等基础项,再装载代理节点与策略组,随后加载规则和规则集,最后由系统代理或 TUN 把流量送进内核。任何一层引用不存在的名称,都会影响后续行为。最常见的例子是规则指向了已经改名的策略组:配置可能仍能解析,但命中的流量无法按预期选择出口。因此,进阶调整的第一步不是增加更多参数,而是先建立一份能解释、能验证、能回退的基线配置。

先分清客户端设置与内核配置

Clash Plus、Clash Verge Rev、FlClash、Clash Nyanpasu 等图形客户端通常把设置分成两层。第一层属于应用本身,例如开机启动、系统代理开关、配置更新周期、界面主题和服务安装状态;第二层才是传给 mihomo 内核的 YAML。系统代理按钮通常不会改写订阅文件,它只改变操作系统的代理入口。TUN 开关则可能由客户端生成一段运行时覆写,所以在原始订阅里找不到完全相同的字段。排查时应同时查看当前生效配置与订阅原文,不能只盯着下载下来的 YAML。

一份适合调试的基础段落应保持克制。日志级别先用 info,足以看到连接、规则命中和 DNS 错误;只有需要追踪具体请求时再临时切换到 debug。端口是否需要显式填写取决于客户端的管理方式,桌面客户端可能在启动时注入自己的端口。若手工维护裸配置,可以使用下面的结构,但应确认端口没有被其他代理程序占用。

mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
ipv6: false
unified-delay: true

profile:
  store-selected: true
  store-fake-ip: true

mode: rule 表示按规则决定直连、代理或拒绝;unified-delay 让测速口径更接近完整连接过程,但它不会改变真实网络质量;store-selected 用于保存策略组选择,重新启动后不必逐组重选;store-fake-ip 保存 Fake-IP 映射,减少重启后短时间内映射变化带来的连接波动。移动端若由系统回收应用进程,持久化设置尤其重要,但仍要由客户端授予正常的后台运行条件。

用最短链路建立验证闭环

每次改动后先确认配置能被内核载入,再确认代理节点能建立连接,然后看一条测试请求命中了哪条规则,最后才检查目标应用。若日志在配置解析阶段已经报错,继续切换节点没有意义;若节点握手失败,优先处理订阅和网络,不要先改 DNS;若浏览器正常而某个应用失败,再检查该应用是否绕过系统代理、使用了独立 DNS 或 QUIC。这样的顺序可以把问题锁定在单一层级。

检查层 应看到的结果 失败时优先处理
配置解析 配置成功载入,没有字段或缩进错误 YAML 缩进、重复键、无效引用
节点连接 策略组内存在可选代理并能建立会话 订阅有效性、网络权限、协议参数
规则匹配 日志显示请求命中预期规则与策略 规则顺序、策略组名称、规则集加载
系统接管 目标应用流量进入系统代理或 TUN 系统代理、VPN 权限、路由冲突

配置文件中的缩进只使用空格,不要混入制表符。包含冒号、井号或特殊字符的文本可以加引号,策略组名称一旦被规则引用就应保持稳定。若需要更换客户端,先到下载页选择对应平台;全平台优先考虑 Clash Plus,再根据系统和操作习惯选择其他客户端。迁移时先导入同一订阅验证基础连接,再迁移本地覆写,避免把旧客户端生成的运行时字段直接当作通用配置复制。

Chapter 02 / Policy

策略组类型与组合方式

策略组位于节点和规则之间。规则通常不直接绑定某个节点,而是把请求送到一个稳定的策略名称,再由策略组决定使用哪个出口。这样可以在节点变化时保持规则不动,也可以把手动选择、自动测速、故障切换和负载分配拆成不同层次。设计策略组时最重要的原则是名称清晰、层级有限、用途单一。一个组同时承担地区选择、业务分类和自动切换,短期看起来省事,后续排查时却很难知道最终选中了哪条链路。

select、url-test、fallback 与 load-balance

select 是手动选择组,适合总入口和需要人为固定出口的业务。它不会主动判断节点质量,当前节点失效后仍可能保持原选择。url-test 会按指定地址进行连通测试,并根据结果选择表现合适的节点,适合日常自动选择。fallback 按列表顺序优先使用前面的可用节点,适合对出口稳定性要求高、希望主备关系明确的场景。load-balance 会把连接分配到多个节点,适合能容忍出口变化的并行请求,但登录会话、风控敏感服务和依赖固定来源地址的业务通常不适合。

proxy-groups:
  - name: 总选择
    type: select
    proxies:
      - 自动选择
      - 故障切换
      - DIRECT

  - name: 自动选择
    type: url-test
    use:
      - main-provider
    url: https://www.gstatic.com/generate_204
    interval: 600
    tolerance: 80
    lazy: true

  - name: 故障切换
    type: fallback
    use:
      - main-provider
    url: https://www.gstatic.com/generate_204
    interval: 600
    lazy: true

interval 是检测间隔,设置过短会增加节点和设备的唤醒频率,移动端还可能增加后台耗电;设置过长则会延迟发现故障。tolerance 用于减少相近结果之间的频繁切换,它不是速度加成,而是稳定性阈值。lazy: true 表示组在实际使用时再进行检测,适合降低空闲时开销。测试地址应返回轻量且稳定的响应,不要把文件下载地址当作健康检查目标,也不要以一次测试结果代替长时间稳定性判断。

策略组应围绕业务语义命名

推荐先保留一个“总选择”作为统一出口,再按业务建立“流媒体”“开发服务”“即时通信”等策略。业务组内部可以引用“总选择”、地区组或 DIRECT,规则只引用业务组。这样更换节点来源时只需要调整底层组,规则层保持稳定。组名允许中文,但修改名称时要同步检查 rulesrule-providers 的行为字段,以及其他策略组中的引用。名称大小写和空格都属于标识的一部分,多一个空格也会成为不同名称。

  - name: 开发服务
    type: select
    proxies:
      - 总选择
      - 自动选择
      - DIRECT

  - name: 流媒体
    type: select
    proxies:
      - 总选择
      - 自动选择

rules:
  - DOMAIN-SUFFIX,github.com,开发服务
  - DOMAIN-SUFFIX,githubusercontent.com,开发服务
  - MATCH,总选择

节点较多时,不必把所有名称逐个写入 proxies,可以通过代理提供者的 use 引入,再配合筛选表达式缩小范围。筛选依赖订阅中的节点命名质量,若不同供应源命名规则不一致,单靠地区关键词容易误选。应先在客户端查看实际节点名,再编写过滤条件;更新订阅后也要检查是否出现新命名。排除测试节点、过期提示节点和倍率标记时,要避免表达式过宽导致正常节点一起消失。

组类型 适用目标 主要边界
select 人工固定出口、总入口、业务选择 不会自动绕开失效节点
url-test 日常自动选择、节点较多的订阅 测试结果不等同于业务实际体验
fallback 明确主备顺序、稳定出口 列表顺序需要持续维护
load-balance 可并行且不依赖固定出口的连接 可能触发会话或来源地址变化

策略组排错应从引用关系开始。先确认规则命中的组名,再打开该组查看当前选择,继续向下追踪到实际节点。若自动组看似没有切换,检查测试地址是否可达、检测间隔是否尚未到期,以及客户端是否暂停后台活动。若某项服务频繁重新登录,把它从负载分配组移到固定出口组测试。策略层的目标不是堆叠更多自动化,而是让每一次选择都能从日志和组结构中解释。

Chapter 03 / Rules

规则集订阅化管理

当规则从十几条增长到数百条后,把所有内容继续塞进主配置会迅速失去可维护性。rule-providers 用于把不同主题的规则拆成独立资源,由主配置声明下载地址、格式、更新周期和匹配行为。主文件只保留调用顺序,规则内容由对应规则集维护。这样可以单独更新广告拦截、局域网、开发服务或流媒体规则,也能在某个规则集异常时快速停用,而不必重写完整订阅。

provider 定义与 RULE-SET 调用

规则提供者的名称只是本地引用标识,真正影响解析的是 behaviorformat 与资源内容。behavior: domain 适合只包含域名类条目的集合;ipcidr 面向 IP 网段;classical 可以容纳带类型前缀的经典规则。格式要与远端文件一致,常见文本规则可使用 text,YAML 规则使用 yaml。不要把 classic 内容声明成 domain,否则加载成功也不代表匹配语义正确。

rule-providers:
  private-domain:
    type: http
    behavior: domain
    format: yaml
    path: ./ruleset/private-domain.yaml
    url: https://example.com/rules/private-domain.yaml
    interval: 86400

  developer:
    type: http
    behavior: classical
    format: text
    path: ./ruleset/developer.list
    url: https://example.com/rules/developer.list
    interval: 86400

rules:
  - RULE-SET,private-domain,DIRECT
  - RULE-SET,developer,开发服务
  - GEOIP,LAN,DIRECT,no-resolve
  - MATCH,总选择

示例域名只表示字段结构,实际使用时应替换成已确认可访问且内容可信的规则来源。path 是本地缓存位置,不同提供者不要共用同一路径。interval 以秒为单位,公共规则通常没有必要数分钟更新一次;过于频繁只会增加请求和写入。更新失败时,内核一般会继续使用已有缓存,因此排查时要区分“首次下载失败”和“更新失败但旧规则仍在生效”。删除缓存后重试会失去这个回退条件,不应作为第一步操作。

规则顺序就是优先级

Clash 从上到下寻找第一条匹配规则,命中后不再继续。具体规则应放在宽泛规则之前:私有域名和局域网通常先直连,业务域名再进入对应策略,IP 规则放在需要解析地址的位置,最后由 MATCH 接住其余流量。把大范围代理规则放在顶部,后面的直连例外就永远不会执行。排查错误分流时,日志中的“命中哪条规则”比猜测域名属于哪个分类更可靠。

no-resolve 表示匹配 IP 类规则时不要为了得到 IP 主动触发 DNS 解析。它可以避免不必要的解析,但不适合机械地加在所有规则后面。域名请求若前面没有域名规则,而后续又依赖 GEOIP 判断,完全阻止解析可能使这条规则无法获得所需地址。是否添加应根据规则类型和 DNS 模式决定。对于已经直接拿到目标 IP 的连接,IP 规则仍可正常匹配。

本地少量例外可以直接写在 rules 顶部,不必为三五条条目创建远端规则集。例如某个工作域名必须直连,或某个应用接口必须固定到“开发服务”,把这些规则放在订阅规则集之前即可。若例外数量持续增长,再迁移到本地 provider。这样既保持主配置可读,也避免为每次微调发布远端文件。

rules:
  - DOMAIN,router.local,DIRECT
  - DOMAIN-SUFFIX,corp.example,DIRECT
  - DOMAIN-SUFFIX,github.com,开发服务
  - RULE-SET,private-domain,DIRECT
  - RULE-SET,developer,开发服务
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
  - MATCH,总选择

规则集故障的定位顺序

先查看 provider 状态是否完成加载,再确认远端响应内容与声明格式相符,随后检查规则集名称是否与 RULE-SET 引用一致,最后检查调用位置。状态正常但始终不命中,常见原因是行为类型错误、规则被前面的宽泛条目截获,或目标连接只暴露 IP 而规则集只有域名。若更新后突然出现大量错误分流,可以恢复上一份本地缓存或临时注释该规则集,验证问题是否来自上游内容变化。

规则来源越多,更新节奏和命名越难统一。更稳妥的结构是按用途选择少量规则集,每个业务只设一个主要来源,本地例外作为最高优先级。不要同时引入多个覆盖范围近似的全集规则,再期待顺序自动解决冲突。需要同步多设备时,可参考多设备配置同步方案,将主配置、订阅链接和本地规则分开管理。

Chapter 04 / DNS

DNS 配置优化与泄漏排查

DNS 决定域名如何转换为地址,也直接影响域名规则能否准确匹配。Clash 开启 DNS 模块后,应用的查询可以先进入本地监听,再由内核根据配置选择上游解析器。这里要解决三个问题:查询是否真正进入 Clash、不同域名应该交给哪个上游、解析结果是否能和后续连接保持对应。单纯堆叠很多公共 DNS 地址不会自动提高稳定性,反而可能让结果来源和故障边界变得模糊。

nameserver、default-nameserver 与 proxy-server-nameserver

nameserver 是主要解析上游。default-nameserver 用于解析 DoH 或代理服务器自身的域名,因此通常填写可以直接访问的 IP 形式解析器,避免为了连接解析器而再次需要解析域名。proxy-server-nameserver 可专门处理代理节点域名,避免节点地址解析受业务 DNS 规则影响。若订阅节点使用域名而这一层解析失败,界面可能表现为所有节点同时不可用,但根因并不在节点协议。

dns:
  enable: true
  listen: 0.0.0.0:1053
  ipv6: false
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  use-hosts: true
  respect-rules: true

  default-nameserver:
    - 223.5.5.5
    - 1.1.1.1

  nameserver:
    - https://dns.alidns.com/dns-query
    - https://1.1.1.1/dns-query

  proxy-server-nameserver:
    - https://dns.alidns.com/dns-query

  fake-ip-filter:
    - "*.lan"
    - "*.local"
    - "time.*.com"
    - "ntp.*.com"

respect-rules 让 DNS 请求参考代理规则,但这要求代理解析链已经能工作,否则可能形成先有代理还是先有解析的循环依赖。配置初期如果遇到上游不可达,可以先关闭这一项验证基础解析,再逐步启用。listen 需要与客户端的 DNS 接管方式配合,桌面端由 TUN 接管时通常不需要让局域网设备访问该端口;若设置为对外监听,还应同时检查防火墙与局域网访问范围。

解析器数量与 fallback 逻辑

主解析器选择两到三个稳定来源通常已经足够。不同解析器返回的地址可能受网络位置、CDN 调度和缓存影响,列表越长并不意味着结果越准确。若使用 fallback,需要同时理解过滤条件,否则所有查询都可能进入多路解析,增加等待和网络请求。对于规则清晰的配置,优先使用 nameserver-policy 按域名指定解析器,比依赖宽泛的回退判断更容易解释。

  nameserver-policy:
    "geosite:private":
      - system
    "+.corp.example":
      - 10.0.0.53
    "geosite:cn":
      - https://dns.alidns.com/dns-query

策略中的域名匹配应与实际规则集能力一致。企业内网域名只能由内部 DNS 解析时,必须确保访问内部解析器的路由是直连或能到达办公网络。把内网解析器放进通用 nameserver 会导致离开办公网络后查询持续超时,更合适的方式是仅对特定后缀使用它。若系统同时运行其他 VPN、网络过滤器或安全软件,还要确认它们没有先于 Clash 重写 DNS。

DNS 泄漏要先定义观察范围

所谓 DNS 泄漏通常指本应由指定链路处理的查询,仍被系统或应用直接发送到其他解析器。检查时不能只看一个网页给出的解析器名称,应结合系统网络设置、Clash 日志和抓包结果判断。浏览器可能启用自己的安全 DNS,移动应用也可能内置 DoH;这类请求看起来像普通 HTTPS 流量,不一定经过系统的 53 端口。若希望统一交给 Clash,应关闭应用内独立解析,或通过规则明确处理其 DoH 域名。

现象 可能断点 检查动作
所有节点域名解析失败 default 或 proxy-server-nameserver 不可达 用 IP 解析器建立最小启动链
浏览器正常,单个应用失败 应用内置 DNS、QUIC 或绕过系统代理 查看 TUN 接管与应用网络设置
内网域名无法解析 内部 DNS 未按域名分流 增加 nameserver-policy 并检查路由
解析正常但连接到错误地址 缓存、CDN 调度或 Fake-IP 映射异常 核对日志后再清理对应缓存

修改 DNS 后应重新加载配置,并确认日志里 DNS 模块成功监听,再分别测试普通域名、内网域名和节点域名。不要一遇到打不开网页就清空全部缓存,这会同时改变系统缓存、浏览器缓存和 Fake-IP 映射,使前后结果难以对比。若客户端显示已连接但完全无法上网,可以按已连接却无法上网排查清单从节点、订阅、DNS、系统代理和 TUN 依次检查。

Chapter 05 / Network stack

TUN 模式与 Fake-IP 协同

系统代理只能覆盖主动遵循代理设置的应用。命令行工具、部分游戏、独立网络栈应用以及直接发起 UDP 的程序,可能完全绕过系统代理。TUN 模式通过虚拟网络接口接管系统路由,把这些流量送入 Clash 内核,因此覆盖范围更完整。Fake-IP 则在 DNS 阶段返回一段映射地址,让内核在收到连接时恢复原始域名并执行域名规则。两者经常一起使用,但承担的是不同职责:TUN 负责把流量带进来,Fake-IP 负责保留域名语义。

TUN 字段与系统权限

tun:
  enable: true
  stack: mixed
  dns-hijack:
    - any:53
    - tcp://any:53
  auto-route: true
  auto-detect-interface: true
  strict-route: true
  mtu: 1500

dns:
  enable: true
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16

stack 决定 TUN 使用的网络栈实现。mixed 在支持的内核中兼顾兼容性与性能,若特定平台出现异常,可分别测试 systemgvisor,但不要在没有对照的情况下频繁切换。auto-route 自动写入路由,auto-detect-interface 尝试识别当前出口网卡;设备在 Wi-Fi、移动网络和有线网络之间切换时,这一项能减少手工指定接口的维护。strict-route 会更严格地防止流量绕过,但可能暴露与其他 VPN、虚拟机和容器网络的路由冲突。

TUN 启动需要系统级 VPN 或网络扩展权限。Windows 客户端可能通过服务模式提升网络操作权限;macOS 需要允许网络扩展;Android 与 iOS 会显示系统 VPN 授权。权限被拒绝时,界面开关可能短暂开启后恢复,日志中也会出现设备创建或路由写入错误。此时反复导入订阅没有作用,应先处理系统授权。macOS 的具体弹窗与恢复步骤可参考网络扩展与钥匙串处理指南

Fake-IP 的映射过程

Fake-IP 模式收到域名查询后,不立即把真实地址直接交给应用,而是从保留地址段分配一个映射值。应用连接该地址时,内核根据映射表还原域名,然后匹配 DOMAINDOMAIN-SUFFIX 或规则集。它的优势是即使应用只把目标地址交给网络层,Clash 仍能掌握原域名。映射地址不是远端服务器地址,也不应拿去做公网路由测试。看到 198.18.0.0/16 范围的结果通常表示 Fake-IP 正常参与了解析。

某些局域网发现、时间同步、打印设备、游戏平台或依赖真实 DNS 回答的程序不适合 Fake-IP,需要加入 fake-ip-filter。过滤范围应尽量具体。直接排除过大的域名集合会让大量请求回到真实地址模式,削弱域名还原效果,也可能使规则依赖 IP 匹配。出现兼容问题时先从日志确定域名,再增加单条后缀并复测,不要复制一份来源不明的超长过滤表。

MTU、UDP 与网络切换

页面能打开但部分图片、上传或特定应用卡住时,可能是路径 MTU 不合适。TUN 封装会增加额外开销,底层网络若已存在 VPN、PPPoE 或移动网络限制,1500 字节可能导致分片或丢包。可以在保留其他配置不变的前提下逐步降低 MTU,例如先测试 1400 左右的范围,并观察问题是否稳定消失。MTU 不是越小越安全,过小会增加包数量和处理开销,确认有效后应选择能够稳定工作的较大值。

UDP 问题要区分三个层面:应用是否发出 UDP、TUN 是否接管、节点协议和网络是否支持对应传输。DNS 查询、QUIC、游戏和语音都可能使用 UDP。关闭 QUIC 后浏览器恢复,只能说明故障集中在 UDP 路径,不代表 DNS 或节点整体不可用。移动设备在 Wi-Fi 与蜂窝网络切换后,旧会话可能仍绑定原接口,必要时重新连接 TUN,而不是立即清除全部配置。

接管方式 覆盖范围 适合场景
仅系统代理 遵循 HTTP 或 SOCKS 代理设置的应用 浏览器、常规桌面应用、低权限环境
TUN + redir-host 更广泛的 TCP/UDP 流量,DNS 返回真实地址 需要真实地址兼容性的环境
TUN + Fake-IP 广泛接管并保留域名匹配能力 规则分流复杂、应用绕过系统代理的设备

启用顺序建议是:先用系统代理确认节点和规则可用,再单独开启 TUN,确认路由和权限正常,最后启用 Fake-IP 并处理少量兼容例外。若 TUN 开启后整机断网,先关闭它恢复网络,再检查默认路由、DNS 劫持和其他 VPN。Windows 的服务模式、端口冲突与系统代理步骤可查看Windows 安装配置全流程

Chapter 06 / Sniffer

域名嗅探与规则还原

有些连接进入 Clash 时只携带目标 IP,没有可直接用于域名规则的主机名。域名嗅探会检查连接初期可识别的信息,例如 TLS ClientHello 中的 SNI 或 HTTP 请求中的 Host,再把得到的域名用于规则匹配。它不是读取完整业务内容,也不能保证每条连接都有可恢复域名;加密客户端握手、非标准协议、直接使用 IP 的请求以及部分 UDP 流量,都可能没有适合嗅探的字段。

基础配置与协议范围

sniffer:
  enable: true
  force-dns-mapping: true
  parse-pure-ip: true
  override-destination: false

  sniff:
    HTTP:
      ports:
        - 80
        - 8080-8880
      override-destination: true
    TLS:
      ports:
        - 443
        - 8443
    QUIC:
      ports:
        - 443

  skip-domain:
    - "+.push.apple.com"
    - "Mijia Cloud"

parse-pure-ip 允许对仅显示 IP 的目标尝试解析协议特征;force-dns-mapping 与 Fake-IP 映射配合,帮助恢复连接和 DNS 查询之间的关系。override-destination 决定嗅探得到域名后是否重写目标。全局开启重写可能改善域名规则命中,也可能让依赖原始地址的连接出现兼容问题,因此更稳妥的方式是全局保持关闭,仅在确认适合的 HTTP 等协议范围内开启。

端口范围不应无限放大。HTTP 嗅探通常覆盖明确的网页端口,TLS 主要关注 443 与业务使用的加密端口,QUIC 则集中在 UDP 443。把所有端口都交给所有协议解析器,会增加无效判断,也可能把非标准二进制协议误识别。遇到使用特殊端口的业务时,先从日志确认协议和端口,再添加范围。端口段写得过宽不会增加真实可见信息,只会扩大解析尝试。

嗅探与 Fake-IP 的关系

Fake-IP 已经能为多数经 DNS 发起的连接保留域名,嗅探更像补充路径:应用绕过系统 DNS、直接连接缓存 IP,或连接信息未能关联到映射时,嗅探可能重新获得域名。两者同时启用不意味着重复执行同一件事。Fake-IP 在解析阶段建立映射,嗅探在连接阶段观察协议元数据。排查规则命中时,应看日志最终使用的是映射域名、嗅探域名还是原始 IP。

若关闭嗅探后某个服务总是落到 MATCH,开启后能够命中域名规则,说明原连接缺少可用域名上下文。反过来,若开启后连接被送到错误策略,应检查嗅探到的域名是否属于共享 CDN、跳转域名或第三方接口。一个应用往往同时访问多个域名,不能只凭主站域名推断全部连接。可以临时提高日志级别,完成一次短测试后恢复 info,避免长期记录大量连接细节。

跳过列表与兼容边界

skip-domain 用于排除已知不适合改写或解析的域名。条目应来自实际故障验证,而不是一次性加入大范围列表。某些设备发现和推送服务会使用证书域名、连接地址与业务标识不完全一致的机制,错误重写可能造成重复连接。增加跳过项后要重新连接对应应用,因为旧连接不会自动按新规则重建。

日志表现 解释 下一步
只看到目标 IP 未获得域名或协议不可嗅探 检查 DNS 接管、协议与端口范围
获得域名但仍命中 MATCH 规则缺少该域名或顺序被截获 核对实际域名并调整规则位置
开启重写后连接失败 目标依赖原始地址或识别结果不适合重写 关闭全局重写或加入精确跳过项
浏览器正常,QUIC 异常 UDP 路径、节点能力或 QUIC 嗅探问题 关闭 QUIC 做对照并检查 TUN UDP

验证嗅探配置时,选择一个规则明确的域名,先记录关闭嗅探时的命中结果,再开启后重新建立连接进行对比。不要同时改 DNS、规则集与目标策略,否则无法判断变化来自哪一层。若只是在系统代理模式下测试浏览器,浏览器本身通常已经向代理提供域名,嗅探带来的差异可能很小;它更适合 TUN 接管、纯 IP 连接和绕过系统 DNS 的场景。

域名嗅探不能替代规则设计。恢复出域名后,仍需要具体规则在宽泛规则之前,并确保对应策略组存在。若应用访问大量动态子域名,优先使用经过核对的后缀规则或规则集,不要持续追加单个完整域名。相关术语可在术语手册中查阅,包含 SNI、Fake-IP、TUN 与规则模式之间的关系。

Chapter 07 / Merge

本地覆写与多订阅合并

订阅负责提供远端维护的节点和基础配置,本地覆写负责保存设备或个人环境特有的调整。把两者直接改在同一文件里,下一次订阅更新很可能覆盖本地内容;完全复制成静态配置又会失去节点更新。更合理的结构是把订阅视为上游输入,把端口、DNS、策略组补充、规则前置和 TUN 设置放进可重复应用的覆写层。客户端支持的覆写机制名称不同,可能叫 Merge、Mixin、Script 或全局扩展,但目标都是在更新后重新生成生效配置。

区分替换、追加与深度合并

YAML 对象可以按键合并,数组却存在不同语义。修改 dns.enable 通常只替换单个字段;处理 rules 时则要明确是前置规则、后置规则还是替换全部数组。若合并器把新数组直接覆盖旧数组,一段只含三条本地规则的覆写可能让订阅原有规则全部消失。使用客户端内置合并前,应查看最终生效配置,而不是只看覆写片段是否保存成功。

prepend-rules:
  - DOMAIN,router.local,DIRECT
  - DOMAIN-SUFFIX,corp.example,DIRECT

append-rules:
  - MATCH,总选择

override:
  mode: rule
  log-level: info
  ipv6: false

上面的结构用于说明“前置、后置、替换”三种意图,具体键名取决于客户端的合并实现,不能未经确认直接当作 mihomo 原生配置载入。mihomo 最终接收的仍是一份完整配置。验证方法是打开客户端生成的运行时配置,确认本地规则位于预期位置、策略组没有重复、最终只保留一个 MATCH。若客户端提供配置检查功能,应在每次更新后执行一次。

多订阅合并以节点层为主

同时使用多个订阅时,最稳定的方式通常是把它们声明为不同的 proxy-providers,由本地策略组通过 use 引入,而不是把多个完整配置文件直接拼接。完整配置往往都带有自己的端口、DNS、策略组和规则,同名键会覆盖,同名组会冲突,最后结果取决于合并工具的实现。节点提供者只负责节点集合,本地主配置负责统一策略和规则,职责更清楚。

proxy-providers:
  primary:
    type: http
    url: https://example.com/subscription/primary
    path: ./providers/primary.yaml
    interval: 86400
    health-check:
      enable: true
      url: https://www.gstatic.com/generate_204
      interval: 600

  backup:
    type: http
    url: https://example.com/subscription/backup
    path: ./providers/backup.yaml
    interval: 86400
    health-check:
      enable: true
      url: https://www.gstatic.com/generate_204
      interval: 900

proxy-groups:
  - name: 总选择
    type: select
    use:
      - primary
      - backup
    proxies:
      - DIRECT

示例中的订阅地址是结构示意,使用时应换成自己的有效地址,并避免把带访问凭据的链接公开到文档、截图或共享仓库。两个 provider 必须使用不同的缓存路径。健康检查间隔可以根据设备与节点数量调整,移动端不宜高频轮询大量节点。若上游节点名称重复,界面可能难以区分来源,可以在合并层使用客户端支持的前缀能力,或让不同 provider 进入独立地区组,而不是直接混在一个长列表中。

更新失败与配置漂移

多订阅环境常见的问题不是某次配置无法载入,而是运行一段时间后逐渐偏离预期。上游可能修改节点命名,导致筛选表达式失效;删除某个地区后,策略组变成空组;新增同名节点后,手动选择指向了另一来源。更新后应检查 provider 状态、策略组成员数量是否合理、关键业务规则是否仍指向存在的组。不要用虚构的固定节点数量作为监控条件,应关注“组是否为空”“引用是否存在”和“关键请求是否命中”。

跨设备同步时,不建议直接同步客户端整个数据目录。桌面端和移动端的权限、路径、TUN 接口名以及缓存位置都不同。更适合同步的是订阅入口、本地主配置模板、规则集和覆写逻辑,设备专属项留在各自客户端。WebDAV、订阅分发与手动导入的差异可继续阅读Clash 多设备配置同步方案

内容 适合远端维护 适合本地保留
节点集合 订阅或 proxy-provider 临时测试节点
公共规则集 rule-provider 少量设备与内网例外
策略组骨架 受控主配置 手动选择状态与设备差异
TUN、端口、权限相关项 通常不直接跨平台同步 按设备和系统维护

Chapter 08 / Controller

外部控制面板与运行维护

mihomo 提供外部控制接口,客户端界面和浏览器控制面板可以通过它读取策略组、切换节点、查看连接、刷新 provider 和观察日志。控制接口只负责管理正在运行的内核,不会替代配置文件。面板中临时切换策略可以立即生效,但新增规则、调整 DNS 或改变 TUN 参数仍需要修改配置并重新载入。把控制接口理解为运行状态入口,比把它当作配置编辑器更准确。

监听地址、密钥与访问范围

external-controller: 127.0.0.1:9090
secret: "your-password"

external-ui: ./ui
external-ui-name: dashboard

仅在本机使用时,控制地址应监听 127.0.0.1。设置为 0.0.0.0 会接受来自其他网络接口的连接,只有明确需要局域网管理并配置防火墙时才应采用。secret 用于接口鉴权,应使用自己生成的独立值,不要与订阅访问参数或其他账户共用。面板页面与控制接口可以部署在不同位置,但浏览器仍必须能够访问接口地址,并满足协议、安全上下文和跨域条件。

远程管理不应直接把控制端口暴露到公共网络。更稳妥的方式是在可信局域网中访问,或先通过受控的安全隧道进入设备网络。若只需要查看家中路由器上的 Clash 状态,应限制来源地址并保留防火墙规则。控制接口能够切换出口、终止连接和读取运行信息,访问范围应与路由器管理页面同等谨慎。

连接页与日志如何配合

连接列表通常显示来源、目标、协议、规则、策略链和流量状态。排查某个应用时,先清空观察范围或按目标筛选,再重新触发一次请求。策略链能说明请求先进入哪个业务组,最终落到哪个节点;规则字段能说明是哪条规则完成匹配。如果页面打不开但连接列表完全没有记录,问题通常发生在流量进入内核之前,应回到系统代理、TUN 路由或应用自身代理设置检查。

日志级别保持 info 适合日常使用。需要定位 DNS、握手或嗅探细节时,可以短时间切换到 debug,复现一次后立即恢复。长期开启详细日志会增加输出量,也会让真正的错误被大量正常记录淹没。分享日志前应检查其中的订阅地址、内网域名、目标地址和认证字段,只截取与故障时间点相关的片段。

provider 刷新与策略状态

控制面板通常允许手动刷新代理提供者和规则提供者。刷新按钮只触发对应资源更新,不等于重载整个配置。代理 provider 更新后,新节点会进入引用它的策略组,但当前连接不会全部自动迁移;规则 provider 更新后,新请求按新规则匹配,已有长连接仍可能维持原策略。验证更新结果时应重新建立测试连接,并查看 provider 的最后错误状态,而不是只看按钮是否完成旋转。

保存策略选择依赖 profile.store-selected 以及客户端的数据目录权限。若每次重启都回到默认节点,先确认该字段是否在最终配置中,再检查客户端是否能写入运行目录。多份配置使用相同组名时,持久化状态也可能让切换后的结果看起来与默认配置不一致。测试时可以新建一个名称明确的组,确认保存机制正常后再处理旧状态。

面板能力 适合用途 不能替代
策略切换 即时选择出口与对照测试 策略组结构设计
连接查看 确认规则、策略链和协议 系统层抓包与路由检查
Provider 刷新 更新节点集合或规则资源 完整配置重载
日志观察 定位解析、连接与规则错误 长期性能结论

一套可重复的维护顺序

日常维护可以固定为四步:先更新订阅与 provider,确认所有资源加载完成;再验证“总选择”和关键业务组仍有可用成员;随后用一个域名请求和一个需要 TUN 的应用检查规则链;最后恢复常用日志级别并导出当前可用配置。若更新后异常,先比较变更范围:只有节点变化就检查 provider 和策略组,只有规则集变化就检查命中顺序,客户端升级或系统网络变化后才重点检查权限与路由。

当控制面板无法连接时,先确认内核仍在运行,再检查控制地址、端口占用和密钥。浏览器访问本机面板却连接远端设备接口时,还要确认地址不是写成浏览器所在设备的 127.0.0.1。如果客户端自身已经内置控制页面,优先使用内置入口,它通常会自动处理当前端口和认证信息。需要重新选择客户端时,可前往选型指南查看平台差异,安装包统一从下载页进入。

下一步

按单一变量调整配置

先从当前问题所属章节选择一个改动,重新加载后通过日志和连接页验证。需要回到基础操作时查看快速上手教程;需要核对专业名词时打开术语手册;遇到客户端已连接但网络中断,可使用逐项排查清单定位断点。