先看结构:入口、解析、节点、策略与规则

打开 Clash 配置文件,不必从第一行一路猜到最后。先找顶层字段:mixed-port 决定应用连到哪里,dns 管理内置域名解析,proxies 保存节点,proxy-groups 组织可选出口,rules 决定每条连接交给谁处理。理解这五部分,就能分清“文件能加载”和“连接能按预期转发”是两件事。

典型引用链是:规则命中策略组,策略组再选中节点;如果规则目标是 DIRECT,则直接连接目标,不经过远端代理节点。配置中各个顶层字段的排列通常不决定执行先后,但 rules 列表的上下顺序会直接改变匹配结果。

配置部分负责的事情优先检查项
mixed-port接收 HTTP 与 SOCKS5 代理连接端口占用、应用填写地址
dns内置解析器及增强模式是否启用、请求是否进入内核
proxies远端节点的连接参数协议、地址、端口、认证
proxy-groups选择或测试出口名称引用、当前选项
rules按条件分配连接匹配顺序、最终兜底策略

YAML 写法:先检查缩进,再检查字段含义

YAML 用缩进表达层级。建议统一使用两个空格,不使用 Tab。同级字段左侧对齐,列表项以短横线加空格开头。扩展名可以是 .yaml 或 .yml,但把文本改成这个扩展名,不会自动修复语法。

proxy-groups:
  - name: "出口选择"
    type: select
    proxies:
      - DIRECT

这段配置包含两个不同位置的概念:顶层 proxy-groups 是策略组列表;组内的 proxies 是可选项名称列表,并不是完整节点参数。name、type 与组内 proxies 属于同一个对象,所以它们的缩进一致。

编辑器里重点检查四处

  • 冒号后的空格:写成 mode: rule,不要把键和值粘在一起。
  • 布尔值:allow-lan: false 使用布尔值,不需要把 false 包进引号。
  • 带特殊字符的字符串:节点名称、密码和包含 # 的值建议使用引号,避免被误当成注释等语法。
  • 重复键:不要在文件末尾再添加第二个顶层 dns 或 rules。不同解析器可能拒绝加载,也可能覆盖前面的值。

语法错误通常会给出行号,但真正的问题可能在上一行。例如列表缩进少了两个空格,报错可能落在下一个字段上。定位时先看报错行,再向上检查最近一组字段与列表结构。

顶层设置:mixed-port、allow-lan 与 mode

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

mixed-port: 7890 表示同一个监听端口可以接收 HTTP 和 SOCKS5 代理连接。仅供本机使用时,应用可填写地址 127.0.0.1、端口 7890。端口号不是固定要求;如果日志提示 address already in use,先检查是否有第二个客户端或其他程序占用它。

allow-lan: false 限制局域网设备通过该代理入口接入。需要共享时,不仅要调整这个字段,还要核对监听地址、系统防火墙和当前网络是否可信。不要为了排查本机连接问题,直接把所有入站限制都放开。

三种模式与 rules 的关系

  • rule:按规则列表决定出口,适合验证分流配置。
  • global:通过全局策略选择出口,不按普通规则列表逐条分流。
  • direct:连接走直连;此时修改代理规则通常看不到预期变化。

log-level: info 适合日常查看连接与错误;排查时可以短暂改成 debug,完成后恢复,避免日志过多。ipv6: false 是本文起步配置的取舍,不代表所有网络都应该关闭 IPv6。需要 IPv6 时,应连同 DNS 返回、系统路由和节点能力一起检查。

dns 段:启用解析器与选择增强模式

dns 是一个嵌套对象。先确定内置解析是否启用,再考虑 enhanced-mode。下面是常见的结构示例,使用传统 IP 地址作为上游,便于看清字段关系;它不是对所有网络环境的通用推荐。

dns:
  enable: true
  ipv6: false
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  nameserver:
    - 223.5.5.5
    - 119.29.29.29

nameserver 是上游解析服务器列表。这里的普通 IP 上游通常使用传统 DNS 传输;如需 DoH、DoT 或更细的分流解析,应核对内核支持与上游可达性。顶层 ipv6 与 dns.ipv6 不应被当成完全相同的开关,后者主要影响内置 DNS 对 AAAA 查询的处理。

fake-ip 会为符合处理条件的域名返回合成地址,内核保存地址与域名之间的映射,再按连接对应的域名处理流量。198.18.0.1/16 位于基准测试用途的保留地址空间,不是某个节点的公网地址,也不应该填进节点的 server 字段。

为什么写了 dns,系统解析仍没有变化?

enable: true 只是启用内置 DNS 功能,并不保证整个系统的 DNS 请求都进入它。通过代理协议传入域名、由系统直接解析域名,以及由 TUN 配合 DNS 劫持接入,是不同路径。排查时先确定应用使用哪条路径,再查看客户端是否配置了对应的 DNS 接管。

遇到局域网名称、游戏或设备发现异常,可以按实际需求研究 fake-ip-filter,让特定域名绕开合成地址。不要直接复制一长串来源不明的过滤项;过滤后的真实解析结果和后续路由仍然需要验证。

proxies 与 proxy-groups:节点参数和出口名称分开看

顶层 proxies 保存节点对象。每个对象至少需要一个用于引用的 name,其他必需字段由协议决定。例如 Shadowsocks 节点通常需要 type、server、port、cipher 和 password;其他协议还可能涉及 UUID、TLS、传输层等参数。不能把一个协议的字段表直接套给另一个协议。

节点参数应来自实际服务配置或可信订阅。本文不提供虚构服务器与认证信息,后面的完整示例使用 proxies: [],表示空节点列表。这样可以先验证 YAML、监听端口和规则引用,不会把一个看起来完整、实际上连不通的节点当成可用配置。

proxies: []

proxy-groups:
  - name: "出口选择"
    type: select
    proxies:
      - DIRECT

select 是手动选择组。组名“出口选择”会成为规则可以引用的目标,组内目前只有内置的 DIRECT。接入真实节点时,需要先在顶层节点列表中保留完整节点对象,再将其 name 原样加入组内列表;空格、大小写和符号都应一致。仅添加一个节点名称,不会自动生成节点。

自动测速组还需要什么?

url-test 等组类型还涉及测速地址、检测间隔等设置。检测结果只代表特定测试请求下的情况,不等同于所有网站都能访问,也不等同于实际下载带宽。刚开始拆读配置时,建议先使用 select 验证每个出口,再引入自动选择逻辑。

rules 段:从上往下匹配,MATCH 放在最后

在规则模式下,内核按列表顺序寻找匹配项,命中后采用该项指定的目标。目标可以是策略组、节点名称,也可以是 DIRECT、REJECT 等内置策略。为了便于维护,通常让规则指向策略组,而不是把所有节点名称散落在规则里。

rules:
  - DOMAIN,example.com,DIRECT
  - DOMAIN-SUFFIX,example.org,出口选择
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - MATCH,出口选择
  • DOMAIN 精确匹配域名。这里仅匹配 example.com,不包含它的全部子域名。
  • DOMAIN-SUFFIX 匹配域名后缀。这里可以覆盖 example.org 及其子域名。
  • IP-CIDR 按目标 IPv4 地址网段匹配。192.168.0.0/16 只是常见私网网段之一,不代表全部局域网范围。
  • no-resolve 表示不为这一条 IP 规则主动触发域名解析;目标 IP 已知时仍可参与匹配。
  • MATCH 是兜底项,接收前面没有匹配到的连接,通常放在列表最后。

这里用保留的示例域名演示语法,没有配置真实业务分流。若把 MATCH,出口选择 移到第一行,后面的这些规则就没有机会被命中。另一个常见误区是认为文件里的段落顺序会决定规则优先级:真正需要关注的是 rules 内部的条目顺序。

使用 GEOIP 或 RULE-SET 时,还会依赖相应数据库或规则提供器。若日志提示资源加载失败,应先处理资源问题。不要只反复调整规则文本,却忽略规则所引用的数据根本没有加载。

最小可用配置:先验证直连链路,再加入真实节点

下面是一份完整的本机直连验证配置,包含本文讲到的主要层级。它能建立代理监听入口,并通过规则和策略组将请求直连出去;它不包含远端代理节点,不能用于验证远端代理服务。与前面的 Fake-IP 片段不同,这里选择 redir-host,减少初次验证时对合成地址映射的依赖。

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

dns:
  enable: true
  ipv6: false
  enhanced-mode: redir-host
  nameserver:
    - 223.5.5.5
    - 119.29.29.29

proxies: []

proxy-groups:
  - name: "出口选择"
    type: select
    proxies:
      - DIRECT

rules:
  - DOMAIN,example.com,DIRECT
  - IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - MATCH,出口选择

保存与验证步骤

  1. 把现有可用配置另存一份备份,再将上面的内容保存为 UTF-8 编码的 config.yaml。确认编辑器没有自动追加 .txt。
  2. 使用 mihomo 命令行时,可执行 mihomo -t -f config.yaml 检查配置。图形客户端应使用自身提供的配置校验或导入功能;入口名称以当前版本界面为准。
  3. 校验通过后加载配置,确认日志没有端口占用、字段不支持或策略不存在等错误。图形客户端可能对原文件叠加端口、DNS、TUN 等设置,应查看最终运行配置。
  4. 显式指定代理发起一次请求,不依赖系统代理是否启用。能否访问测试站点,也受当前网络自身的直连能力影响。
curl -I --proxy http://127.0.0.1:7890 https://example.com

在 Windows PowerShell 中,如果 curl 被解释成其他命令,可改用 curl.exe。测试时同时查看客户端连接记录:目标应是 example.com,规则应命中精确域名项,出口应为 DIRECT。只看到 HTTP 响应而不检查连接记录,无法确认请求是否按预期经过了配置中的链路。

完成直连验证后,再从实际订阅或服务配置接入节点,把节点名称加入“出口选择”,并在客户端手动选中它。每次只改一类内容:先节点,再策略组,最后分流规则。这样出现问题时,能直接定位到最近修改的部分。

加载失败与规则不生效:按错误所在层排查

现象优先检查处理动作
YAML 解析报错缩进、Tab、冒号、引号检查报错行及其上一组列表
策略或节点不存在规则目标与组内名称与对应的 name 逐字核对
7890 无法监听其他客户端或后台内核关闭重复进程,或更换端口并同步应用设置
规则修改没有效果当前模式、启用配置、覆盖设置切回 rule,确认运行配置,再新建连接
更新订阅后修改消失修改位置是否为订阅生成文件使用客户端支持的覆写或合并机制

规则与出口调整后,已有连接可能继续沿用建立时的路径。验证时应新建请求,必要时关闭目标应用的旧连接,再观察新的规则命中记录。不要因为某个长连接仍走原出口,就判断配置没有加载。

订阅管理同样需要区分原始内容与运行结果。客户端可能把订阅、全局设置和覆写规则合成为最终配置;直接编辑订阅下载文件,下一次更新就可能被替换。需要长期保留的端口或分流修改,应使用该客户端文档明确支持的覆写入口,并在更新后检查最终配置。

还没有客户端时,可先到客户端下载页按操作系统选择;需要了解导入、启用系统代理和首次连接流程,可继续查看配置教程。分享日志或配置求助前,记得移除订阅链接、密码、UUID 等访问凭据。