Skip to content

Clash 订阅文件 config.yaml 全面详解

Clash 订阅文件是Clash内核程序的核心文件,它决定了程序的监听端口、外部端口、DNS解析、流量分流。掌握订阅配置,可以让你精确控制网络流量的走向,实现广告拦截、国内外分流、故障自动切换等高级功能。

第一部分:基础设置 (General)

这部分配置决定了 Clash 的基本运行行为,如监听端口、允许局域网连接、日志级别等,这是clash内核启动的必要条件。通常按常规设置就好

yaml
# HTTP(S) 代理端口
port: 7890

# SOCKS5 代理端口
socks-port: 7891

# 混合端口(HTTP 和 SOCKS5 共用一个端口),通常推荐使用这个,替代上面两个
mixed-port: 7890

# 允许局域网其他设备连接(手机/电视盒子连电脑代理需开启此项)
allow-lan: true

# 绑定 IP,仅当 allow-lan 为 true 时生效
# '*' 表示绑定所有网卡,也可以指定特定 IP 如 192.168.1.100
bind-address: '*'

# 运行模式
# rule: 规则模式(最常用,根据规则决定流量走向)
# global: 全局模式(所有流量走代理)
# direct: 直连模式(所有流量不走代理)
mode: rule

# 日志级别
# info / warning / error / debug / silent
log-level: info

# 是否开启 IPv6 支持
ipv6: false

# 外部控制控制器(API),主要用于面板控制(如 Dashboard)
external-controller: 127.0.0.1:9090

# 外部控制器的访问密钥(可选)
secret: ""

第二部分:DNS

DNS 是 Clash 订阅中最复杂也是最关键的部分。错误的 DNS 订阅会导致国内网站访问慢、无法访问。

  • DNS模式推荐fake-ip能有效防止DNS污染,但是要注意维护好fake-ip-filter白名单。
  • default-nameserver是设置国内DNS解析,用来解析下面的nameserver所配置域名,nameserver才是主要DNS解析服务器
  • fallback 与nameserver 同时发起请求拿到结果,如果是非CN的IP,需要等待fallback返回
yaml
dns:
  # 是否启用 Clash 内置 DNS 节点
  enable: true

  # 监听端口(处理 DNS 请求的端口)
  listen: 0.0.0.0:53

  # 运行模式
  # fake-ip: 返回虚拟 IP,极大提高响应速度,防止 DNS 污染(推荐)
  # redir-host: 真实解析 IP,更传统,但在部分环境下可能较慢
  enhanced-mode: fake-ip

  # Fake-IP 过滤池(这些域名不会返回 Fake-IP,而是真实解析)
  # 通常用于解决部分局域网设备或特定应用无法识别 Fake-IP 的问题
  fake-ip-filter:
    - '*.lan'
    - '*.local'
    - localhost.ptlogin2.qq.com

  # 默认 DNS,用于解析下面 nameserver 中填写的 DoH/DoT 域名的 IP
  # 必须是 IP 形式,尽量使用国内稳定 DNS
  default-nameserver:
    - 223.5.5.5
    - 119.29.29.29

  # 主要 DNS 节点
  # Search 过程:Clash 会并发向这里的所有节点发起解析请求
  nameserver:
    - https://doh.pub/dns-query
    - https://dns.alidns.com/dns-query
    
  # 后备 DNS 节点
  # 只有当 nameserver 中的节点解析结果为国外 IP(非 CN)时,
  # 才会采用 fallback 中的解析结果(通常 fallback 填国外 DNS)
  # 逻辑:同时请求 nameserver 和 fallback -> 拿到 nameserver 结果 -> 判断是否为 CN IP -> 是则直接返回,否则等待 fallback 结果
  fallback:
    - https://1.1.1.1/dns-query
    - https://dns.google/dns-query

  # 强制 fallback 的域名
  # 不管 nameserver 结果是不是 CN IP,只要域名匹配列表,就必须等待 fallback 结果
  fallback-filter:
    geoip: true # 只要 nameserver 解析结果的 IP 地理位置显示不是 CN,就采用 fallback 结果
    ipcidr: # 该网段内的 IP 视为污染,强制使用 fallback
      - 240.0.0.0/4

第三部分:代理节点 (Proxies)

这里定义具体的代理节点信息,不同协议写法会不一样,需要根据协议要求填写。需要你熟悉你正在使用的协议。

yaml
proxies:
  # Shadowsocks 协议示例
  - name: "SS节点"
    type: ss
    server: server.com
    port: 443
    cipher: chacha20-ietf-poly1305
    password: "password"
    # udp: true

  # VMess 协议示例
  - name: "VMess节点"
    type: vmess
    server: server.com
    port: 443
    uuid: "uuid-string"
    alterId: 0
    cipher: auto
    # network: ws
    # ws-opts:
    #   path: /path
    #   headers:
    #     Host: v2ray.com

  # Trojan 协议示例
  - name: "Trojan节点"
    type: trojan
    server: server.com
    port: 443
    password: "password"
    udp: true
    sni: example.com

第四部分:策略组 (Proxy Groups)

策略组是 Clash 的灵魂。通过它,你可以将不同的节点“打包”成一种策略,比如自动故障转移,负载均衡就是在这里配置。深入了解策略组

常见的策略组类型:

  1. select: 手动选择。
  2. url-test: 自动测速,选择延迟最低的节点。
  3. fallback: 故障转移,按顺序检测,第一种挂了自动切第二个。
  4. load-balance: 负载均衡。
yaml
proxy-groups:
  # 1. 节点选择组(手动切换)
  - name: 🚀 节点选择
    type: select
    proxies:
      - ♻️ 自动选择
      - 🇭🇰 香港节点
      - 🇺🇸 美国节点
      - DIRECT # 直连

  # 2. 自动测速组(谁快用谁)
  - name: ♻️ 自动选择
    type: url-test
    url: http://www.gstatic.com/generate_204 # 测试地址
    interval: 300 # 测试间隔(秒)
    tolerance: 50 # 容差(毫秒),新旧节点延迟差大于此值才切换,防止频繁跳跃
    proxies:
      - 🇭🇰 香港节点
      - 🇺🇸 美国节点

  # 3. 这里的节点通常是上面 proxies 里定义的 name
  # 也可以引用其他分组的 name(策略组套娃)
  
  - name: 🍎 苹果服务
    type: select
    proxies:
      - DIRECT
      - 🚀 节点选择

第五部分:分流规则 (Rules)

规则决定了访问通过哪个策略组。Clash 按 从上到下 的顺序匹配规则,一旦匹配成功即停止。为了更直观的理解分流请看分流规则

基本语法: 类型,参数,策略组

yaml
rules:
  # 1. 域名关键词匹配
  - DOMAIN-KEYWORD,google,🚀 节点选择

  # 2. 域名后缀匹配(最常用)
  - DOMAIN-SUFFIX,youtube.com,🚀 节点选择
  - DOMAIN-SUFFIX,cn,DIRECT # 所有 .cn 结尾的直连

  # 3. 完整域名匹配
  - DOMAIN,www.baidu.com,DIRECT

  # 4. GEOIP 数据库匹配(国家代码)
  # 只有当 DNS 解析结果为 CN IP 时匹配
  # 如果开启了 no-resolve,则不进行 DNS 解析,直接跳过(针对 IP 规则)
  - GEOIP,CN,DIRECT
  - GEOIP,US,🚀 节点选择

  # 5. IP 段匹配
  - IP-CIDR,127.0.0.0/8,DIRECT
  - IP-CIDR,192.168.0.0/16,DIRECT

  # 6. 源 IP 匹配(局域网内特定设备走特定节点)
  - SRC-IP-CIDR,192.168.1.201/32,DIRECT

  # 7. 端口匹配
  - DST-PORT,80,DIRECT

  # 8. 兜底规则(必须放在最后)
  # 上面都没匹配到的,走这个
  - MATCH,🐟 漏网之鱼

第六部分:规则集合 (Rule Providers)

当规则成千上万条时,写在 config.yaml 里会非常臃肿且难以维护。rule-providers 允许你引用外部的规则文件(本地或远程),并像策略组一样更新。订阅导入的时候会下载规则集,规则集示例,下方cn_ip就代表了这个集合,RULE-SET,cn_ip,DIRECT这里就定义这个规则集的所有流量都走‘🚀 节点选择’这个代理组(参考第四部分)

yaml
rule-providers:
  # 定义一个名为 "id1" 的规则集
  id1:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt"
    path: ./ruleset/reject.list
    interval: 86400 # 自动更新间隔(秒)

  # 定义国内 IP 规则集
  id2:
    type: http
    behavior: ipcidr
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/cncidr.txt"
    path: ./ruleset/cncidr.list
    interval: 86400

rules:
  # 在 id1列表 拒绝访问 id2直连
  - RULE-SET,id1,REJECT
  - RULE-SET,id2,DIRECT
  - GEOIP,CN,🚀 节点选择
  - MATCH,🚀 节点选择

一个极简的订阅文件结构

如果你想从头手写,可以参考这个最小结构:

yaml
port: 7890
socks-port: 7891
allow-lan: true
mode: rule
log-level: info
external-controller: :9090

proxies:
  - { name: "ss", type: ss, server: 1.2.3.4, port: 8388, cipher: aes-256-gcm, password: "pwd" }

proxy-groups:
  - name: "Proxy"
    type: select
    proxies:
      - "ss"

rules:
  - DOMAIN-SUFFIX,google.com,Proxy
  - GEOIP,CN,DIRECT
  - MATCH,Proxy

© 2024-2025 Clash.Guide. All Rights Reserved.