CONFIG REFERENCE · MIHOMO CORE

Clash 配置文件参考大全

本页是站内信息量最大的系统查阅手册:按段拆解 Clash(mihomo 内核)配置文件的 YAML 结构通用字段代理节点策略组规则语法覆写合并机制,每一段都附可直接套用的 config.yaml 示例。只想快速把客户端跑起来的读者,先看教程页的三步主线;跑通之后要改端口、加规则、做分流,再回到本页按字段查阅。

YAML 结构总览

配置文件在哪里

GUI 客户端一般不让你直接面对文件本体:Clash Verge Rev 在「订阅 / 配置」页管理多份配置,Clash Plus 在 App 内维护订阅与本地配置,文件存放在各自的应用数据目录里,界面上都有「打开配置目录」之类的入口。而 mihomo 内核(以及 Clash for Windows 这类老客户端)直接读取一个 YAML 文件,默认文件名 config.yaml,启动时用 -d 参数指定它所在的目录。无论走哪条路径,最终生效的都是同一份结构的 YAML:顶层先是一组标量字段(端口、模式、日志级别),然后是 dns、proxies、proxy-groups、rules 四个功能段落,外加 proxy-providers、rule-providers 两个外部资源段。理解这份骨架,就理解了所有 Clash 系客户端共通的配置逻辑。

YAML 语法四条铁律

YAML 的写法约束很少,但每一条都直接决定文件能不能被解析:

  1. 缩进只能用空格,不能用 Tab。这是新手报错的第一来源,在编辑器里把 Tab 设为自动转换成两个空格可以一劳永逸。
  2. 键和值之间是「冒号加一个空格」。写成 port:7890port : 7890 都会解析失败,或得到意料之外的结果。
  3. 列表项以「- 」开头,短横线后面同样跟一个空格;列表可以与父键同列书写,也可以再缩进一级,两种写法等价,全文件统一即可。
  4. 字符串里出现冒号、#、花括号、方括号、逗号等特殊字符时,用英文双引号整体包起来;# 之后的内容是注释,不参与解析。

另外,YAML 支持锚点与引用(& 定义锚点、* 引用、<< 合并),多个节点共用一段参数时可以少写重复行,具体例子见「代理节点字段」一节。

顶层字段速览

一份完整配置的顶层大致分三组:网络监听(port、socks-port、mixed-port 等)、运行行为(mode、log-level、ipv6、external-controller 等)、功能段落(dns、proxies、proxy-groups、rules)。下表先给全景,后面逐段展开。

字段类型作用
port整数HTTP 代理监听端口
socks-port整数SOCKS5 代理监听端口
mixed-port整数HTTP 与 SOCKS 混合端口
allow-lan布尔是否允许局域网设备接入
mode枚举rule / global / direct 三种运行模式
log-level枚举silent / error / warning / info / debug
external-controller字符串RESTful 管理接口监听地址
dns段落内置 DNS 服务器与解析行为
proxies列表代理节点清单
proxy-groups列表策略组清单
rules列表分流规则,按序匹配
rule-providers映射外部规则集定义
# config.yaml 骨架:先标量,后段落
mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
external-controller: 127.0.0.1:9090

dns:
  enable: true
  # ...详见「DNS 字段」一节

proxies:
  - name: "node-a"
    # ...详见「代理节点字段」一节

proxy-groups:
  - name: "PROXY"
    type: select
    proxies: ["node-a", DIRECT]

rules:
  - DOMAIN-SUFFIX,local,DIRECT
  - MATCH,PROXY

值班提示

YAML 解析失败时内核会拒绝启动,GUI 客户端通常表现为「配置加载失败」或代理列表为空。报错信息里带的行号基本可信,优先检查该行附近的缩进、引号与冒号。

通用字段:端口、模式与全局行为

端口字段

Clash 对外提供四种入站监听。port 是经典 HTTP 代理端口;socks-port 是 SOCKS5 端口,支持 UDP 转发;mixed-port 把两种协议合并到同一端口,内核按请求特征自动识别,目前绝大多数 GUI 客户端默认只开混合端口;redir-porttproxy-port 面向 Linux 透明代理,桌面用户用不到。启动时报「bind: address already in use」就是端口被占用:换一个端口,或找出并关掉占用进程。混合端口配合局域网共享的实际用法,技术笔记里有一篇专门展开

字段协议常见取值说明
portHTTP7890老客户端默认,逐步被混合端口取代
socks-portSOCKS57891支持 UDP 转发,游戏/语音类应用常用
mixed-portHTTP + SOCKS57890 / 7897当前主流默认,一个端口两种协议
redir-port透明代理(redirect)无默认Linux 网关/路由器场景
tproxy-port透明代理(tproxy)无默认Linux 网关场景,支持 UDP

运行模式

mode 决定请求的出口走向,三个取值:rule 按 rules 列表逐条匹配,是日常使用的默认;global 把全部流量交给 GLOBAL 策略组(通常等于你在面板里选的那个节点),排查「是不是规则写错了」时切到它最直接;direct 全部直连,用于确认代理本身是否在工作。GUI 客户端首页的模式切换按钮,改的就是这个字段。

局域网与外部访问

allow-lan 打开后,同一局域网里的手机、平板可以把代理指向这台电脑的 IP 与端口,共用一个代理出口;bind-address 控制监听网卡,默认 "*" 表示所有网卡,只有配合 allow-lan 才有实际意义。external-controller 是内核的 RESTful 管理接口,GUI 面板靠它读状态、切节点、拉日志;secret 是该接口的访问令牌。如果把这个接口的监听地址改成 0.0.0.0 对外暴露,必须同时设置 secret,否则等于把代理控制权交给整个网络。external-ui 指向一个静态面板目录,可以让浏览器直接访问管理界面。

安全提示

allow-lan 只在可信网络里打开。公共 Wi-Fi 下开放代理端口,等于把带宽与出口借给同一网络里的陌生人。局域网共享的完整设置与验证步骤,见技术笔记《Clash 混合端口与局域网共享代理设置》。

日志、延迟与其他行为字段

log-level 从 silent 到 debug 共五档,排查问题时临时调到 debug,平时保持 info。ipv6 控制是否处理 AAAA 记录,网络没有 IPv6 出口时建议关闭。unified-delay 让测速把 TCP/TLS 握手时间计入延迟,各节点之间的数字才可比;tcp-concurrent 让候选节点并发建连,首跳更快;find-process-mode 控制是否解析本机进程名,PROCESS-NAME 规则依赖它;global-client-fingerprint 指定 TLS 客户端指纹伪装(常见取值 chrome),对依赖 uTLS 的协议有意义;profile 段的 store-selected 会记住面板里的手动选点,配置重载后选择不丢。另有 tun 段用于虚拟网卡级接管,属于进阶主题,普通桌面场景不必开启。

入站与出站的其他形态

除了顶层的端口字段,mihomo 还支持 listeners 列表声明更多入站:每项一个 nametype(http、socks、mixed、redir、tproxy、tun、shadowsocks、vmess 等)与 port,可以在同一份配置里同时监听多个端口、跑不同协议,例如给局域网单独开一个带认证的 SOCKS 端口,或把某个端口直接做成 Shadowsocks 服务端供其他设备接入。顶层端口字段与 listeners 可以共存,内核会把它们合并成完整的入站清单。出站方向除了 proxies 里的节点,还有三个内置出口:DIRECT 直连、REJECT 静默丢包、REJECT-DROP 直接断开连接;REJECT 会立即返回拒绝,适合广告与追踪域名,REJECT-DROP 不回应任何数据,适合让扫描类请求超时放弃。理解这两组概念,后面读规则与策略组时「出口」一栏的含义就完整了。

界面与外部资源字段

external-ui 指向一个静态面板目录后,浏览器访问 external-controller 的地址即可打开图形面板,适合内核裸跑在路由器、NAS 上的场景;external-ui-url 可以让客户端启动时自动下载官方面板压缩包。geodata-modegeo-update-interval 控制地理数据文件的格式与更新周期;keep-alive-interval 调整连接复用的心跳间隔,移动网络下适当调大可以省电。这些字段都有合理默认值,只有明确遇到对应需求时才需要写进配置。

port: 7890
socks-port: 7891
mixed-port: 7897
allow-lan: false
bind-address: "*"
mode: rule
log-level: info
ipv6: false
external-controller: 127.0.0.1:9090
secret: ""
unified-delay: true
tcp-concurrent: true
find-process-mode: strict
global-client-fingerprint: chrome
profile:
  store-selected: true
  store-fake-ip: true

DNS 字段:防污染与防泄漏

为什么 DNS 要单独成段

代理只解决「流量怎么走」,DNS 决定「域名先解析成什么」。系统默认 DNS 走运营商 UDP 53:明文、可被劫持,还会把访问意图暴露给本地网络——这就是常说的 DNS 泄漏。Clash 的 dns 段在内核里内置了一个 DNS 服务器:接管查询请求,按策略把不同域名交给不同上游;配合 fake-ip 模式还能实现「先按域名匹配规则、再决定代不代理」,绕开「先解析出被污染的 IP、规则却按域名写」的死结。

基础字段

enable 是总开关;listen 是内置 DNS 的监听地址,GUI 客户端不做系统级接管时可以不设。enhanced-mode 两个取值:redir-host 返回真实解析结果,由内核记录域名与 IP 的映射关系;fake-ip 直接返回 198.18.0.0/16 段的假地址,连接进来时再反查域名走规则匹配,速度更快、对污染免疫,是目前的主流选择。fake-ip-filter 列出不走 fake-ip 的域名——局域网设备名、NTP 校时、部分依赖真实 IP 的服务,名单内的域名按真实解析处理。default-nameserver 只负责解析「上游 DNS 服务器本身的域名」,必须填纯 IP 的传统 UDP 服务器,否则会陷入「要先解析 DoH 域名、又得先问 DoH」的循环。

上游服务器

nameserver 是主力上游列表,可写多行并发查询取最快结果。fallback 是备用组,配合 fallback-filter 按 GEOIP 判断:解析结果落在境外 IP 段时改用 fallback 重查。mihomo 更推荐 nameserver-policy:按域名集合直接指定上游,例如 geosite:cn 走国内 DoH、其余走可信境外 DoH,比 fallback 的「先查再判断」更确定。proxy-server-nameserver 专门解析代理节点的域名,防止节点域名被污染后连不上服务器。respect-rules 打开后,DNS 请求本身也按规则选择出口(经代理查询境外 DNS),代价是配置复杂度上升。另有 sniffer 嗅探段,可从 TLS/HTTP 握手里还原域名,修正「应用直接连 IP」时的规则匹配。

写法协议说明
223.5.5.5UDP 53传统明文查询,仅适合 default-nameserver
tls://dns.alidns.comDNS over TLS853 端口加密传输
https://doh.pub/dns-queryDNS over HTTPS走 HTTPS,最不易被干扰
quic://dns.exampleDNS over QUICmihomo 支持,低延迟
dhcp://en0DHCP 下发跟随网卡获取运营商 DNS
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"
    - "*.local"
    - time.*.com
    - ntp.*.com
  default-nameserver:
    - 223.5.5.5
    - 119.29.29.29
  nameserver:
    - https://doh.pub/dns-query
    - https://dns.alidns.com/dns-query
  proxy-server-nameserver:
    - https://doh.pub/dns-query
  nameserver-policy:
    "geosite:geolocation-!cn":
      - https://dns.cloudflare.com/dns-query
      - https://dns.google/dns-query

排查路径

DNS 泄漏的典型症状:浏览器挂着代理,泄漏测试站点仍显示本地运营商。处理顺序:确认 dns.enable 已开、系统或浏览器的 DNS 指向内核监听地址、nameserver 里没有运营商 UDP。更多症状对照见常见问题页

fake-ip 的工作原理与取舍

fake-ip 值得单独展开,因为它决定了整套分流的行为方式。开启后,内核对所有查询返回 198.18.0.0/16 段内的假地址,应用随即向这个假地址发起连接;内核收到连接时按假地址反查出原始域名,再拿域名去匹配规则。这样做有三个直接收益:一是规则匹配发生在解析之前,域名类规则永远生效,不会被「先解析出被污染的 IP」带偏;二是省掉了真实 DNS 的往返等待,首连更快;三是应用拿到的地址永不失效,不存在 DNS 缓存过期导致的抖动。代价同样明确:任何依赖真实 IP 的功能都会失灵——局域网里按 IP 访问设备、需要真实地址做地域判断的服务、以及直接 ping 域名排障,都会拿到假地址。这正是 fake-ip-filter 存在的意义:把这类域名逐个列入,让它们走真实解析。日常维护中,遇到「某个应用一开代理就异常、关掉就正常」,第一反应就是把它的域名加进 fake-ip-filter 试一次。

嗅探器 sniffer 的角色

并非所有应用都先查 DNS 再连接:部分客户端内置了硬编码 IP,或自己实现了 DNS。此时内核看到的只有目标 IP,域名类规则全部落空。sniffer 段开启后,内核会嗅探 TLS 握手中的 SNI 与 HTTP 请求的 Host 头,把连接还原出域名再重新走一遍规则匹配,命中率显著提升。它对纯 IP 的私有协议无能为力,但已足够覆盖绝大多数浏览器与常规应用。嗅探与 fake-ip 可以共存,二者解决的是同一问题的两个侧面:一个让域名在解析前可见,一个在解析缺失时把域名找回来。

代理节点字段:proxies 清单

通用字段

proxies 是一个列表,每个元素对应一个节点。所有协议共用的字段只有五个:name(显示名,规则与策略组靠它引用,必须全文件唯一)、type(协议类型)、serverportudp(是否转发 UDP,节点支持就开)。其余字段随协议变化。手工维护多个同协议节点时,可以用 YAML 锚点抽出公共部分,后续节点用合并键引用,只写差异字段:

proxies:
  - &ss-base
    name: "ss-a"
    type: ss
    server: 203.0.113.10
    port: 8388
    cipher: aes-128-gcm
    password: "your-password"
    udp: true
  - <<: *ss-base
    name: "ss-b"
    server: 203.0.113.11
    port: 8389

各协议示例

以下示例覆盖 mihomo 常用的五类协议,地址全部使用文档保留段,替换为真实服务器信息即可使用:

proxies:
  - name: "ss-example"
    type: ss
    server: 203.0.113.10
    port: 8388
    cipher: aes-128-gcm
    password: "your-password"
    udp: true

  - name: "vmess-example"
    type: vmess
    server: 198.51.100.20
    port: 443
    uuid: 11111111-2222-3333-4444-555555555555
    alterId: 0
    cipher: auto
    tls: true
    servername: example.com
    network: ws
    ws-opts:
      path: /ray
      headers:
        Host: example.com

  - name: "trojan-example"
    type: trojan
    server: 192.0.2.30
    port: 443
    password: "your-password"
    sni: example.com
    skip-cert-verify: false
    udp: true

  - name: "hy2-example"
    type: hysteria2
    server: 203.0.113.40
    port: 443
    password: "your-password"
    sni: example.com
    skip-cert-verify: false

  - name: "vless-example"
    type: vless
    server: 198.51.100.50
    port: 443
    uuid: 11111111-2222-3333-4444-555555555555
    network: tcp
    tls: true
    udp: true
    flow: xtls-rprx-vision
    servername: www.microsoft.com
    reality-opts:
      public-key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
      short-id: "0123456789abcdef"
    client-fingerprint: chrome

skip-cert-verify 只在确认证书链有特殊原因时临时打开,长期开启等于放弃 TLS 的身份校验。sni / servername 决定 TLS 握手时声明的域名,填错会直接连不上。

协议支持差异

原版 Clash 已停止维护,新协议只进 mihomo 内核。这也是本站下载页全部首推 mihomo 系客户端的原因:

协议原版 Clash(停更)mihomo
Shadowsocks支持支持
VMess支持支持
Trojan支持支持
Snell支持支持
Hysteria / Hysteria2不支持支持
TUIC不支持支持
VLESS / Reality不支持支持
WireGuard不支持支持

订阅用户注意

导入订阅后,客户端会自动生成 proxies 列表,基本不用手写这一段。直接改订阅文件里的节点,会在下次订阅更新时被整份覆盖;想长期保留自建节点,用「覆写与合并」一节的方法追加。

策略组字段:proxy-groups

五种类型

策略组是「节点的容器加选择策略」。select 手动选择,面板里点哪个走哪个,几乎每份配置都有一个总入口组;url-test 按固定间隔对组内节点测速,自动选延迟最低者;fallback 同样测速,但语义是「当前节点挂了才切下一个」,列表顺序即优先级;load-balance 把连接按策略分摊到多个节点(strategy 取 consistent-hashing 或 round-robin),适合多线叠加带宽;relay 把多个节点串成链式代理,流量依次穿过,出口是最后一个节点。mihomo 还支持给策略组加 icon 字段,面板里显示自定义图标。

类型选择方式典型用途
select手动选点总入口、功能分组(如广告拦截开关)
url-test自动最低延迟同地区多节点择优
fallback故障转移主备线路,稳定优先
load-balance负载均衡多线叠加带宽
relay链式转发入口与落地分离的中转链路

测速参数

url 是测速目标,惯例用 http://www.gstatic.com/generate_204,204 无内容响应、开销最小;interval 是测速间隔秒数,太短徒增流量与电量,300 是常见取值;tolerance 是切换阈值(毫秒),新节点比当前节点快出这个数才换,避免在两条相近线路间来回跳;lazy 为 true 时只有组被使用才测速,冷门备用组不白跑流量;timeout 是单次测速的超时上限。

嵌套与引用

策略组的 proxies 列表里可以再写其他策略组的名字——这就是嵌套:总入口 PROXY 里放「香港」「日本」「美国」三个地区组,每个地区组是 url-test,手动选地区、组内自动选节点,两层各司其职。use 字段引用 proxy-providers 里的订阅源,把整批节点拉进组;filter 用正则筛节点名,例如 filter: "香港|HK" 只保留名字含香港的节点。DIRECT(直连)与 REJECT(拦截)是两个内置出口,可以直接写进任何 proxies 列表,配合 select 组就能做「广告拦截开关」这类功能组。

proxy-groups:
  - name: "PROXY"
    type: select
    proxies: ["HK-AUTO", "JP-AUTO", "US-AUTO", DIRECT]

  - name: "HK-AUTO"
    type: url-test
    use: ["provider-main"]
    filter: "香港|HK|Hong Kong"
    url: http://www.gstatic.com/generate_204
    interval: 300
    tolerance: 50
    lazy: true

  - name: "JP-AUTO"
    type: url-test
    use: ["provider-main"]
    filter: "日本|JP|Japan"
    url: http://www.gstatic.com/generate_204
    interval: 300

  - name: "US-AUTO"
    type: fallback
    use: ["provider-main"]
    filter: "美国|US|United States"
    url: http://www.gstatic.com/generate_204
    interval: 300

  - name: "AD-BLOCK"
    type: select
    proxies: [REJECT, DIRECT]

关于 relay

链式代理上任意一环断开,整条链不可用;每过一环延迟叠加一次。它解决的是「入口与出口必须分离」的特定需求,不是日常提速手段,普通场景用前四种类型足够。

规则语法:rules 从上到下

匹配顺序

rules 是一个有序列表:内核从上到下逐条比对,命中第一条即停止,后面的不再看。写法上的铁律是「精确的放前面,宽泛的放后面,MATCH 永远垫底」。规则分两类:域名类(DOMAIN / DOMAIN-SUFFIX / DOMAIN-KEYWORD / GEOSITE)在解析前就能判断;IP 类(IP-CIDR / GEOIP)需要拿到解析结果。给 IP 类规则加 no-resolve 参数,表示「请求本来就是域名时,别为了匹配这条规则去触发 DNS 解析」,纯域名请求会跳过该条继续往下走,能避免大量无谓查询。GEOSITE 与 GEOIP 依赖地理数据文件,GUI 客户端会自动维护,内核裸跑时需保证数据文件在配置目录内或开启自动更新。

规则类型速查

写法匹配对象说明
DOMAIN,example.com,出口单个域名精确匹配,不含子域
DOMAIN-SUFFIX,example.com,出口域名后缀匹配该域及全部子域
DOMAIN-KEYWORD,google,出口域名关键词包含即命中,谨慎使用
GEOSITE,cn,出口域名分类库社区维护的分类数据
IP-CIDR,192.168.0.0/16,出口IPv4 网段建议加 no-resolve
IP-CIDR6,fe80::/10,出口IPv6 网段同上
GEOIP,CN,出口IP 归属地建议加 no-resolve
SRC-IP-CIDR,192.168.1.201/32,出口来源 IP局域网内按设备分流
DST-PORT,443,出口目标端口按目的端口分流
PROCESS-NAME,telegram.exe,出口进程名依赖 find-process-mode
RULE-SET,名称,出口外部规则集引用 rule-providers 定义
MATCH,出口兜底必须是最后一条

rule-providers 规则集

规则集把成百上千条规则抽成外部文件,主配置只留一行引用。type 为 http 时按 url 定时拉取(interval 秒)并缓存到 path;为 file 时读本地文件。behavior 三种:domain(纯域名后缀集合,加载为域名树,匹配最快)、ipcidr(纯 IP 段)、classical(经典规则行,可混写各种类型)。规则集文件本身可以是 yaml(payload 列表)或纯文本一行一条。

rule-providers:
  reject-ads:
    type: http
    behavior: domain
    url: "https://example.org/rules/ads.yaml"
    path: ./ruleset/ads.yaml
    interval: 86400
  local-direct:
    type: file
    behavior: classical
    path: ./ruleset/direct.yaml

rules:
  - RULE-SET,reject-ads,AD-BLOCK
  - RULE-SET,local-direct,DIRECT
  - DOMAIN-SUFFIX,lan,DIRECT
  - GEOSITE,private,DIRECT
  - GEOSITE,cn,DIRECT
  - GEOIP,CN,DIRECT,no-resolve
  - GEOSITE,geolocation-!cn,PROXY
  - MATCH,PROXY

必须兜底

没有 MATCH 收尾的配置,未命中的请求会走默认行为(依内核与版本而定),表现为「某些网站莫名其妙打不开」。任何配置都应以一条 MATCH 结束,出口通常是你的总入口策略组。

规则排序的实战思路

写规则时先想清楚三件事:哪些必须直连、哪些必须代理、剩下的交给谁。直连组放最前:局域网与保留地址(GEOSITE,private)、系统与时间服务、公司内网域名,这些命中即走,不消耗代理资源。拦截组紧随其后:广告与追踪域名交给 REJECT,越早拦截越省后续处理。然后是指定代理的精确规则:常用境外服务用 DOMAIN-SUFFIX 或 GEOSITE 分类点名,命中进 PROXY。宽泛的地理规则放后段:GEOSITE,cn 与 GEOIP,CN 兜底国内直连,GEOSITE,geolocation-!cn 兜底境外代理。最后 MATCH 收尾。这个顺序的核心原则是「判断成本递增、覆盖范围递增」:精确规则判断快、范围小,放前面;地理库匹配要查数据文件、范围大,放后面。规则数量与启动速度直接相关,几千条以内无需担心,超过这个量级就应考虑把稳定的大段规则迁移到 rule-providers,主配置只留高频调整的部分。

进程分流与端口分流的边界

PROCESS-NAME 规则按发起连接的进程名分流,是「让某个应用单独走代理或直连」的最直接手段,但它有两个前提:find-process-mode 必须开启,且该应用不能走系统代理之外的路径。macOS 与 Linux 上进程解析的可靠性不如 Windows,遇到规则不生效先查日志里进程名是否被正确识别。DST-PORT 规则按目标端口分流,典型用法是把 22(SSH)、873(rsync)等管理端口固定直连,避免代理出口 IP 频繁变化触发服务器的安全告警。这两类规则都属于「特例通道」,数量宜少不宜多,放在精确域名规则之后、地理规则之前。

覆写与合并:订阅与自定义共存

为什么不能直接改订阅文件

订阅的本质是「服务方下发的完整配置文件」,客户端每隔一段时间重新拉取并整份覆盖。你在订阅文件里加的自定义规则、改的策略组,下次更新全部消失。正确思路是把「订阅内容」与「本地自定义」分成两层:订阅负责节点,覆写负责你的规则与字段,二者在客户端运行时合并成最终配置。这样订阅随便更新,本地层始终不动。

客户端覆写机制

以 Clash Verge Rev 为例:订阅列表右键进入编辑,可以维护一段全局扩展配置(Merge),对所有订阅生效。Merge 支持两类键:一是 prepend- / append- 前缀的追加键,把内容插到对应列表的头部或尾部;二是与顶层同名的覆盖键,直接替换订阅里的值。Clash Plus 同样提供订阅之外的自定义配置入口,思路一致。仍在使用 Clash for Windows 的读者注意:该项目已停止维护,其 Mixin 机制多年未更新,建议按《迁移到 Clash Verge Rev 与 Clash Plus 的方案》一文换到活跃维护的客户端。

# 全局扩展配置(Merge)示例
prepend-rules:
  - DOMAIN-SUFFIX,internal.example.com,DIRECT
append-proxy-groups:
  - name: "MY-SELECT"
    type: select
    use: ["provider-main"]
mixed-port: 7897

三条路线对比

路线特点适用场景
客户端覆写(Merge / 自定义配置)零外部依赖,随客户端走日常加规则、改端口、追加策略组,推荐
本地模板 + 订阅转换一次生成完整配置多订阅合一、精细模板管理
自建 subconverter完全自控,可多人共用有自己的服务器、进阶玩家

推荐路线

普通用户只用客户端自带覆写,绝大多数自定义需求(加规则、换端口、追加策略组)都能覆盖。订阅格式本身的差异与转换方法见技术笔记《Clash 订阅链接是什么格式》;客户端本体到下载页获取,全平台首推 Clash Plus。

校验、调试与常见错误

用内核做静态检查

mihomo 自带配置检查:把 config.yaml 放进一个目录,执行 ./mihomo -t -d ./目录,通过则打印检查成功的提示,失败则给出字段名与行号。改动较大时先在命令行过一遍 -t,再让 GUI 加载,比重启客户端反复试错快得多。Windows 用户把内核可执行文件与配置放同一目录,在 PowerShell 里执行同样的命令即可。

热重载与日志

external-controller 开着的时候,可以不重启内核直接重载配置:

curl -X PUT "http://127.0.0.1:9090/configs?force=true" \
  -H "Content-Type: application/json" \
  -d '{"path": "/绝对路径/config.yaml"}'

force=true 会强制断开并重连现有连接,日常重载可以不带。日志层面,把 log-level 调到 debug 后,每条连接的匹配过程(域名、命中的规则、出口节点)都会打印,是定位「这条流量为什么没走代理」的第一手段;GUI 客户端的日志 / 连接面板,本质就是这些数据的图形化呈现。

高频错误对照

现象 / 报错常见原因处理
yaml: line N: did not find expected key缩进不一致或混入了 Tab统一为 2 空格缩进
cannot unmarshal字段类型写错(如端口写成字符串)对照本页表格修正类型
配置加载成功但节点全部超时订阅未更新,或节点域名被污染更新订阅;配置 proxy-server-nameserver
部分网站打不开规则未命中且缺 MATCH 兜底补一条 MATCH 收尾
fake-ip 下某服务异常该域名必须拿到真实 IP加入 fake-ip-filter
面板连不上内核external-controller 地址或 secret 不对核对监听端口与令牌

不要把配置贴到在线工具

排错时不要把整份配置粘贴到在线 YAML 校验网站:里面有服务器地址、端口与密码。本地编辑器(VS Code 等)的 YAML 插件足以完成语法检查,内核的 -t 参数足以完成语义检查。

到这里,一份配置从骨架到字段、从规则到覆写的完整链路就齐了。日常使用中更具体的问题——连不上、速度慢、某个应用不走代理——常见问题页按症状整理了排查路径;还没装客户端的读者,下载页按平台给出了当前维护中的选择;想先快速跑通最小流程,再回到本页查字段的,从教程页开始。

Clash最新版下载