Skip to content

Clash 配置文件结构详解:核心七大模块层级全景剖析 ​

直接答案:Clash 的 YAML 配置文件本质上是一份严格遵循数据树结构的声明式流量路由图谱。一个标准且高可用的生产级配置,由 全局通用基础参数、DNS 模块、TUN 虚拟网卡、Proxies 单节点数组、Proxy-Groups 策略组调度池、Rule-Providers 远程规则集 以及 Rules 路由分流列表 这七大核心模块自顶向下组织而成。只要理清了这七大模块的数据依赖与执行顺序,就能从根本上解决 90% 以上的配置解析错误与分流异常。


一、Clash 配置全景结构骨架 (一手实测数据) ​

以下为在生产级 Mihomo 内核上经过完整静态语法校验的标准架构模板。全景展示了七大顶级块在 YAML 树形结构中的相对位置与父子缩进关系:

yaml
# ========================================================
# 模块 1:全局基础网络与控制参数 (General Settings)
# ========================================================
mixed-port: 7890
allow-lan: true
bind-address: '*'
mode: rule
log-level: info
ipv6: false
unified-delay: true
tcp-concurrent: true
find-process-mode: strict
global-client-fingerprint: chrome

# ========================================================
# 模块 2:本地 DNS 调度与防污染引擎 (DNS Engine)
# ========================================================
dns:
  enable: true
  listen: 0.0.0.0:1053
  ipv6: false
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter:
    - '*.lan'
    - 'localhost.ptlogin2.qq.com'
    - '+.msftconnecttest.com'
  nameserver:
    - 223.5.5.5
    - 119.29.29.29
  fallback:
    - https://dns.cloudflare.com/dns-query
    - https://dns.google/dns-query
  fallback-filter:
    geoip: true
    geoip-code: CN
    ipcidr:
      - 240.0.0.0/4

# ========================================================
# 模块 3:系统级透明代理接管 (TUN Virtual Interface)
# ========================================================
tun:
  enable: true
  stack: system
  auto-route: true
  auto-detect-interface: true
  dns-hijack:
    - any:53
    - tcp://any:53
  strict-route: true

# ========================================================
# 模块 4:出站代理单节点声明 (Proxies / Outbound Nodes)
# ========================================================
proxies:
  - name: "香港 IEPL 原生 01"
    type: vless
    server: hk01.example.com
    port: 443
    uuid: "a1b2c3d4-e5f6-7a8b-9c0d-1e2f3a4b5c6d"
    network: tcp
    tls: true
    udp: true
    flow: xtls-rprx-vision
    servername: hk01.example.com
    client-fingerprint: chrome

# ========================================================
# 模块 5:外部节点提供商解耦 (Proxy Providers)
# ========================================================
proxy-providers:
  Airport-Subscription:
    type: http
    url: "https://example.com/api/v1/client/subscribe?token=secret"
    interval: 86400
    path: ./profiles/proxies/airport.yaml
    health-check:
      enable: true
      interval: 300
      url: http://www.gstatic.com/generate_204

# ========================================================
# 模块 6:策略组路由池设计 (Proxy Groups)
# ========================================================
proxy-groups:
  - name: PROXY
    type: select
    proxies:
      - AUTO-FASTEST
      - "香港 IEPL 原生 01"
      - DIRECT
    use:
      - Airport-Subscription

  - name: AUTO-FASTEST
    type: url-test
    url: http://www.gstatic.com/generate_204
    interval: 300
    tolerance: 50
    use:
      - Airport-Subscription

  - name: AI-Services
    type: select
    proxies:
      - PROXY
      - "香港 IEPL 原生 01"

# ========================================================
# 模块 7:规则提供商与分流规则链 (Rule Providers & Rules)
# ========================================================
rule-providers:
  reject-rules:
    type: http
    behavior: domain
    url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/reject.txt"
    path: ./ruleset/reject.yaml
    interval: 86400

rules:
  - RULE-SET,reject-rules,REJECT
  - DOMAIN-SUFFIX,openai.com,AI-Services
  - DOMAIN-SUFFIX,chatgpt.com,AI-Services
  - GEOSITE,cn,DIRECT
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

二、核心七大模块层级深度拆解 ​

2.1 顶级基础参数:确立内核运行边界 ​

顶级参数决定了 Clash 核心在操作系统中的监听姿态与控制权限:

  • mixed-port(混合监听端口):现代 Clash 推荐统一使用 mixed-port(如 7890 或 7892),它同时兼备 HTTP 与 SOCKS5 双协议代理能力,废弃了以往分别定义 port 与 socks-port 的冗余做法;
  • mode(工作模式):必须显式设为 rule(规则模式),核心才会执行路由表的匹配逻辑;若设为 global(全局)则所有流量均直接走单一选定节点,direct 则全量直连;
  • unified-delay(统一延迟计算):建议开启。该参数会统一消除各客户端对 TCP 握手 RTT 计算的算法差异,反映节点最真实的往返耗时;
  • find-process-mode:在桌面端推荐设为 strict,以支持 PROCESS-NAME 对应用程序进程名的高精度抓取。

2.2 DNS 模块:消除解析污染的第一道防火墙 ​

DNS 解析是整个代理链路中最容易被运营商嗅探与劫持的环节:

  1. enhanced-mode: fake-ip 机制:内核充当本地 DNS 服务器,收到客户端发起的 DNS 解析时,不向远端查询,而是秒级返回一个保留网段(如 198.18.0.0/16)的虚拟 IP;
  2. 连接映射缓存:内核在内存中建立 <虚拟 IP, 真实域名> 的映射表。当浏览器后续发起 TCP SYN 连接时,核心从内存中提取真实域名,直接转发给海外节点由远端节点代为解析。此过程省去了一次完整的跨洋 DNS 查询 RTT;
  3. 分流策略 nameserver vs fallback:常规查询由国内高效 DNS(如 223.5.5.5)响应;针对触发污染的域名,通过 fallback 中的加密 DoH(DNS-over-HTTPS)管道在境外解析,结合 fallback-filter 杜绝投毒。

2.3 TUN 模块:驱动级透明网络接管 ​

传统 HTTP/SOCKS 代理依赖客户端应用主动适配系统代理配置,而像 UWP 应用、命令行终端、原生 Docker 容器与联机对战游戏往往忽略系统代理:

  • 虚拟网络适配器:TUN 在系统底层创建一张名为 Mihomo 或 Clash 的虚拟网卡;
  • 协议栈选择 stack: system:调用操作系统的原生 TCP/IP 协议栈,性能优异且在高吞吐下开销可控;针对需要精细数据包过滤的场景,可切换为 gvisor 用户态协议栈;
  • 自动路由 auto-route: true:自动将系统默认网关流量重定向至虚拟网卡,搭配 dns-hijack 截获局域网所有 53 端口流量。

2.4 Proxies 节点数组:静态出站实体 ​

proxies 是一个包含具体节点服务器参数的列表对象:

  • 每个节点必须包含唯一不重复的 name;
  • 包含协议类型 type(如 vless、trojan、ss)、服务器地址 server 与端口 port;
  • 协议专属扩展参数:例如 VLESS 的 flow: xtls-rprx-vision、Reality 的 public-key 与 short-id 等。

2.5 Proxy Providers:现代解耦架构的基石 ​

以往直接在配置文件中粘贴数百个服务商节点,会导致单个 YAML 文件动辄数千行,一旦节点名称变动,后续引用的策略组全部失效:

  • 外部拉取机制:通过 type: http 声明机场订阅链接,内核将其作为外部资源独立下载并存放在本地 path 缓存中;
  • 定时热刷新:配置 interval: 86400 让订阅在后台每日自动拉取,即使服务商增减节点,主配置架构纹丝不动;
  • 自愈保活:包含独立的 health-check 字段,节点状态在 Provider 内部维护,不阻塞主线程。

2.6 Proxy Groups 策略组:流量智能调度大脑 ​

策略组向上承接规则引擎匹配到的出站决策,向下分发到具体的单节点或 Provider 节点池:

  • select(手动选择):由用户在 Web 仪表盘或客户端界面上手动指定出口;
  • url-test(自动选择):内核后台按设定周期向测试 URL(如 http://www.gstatic.com/generate_204)发送心跳,动态将流量调度至延迟最低的节点;
  • fallback(故障转移):严格按照列表顺序选路,主力节点存活时 100% 走主力;主力断线后秒级降级至第二备用节点;
  • load-balance(负载均衡):通过散列哈希或轮询将连接并发分摊到多个节点,大幅拓宽总并发吞吐。

2.7 Rules 规则链:自上而下的决策漏斗 ​

规则引擎根据预设规则行,决定每个网络请求该交给哪个策略组、直连还是丢弃:

  • 严格遵循自顶向下匹配、首次命中即终止(短路逻辑);
  • 优先级排序:本地私有直连 > 广告拦截 > 业务专用(流媒体/AI) > 国内域名/IP 直连 > 兜底代理。

三、进阶重构实操:四步将臃肿配置模块化 ​

要将一份混乱的旧版配置重构为符合 2026 规范的现代化架构,可按以下标准步骤执行:

步骤 1:剥离单节点,引入 Proxy Provider ​

打开原配置文件,检查 proxies: 数组。如果里面堆叠了大量服务商提供的节点,将其全部清空,并在 proxy-providers 下声明一个外部订阅提供商。

步骤 2:重构策略组的节点引用来源 ​

在 proxy-groups 下,将原本写死节点名的 proxies: 列表精简,改用 use: 字段直接引用刚刚定义的 Provider 名称:

yaml
proxy-groups:
  - name: PROXY
    type: select
    use:
      - Airport-Subscription

步骤 3:注入核心 DNS 与 TUN 参数 ​

在配置顶部补充完整的 dns 与 tun 配置块,确保 enhanced-mode: fake-ip 正常开启,并设置合理的 fake-ip-filter 排除名单(避免内网打印机与局域网服务失联)。

步骤 4:调整 Rules 规则次序 ​

检查 rules: 列表末尾。确保最后一条规则为 MATCH,PROXY 作为兜底出站;确保 GEOSITE,cn,DIRECT 位于 MATCH 之前,避免国内流量被误代理。


四、配置生效与架构健康度判断标准 ​

配置保存后,如何判断配置文件是否被正确解析且架构健康?可通过以下三项可观测性指标验证:

  1. 终端启动日志无语法报错: 通过终端运行内核测试配置有效性:
    bash
    mihomo -t -f config.yaml
    若输出 configuration test is successful,代表 YAML 缩进、字段类型与依赖校验 100% 通过。
  2. 查看 Web 控制面板节点池聚合: 打开控制面板(如 Yacd 或 Metacubexd),策略组内应能完整展现来自 Provider 的所有动态节点,且延迟测速数据正常滚动刷新。
  3. 访问国内外双向站点验证分流:
    • 访问国内网站(如 ip.sb 或 myip.la):回显 IP 必须为本地运营商直连公网 IP;
    • 访问海外特定服务(如 chat.openai.com):连接必须走选定的代理节点,且连接日志中明确命中 DOMAIN-SUFFIX,openai.com,AI-Services 规则行。

五、常见配置文件结构疑难 FAQ ​

Q1:为什么启动时报错 mapping values are not allowed here? ​

答:这是最经典的 YAML 语法缩进错误。通常是因为冒号 : 后面缺少了一个英文空格,或者在多层嵌套中使用了 Tab 制表符而非标准的 2 个空格缩进。YAML 标准严格禁止使用 Tab 键进行对齐。

Q2:proxies 与 proxy-providers 能在同一个配置文件中并存吗? ​

答:完全可以。在生产级架构中,许多进阶用户习惯将自己租用的专属 VPS 独立节点手写在 proxies 中,而将商业服务商的大量动态节点放在 proxy-providers 中。在策略组中可以通过 proxies 和 use 同时混用两者:

yaml
proxy-groups:
  - name: Hybrid-Pool
    type: select
    proxies:
      - "我的搬瓦工自建VPS"
    use:
      - Commercial-Provider

Q3:为什么将规则写在 rules 列表后面完全不起作用? ​

答:Clash 规则引擎采用短路求值逻辑。如果您在规则靠前的位置配置了宽泛的规则(例如 GEOIP,CN,DIRECT 或未加限定的通用规则),且目标请求的 IP 被提前识别命中,则后续更具体的精细规则永远没有被执行的机会。请务必将具体的 DOMAIN 和 DOMAIN-SUFFIX 规则置于通用 IP 规则之上。

Q4:旧版 Clash 配置文件迁移到 Mihomo 需要注意什么结构变动? ​

答:旧版 Clash 的 port、socks-port 建议整合为 mixed-port;DNS 模块的旧字段 redir-host 已被全面弃用;同时 Mihomo 扩展了对 VLESS、Reality、Hysteria2 以及 MRS 二进制规则提供商的支持,字段层级均遵循严格的大小写规范。


六、站内关联与权威外部参考 ​