1. 首页
  2. 博客
  3. Clash 配置文件详解:YAML 各字段从 port 到 rules 逐段解析

Clash 配置文件详解:YAML 各字段从 port 到 rules 逐段解析

逐段拆解 Clash 配置文件的 YAML 结构:混合端口、代理组、规则、DNS 各字段的含义与写法,配合示例看懂每一行配置的作用。

配置文件的本质:一份 YAML 文本

Clash 与 mihomo(Clash Meta)内核的全部行为,都由一份 YAML 格式的配置文件决定。订阅链接下载到本地的文件,本质上就是服务方预先写好的一份 YAML;客户端界面上的模式切换、节点选择,最终也都落在这份文件的字段上。看懂结构之后,换端口、加规则、调 DNS,都只是找到对应段落改几行的事。

YAML 语法只需记住三条:缩进只用空格、禁用 Tab,层级通常缩进两格;键与值用英文冒号分隔,冒号后面必须跟一个空格;短横线开头的是列表项,# 之后的内容是注释。整份配置由若干顶层字段拼成,常见字段与职责如下。

顶层字段作用
mixed-port混合代理端口,HTTP 与 SOCKS5 请求共用
allow-lan是否允许局域网内其他设备接入
mode工作模式:rule 规则 / global 全局 / direct 直连
log-level日志输出的详细程度
external-controller内核 API 监听地址,网页面板由此通信
dns内置 DNS 解析设置
proxies代理节点列表
proxy-groups代理组,客户端界面上切换的对象
rules分流规则,自上而下逐条匹配
tunTUN 虚拟网卡模式(仅 mihomo)

其中 proxies、proxy-groups、rules 三段决定流量怎么走,是本文重点;dns 段决定域名如何解析;其余字段控制端口与运行行为。下面逐段展开。

端口与全局字段:mixed-port 到 external-controller

mixed-port: 7890
allow-lan: false
bind-address: "*"
mode: rule
log-level: info
external-controller: 127.0.0.1:9090

mixed-port 是混合端口,HTTP 与 SOCKS5 请求都从这里进入内核,绝大多数客户端与订阅默认使用 7890。旧配置里分开写的 port(HTTP 专用)与 socks-port 仍然有效,新配置保留一个 mixed-port 即可。

  • allow-lan:设为 true 后,同一局域网的手机、平板可以把本机当作代理网关;bind-address 控制监听哪块网卡。公共网络环境下保持 false。
  • mode:rule 按 rules 段分流;global 所有流量走选定代理组;direct 全部直连。客户端界面上的模式切换,改的就是这一项。
  • log-level:日常 info 足够;排查连接问题时临时调成 debug;silent 则完全不输出。
  • external-controller:内核的 RESTful API 监听地址,metacubexd、yacd 等网页面板通过它读取状态、切换节点;另起一行写 secret 可以设置访问密钥,避免端口暴露后被随意控制。

mihomo 配置里还常见 unified-delaytcp-concurrentfind-process-mode 等扩展字段,这些是 Meta 内核专有;原版 Clash 读到不认识的键会直接报错,混用内核时需要留意。

dns 段:域名怎么解析

dns:
  enable: true
  listen: 0.0.0.0:1053
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  nameserver:
    - 223.5.5.5
    - 119.29.29.29
  fallback:
    - tls://1.1.1.1
    - https://dns.google/dns-query
  fake-ip-filter:
    - "*.lan"
    - "*.local"

enable 是总开关,使用 TUN 模式时必须开启;listen 是内置 DNS 服务的监听地址,系统把域名查询发到这里,由内核按配置向上游转发。

  • enhanced-mode:fake-ip 模式下内核先返回一个假 IP,等连接建立后再按域名分流,速度快、判断准;redir-host 是旧模式,新内核已逐步弃用,保持 fake-ip 即可。
  • fake-ip-range:假 IP 地址池,默认 198.18.0.1/16,一般不需要改动。
  • nameserver:默认上游解析器,支持三种写法——纯 IP 走 UDP,tls:// 开头走 DoT,https:// 开头走 DoH。
  • fallback:解析海外域名的上游,属旧版写法;mihomo 更推荐 nameserver-policy,可以按域名后缀分组指定不同上游。
  • fake-ip-filter:名单内的域名不返回假 IP,局域网主机名、部分扫码登录域名常放在这里。

什么时候生效

dns 段只在内核接管流量时起作用。纯系统代理模式下,浏览器自行解析域名,dns 段不参与;TUN 模式下所有查询都经过内核,这一段的配置才真正生效。

proxies 段:每个短横线就是一个节点

proxies:
  - name: "香港 01"
    type: ss
    server: hk1.example.com
    port: 8388
    cipher: aes-128-gcm
    password: "example-password"
    udp: true
  - name: "日本 01"
    type: vmess
    server: jp1.example.com
    port: 443
    uuid: 00000000-0000-0000-0000-000000000000
    alterId: 0
    cipher: auto
    tls: true
    network: ws

proxies 是节点列表,每个短横线条目代表一个节点。name 是显示名,type 是协议,serverport 是服务器地址,其余字段由协议决定:ss 需要 cipher 与 password;vmess 需要 uuid、alterId 与 cipher;vless 需要 uuid;trojan 需要 password 与 sni;hysteria2 需要 password。udp: true 表示允许转发 UDP 流量。

mihomo 支持的协议比原版 Clash 多:原版有 ss、ssr、vmess、trojan、snell 等,Meta 内核增加了 vless、hysteria、hysteria2、tuic 等。这一段几乎总是由订阅自动生成,手动修改之前先确认一件事:下次更新订阅时,手改的内容会被覆盖。

proxy-groups 段:界面上切换的对象

proxy-groups:
  - name: "自动选择"
    type: url-test
    proxies:
      - "香港 01"
      - "日本 01"
    url: "http://www.gstatic.com/generate_204"
    interval: 300
    tolerance: 50
  - name: "手动选择"
    type: select
    proxies:
      - "自动选择"
      - "香港 01"
      - "日本 01"
      - DIRECT

客户端界面上点选的从来不是单个节点,而是代理组。type 有四种:select 手动选择;url-test 按延迟自动选最快;fallback 按可用性依次切换;load-balance 在多个节点之间分摊连接。

  • url:延迟测试的目标地址,常用 http://www.gstatic.com/generate_204。
  • interval:自动测速间隔,单位秒,300 即每五分钟测一次。
  • tolerance:容差,单位毫秒;新测出的节点延迟比当前节点低出这个数值才切换,避免来回跳动。

组的 proxies 列表里既可以写节点名,也可以写另一个组名,形成「手动选择 → 自动选择 → 若干节点」的嵌套;还可以写 DIRECT 与 REJECT 两个内置策略。规则段引用的是组名,节点随订阅更新更换,组结构保持不变。

rules 段:自上而下,命中即停

rules:
  - DOMAIN-SUFFIX,ads.example.com,REJECT
  - DOMAIN-KEYWORD,bilibili,DIRECT
  - GEOSITE,cn,DIRECT
  - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
  - GEOIP,CN,DIRECT,no-resolve
  - MATCH,手动选择

规则从上到下逐条匹配,命中即停止,顺序就是优先级;写在最后的 MATCH 是兜底,接住所有没被前面规则命中的流量。每条规则是三段结构:类型、匹配值、策略目标。策略目标可以是代理组名、节点名,也可以是 DIRECT(直连)或 REJECT(拒绝)。

规则类型匹配对象示例
DOMAIN完整域名DOMAIN,www.example.com,PROXY
DOMAIN-SUFFIX域名后缀DOMAIN-SUFFIX,google.com,PROXY
DOMAIN-KEYWORD域名关键词DOMAIN-KEYWORD,bilibili,DIRECT
GEOSITE域名分类库(仅 mihomo)GEOSITE,cn,DIRECT
IP-CIDR目标 IP 段IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
GEOIPIP 归属地GEOIP,CN,DIRECT
DST-PORT目标端口DST-PORT,443,PROXY
PROCESS-NAME进程名PROCESS-NAME,telegram.exe,PROXY
MATCH兜底,匹配全部MATCH,PROXY

两点容易出错。其一,IP-CIDR 与 GEOIP 这类按 IP 判断的规则,对域名请求会触发一次 DNS 解析;加上 no-resolve 参数可以避免提前解析,把判断留给后面的域名规则。其二,GEOSITE 只有 mihomo 支持,依赖 geosite 数据文件,原版 Clash 读到会直接报错;GEOIP 则两个内核都支持,数据文件格式随内核不同。

修改后的生效方式与常见报错

桌面客户端改完配置后,在配置页面点重载即可,mihomo 支持热重载,不必重启程序;命令行运行的 mihomo 可以通过 API 提交新配置完成更新。

YAML 报错高发区

缩进里混入了 Tab;冒号打成中文全角「:」;冒号后漏了空格;列表项缩进与上一项不齐;节点名里带冒号或特殊符号却没加引号。客户端启动失败提示「yaml: line xx」时,按行号回去检查这几项,绝大多数问题出在这里。

另外两类常见问题:一是端口冲突,7890 被其他程序占用时内核启动失败,换掉 mixed-port 或结束占用进程;二是改了 rules 却不生效,多半是前面有更宽的规则先命中,把 log-level 调成 debug,日志里的规则匹配记录会显示每条流量实际命中了哪一条。

配置文件的结构就这几段:端口字段决定入口,dns 决定解析,proxies 是节点清单,proxy-groups 是选择开关,rules 是调度表。按这个顺序读一遍自己的订阅配置,每一行都能对上号。

下载 Clash 客户端

全平台客户端与内核按平台整理,版本号逐条列明。

下载Clash