跳到主要內容

首頁 / 部落格 / 設定基礎

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 而不是直接編輯訂閱檔案。


相關文件