跳到主要内容

首页 / 博客 / 配置基础

Clash 配置文件 YAML 结构详解:八个顶层字段各管什么

配置基础2026-08-021769 字约 4 分钟
Clash 配置文件 YAML 结构详解:八个顶层字段各管什么

订阅链接返回的就是一份 YAML。看懂它,你才能改它。

这篇按顶层字段的顺序过一遍,每一段都给出可以直接粘贴的写法。

一份最小可用配置

先看全貌,后面逐段拆:

mixed-port: 7897
allow-lan: false
mode: rule
log-level: info
ipv6: false
external-controller: 127.0.0.1:9090

dns:
  enable: true
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  nameserver: [223.5.5.5, 119.29.29.29]
  fallback: [https://1.1.1.1/dns-query]

proxies:
  - name: "HK-01"
    type: trojan
    server: hk01.example.com
    port: 443
    password: "your-password"
    udp: true

proxy-groups:
  - name: "PROXY"
    type: select
    proxies: ["AUTO", "HK-01"]
  - name: "AUTO"
    type: url-test
    proxies: ["HK-01"]
    url: "http://www.gstatic.com/generate_204"
    interval: 300

rules:
  - DOMAIN-SUFFIX,cn,DIRECT
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

这份配置能跑。下面把每个字段说清楚。

顶层字段的职责划分1基础设置端口、模式、日志、局域网开关 —— 决定客户端怎么监听2dns域名怎么解析 —— 决定去哪个 IP3proxies有哪些节点 —— 出口清单4proxy-groups怎么选节点 —— 策略层5rules什么流量走哪个策略 —— 决策层6rule-providers远程规则集 —— 规则的外部来源
从上到下:先能跑,再能解析,再有出口,再有策略,最后有规则

一、基础设置

mixed-port: 7897          # HTTP + SOCKS5 共用端口(推荐)
# port: 7890              # 单独的 HTTP 端口,一般不用
# socks-port: 7891        # 单独的 SOCKS5 端口,一般不用
redir-port: 7892          # 透明代理(Linux/macOS)
tproxy-port: 7893         # TProxy(Linux)
allow-lan: false          # 是否允许局域网设备连接
bind-address: "*"         # allow-lan 为 true 时的监听地址
mode: rule                # rule / global / direct
log-level: info           # silent / error / warning / info / debug
ipv6: false               # 是否启用 IPv6
unified-delay: true       # 统一延迟计算,测速更接近真实
tcp-concurrent: true      # 并发握手,多 IP 域名连接更快
external-controller: 127.0.0.1:9090
secret: ""                # 外部控制 API 密码

二、dns

DNS 段决定了「域名解析成什么 IP」,直接影响分流准确性和流媒体解锁。

dns:
  enable: true
  listen: 0.0.0.0:1053
  ipv6: false
  enhanced-mode: fake-ip           # fake-ip 或 redir-host
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter:                  # 这些域名不用 fake-ip
    - "*.lan"
    - "*.local"
    - "+.pool.ntp.org"
    - "localhost.ptlogin2.qq.com"
  default-nameserver: [223.5.5.5]  # 用于解析下面的 DoH 域名
  nameserver:                      # 主 DNS
    - 223.5.5.5
    - https://doh.pub/dns-query
  fallback:                        # 境外 DNS
    - https://1.1.1.1/dns-query
    - tls://8.8.4.4:853
  fallback-filter:
    geoip: true
    geoip-code: CN

enhanced-mode 的两种取值差别很大,单独写了一篇:DNS 配置详解与 fake-ip 原理

三、proxies

节点清单。每种协议的字段不同,常见几种:

proxies:
  # Trojan
  - name: "HK-Trojan"
    type: trojan
    server: hk.example.com
    port: 443
    password: "pwd"
    sni: hk.example.com
    udp: true

  # VMess
  - name: "JP-VMess"
    type: vmess
    server: jp.example.com
    port: 443
    uuid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    alterId: 0
    cipher: auto
    tls: true
    network: ws
    ws-opts:
      path: /ws
      headers: { Host: jp.example.com }

  # Shadowsocks
  - name: "SG-SS"
    type: ss
    server: sg.example.com
    port: 8388
    cipher: aes-256-gcm
    password: "pwd"
    udp: true

  # Hysteria2(Mihomo 支持)
  - name: "US-HY2"
    type: hysteria2
    server: us.example.com
    port: 443
    password: "pwd"
    sni: us.example.com

四、proxy-groups

策略组,决定「一类流量用哪个节点」。五种类型的差异见策略组类型详解,这里给个常用结构:

proxy-groups:
  - name: "🚀 节点选择"
    type: select
    proxies: ["♻️ 自动选择", "🇭🇰 香港", "🇯🇵 日本", "DIRECT"]

  - name: "♻️ 自动选择"
    type: url-test
    include-all: true            # Mihomo:自动纳入所有节点
    filter: "香港|HK|Hong"        # 只要匹配的
    url: "http://www.gstatic.com/generate_204"
    interval: 300
    tolerance: 50

  - name: "🎬 流媒体"
    type: select
    proxies: ["🇭🇰 香港", "🇸🇬 新加坡", "🚀 节点选择"]

  - name: "🐟 漏网之鱼"
    type: select
    proxies: ["🚀 节点选择", "DIRECT"]

include-all + filter 是 Mihomo 的实用特性:不用手写节点名,按正则自动收编。写法见节点命名与分组正则

五、rules

从上往下逐条匹配,第一条命中即生效

rules:
  # 局域网直连(必须放最前面)
  - IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve

  # 具体域名规则
  - DOMAIN-SUFFIX,openai.com,🚀 节点选择
  - DOMAIN-SUFFIX,netflix.com,🎬 流媒体
  - DOMAIN-KEYWORD,google,🚀 节点选择

  # 规则集
  - RULE-SET,cn-domain,DIRECT
  - RULE-SET,proxy-domain,🚀 节点选择

  # 地理位置兜底
  - GEOIP,CN,DIRECT
  - MATCH,🐟 漏网之鱼

规则类型全表见规则类型速查

六、rule-providers

把规则列表放在外部文件里,定期自动更新:

rule-providers:
  cn-domain:
    type: http
    behavior: domain
    format: text
    url: "https://example.com/rules/cn.txt"
    path: ./ruleset/cn-domain.txt
    interval: 86400

  private-ip:
    type: http
    behavior: ipcidr
    url: "https://example.com/rules/private.txt"
    path: ./ruleset/private.txt
    interval: 86400

behavior 有三种:domain(域名列表)、ipcidr(IP 段)、classical(完整规则语法)。用错了会导致规则不生效但不报错——这是个常见坑。详见 rule-providers 完整用法

七、proxy-providers

节点也可以来自外部:

proxy-providers:
  main:
    type: http
    url: "你的订阅链接"
    interval: 3600
    path: ./providers/main.yaml
    health-check:
      enable: true
      url: http://www.gstatic.com/generate_204
      interval: 300

然后在策略组里用 use: [main] 引用。这种写法适合多订阅合并,见 多 Profile 管理与合并

八、tun

TUN 相关配置(Clash Verge 界面里也能配,但知道底下是什么有好处):

tun:
  enable: true
  stack: mixed                 # gvisor / system / mixed
  auto-route: true
  auto-detect-interface: true
  dns-hijack: ["any:53"]
  strict-route: false
  mtu: 1500

原理见 TUN 底层:虚拟网卡、路由表与 DNS 劫持

YAML 语法上最容易犯的三个错

写 YAML 时的注意事项缩进只能用空格,不能用 Tab —— 用了 Tab 会直接解析失败
报错信息里的 line 号一般很准,直接跳到那一行看
  1. 缩进用空格,不能用 Tab。 大多数报错都是这个。
  2. 冒号后面要有空格。 port:443 是错的,port: 443 才对。
  3. 特殊字符要加引号。 密码里带 @#: 的,必须用引号包起来:password: "p@ss#123"

完整的报错对照见 YAML 报错速查

改配置的正确姿势

直接改订阅下载下来的文件,下次自动更新就被覆盖了

正确做法是用 Clash Verge 的「全局扩展配置 / Merge」,在不动原文件的前提下追加内容:

# 全局扩展配置
prepend-rules:
  - DOMAIN-SUFFIX,mycompany.com,DIRECT

append-rules:
  - DOMAIN-SUFFIX,example.net,🚀 节点选择

prepend-proxy-groups:
  - name: "我的分组"
    type: select
    proxies: ["DIRECT", "🚀 节点选择"]

详见 用 Merge 与 Script 扩展订阅

小结

八个顶层字段,职责很清楚:基础设置管监听,dns 管解析,proxies 管出口,proxy-groups 管策略,rules 管决策,两个 providers 管外部来源,tun 管网络层接管。

改配置之前先想清楚要改哪一层,然后用 Merge 而不是直接编辑订阅文件。


相关文档