clash 配置文件怎么写?以 mihomo 为例的 YAML 模板与报错排查
简答:先判断你拿到的是订阅链接、本地 YAML 还是配置覆写;以 mihomo 为例,保留空格缩进并先加载最小模板,再逐步加入节点、策略组和规则,通常能定位是格式、节点来源还是端口问题。
定义:clash 配置文件是用 YAML 编写的文本配置,负责端口、节点或节点订阅、策略组、DNS 与分流规则,本身通常不等于节点资源。
先分清三种文件:订阅、本地 YAML 和配置覆写
本文是第三方使用指南,不代表任何客户端或服务的官方页面。这里的“clash 配置文件”主要指以 mihomo 为例的 YAML 配置;经典 Clash、其他内核或图形客户端可能不支持全部字段,正式使用前应核对当前内核文档。
| 对象 | 是什么 | 应该怎么处理 |
|---|---|---|
| 订阅链接 | 通过 URL 获取节点集合或完整配置 | 在支持订阅的客户端配置页面导入并更新 |
| 本地 YAML | 保存端口、节点、策略组、DNS 和规则 | 导入客户端,或用文本编辑器修改后重新加载 |
| 配置覆写 | 在不直接改动原始订阅的情况下覆盖部分字段 | 使用客户端支持的覆写、扩展配置或 Merge 功能 |
配置文件本身通常不提供节点。节点必须来自你自己拥有且确认可信的订阅,或者来自本地 proxies 定义;没有节点的 YAML 可以验证结构,却不能单独产生可用线路。订阅地址、节点密码和控制接口密钥都不要公开粘贴。
如果你使用 Clash Verge Rev,官方文档把远程订阅和本地配置分开处理:本地配置可以通过“新建配置文件导入”或“拖拽配置文件导入”,其中拖拽导入要求版本至少为 v1.6.2。Clash Verge Rev 配置文件导入文档
先用最小模板验证 YAML 是否能加载
不要一开始就加入远程订阅、DNS、规则集和 TUN。先用下面的最小模板验证文件能否被当前 mihomo 内核读取。复制时保留空格缩进,不能使用 Tab;mihomo 文档说明 YAML 对大小写敏感,并使用缩进表达层级。mihomo YAML 语法说明
mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
ipv6: false
proxies: []
proxy-groups:
- name: 选择代理
type: select
proxies:
- DIRECT
rules:
- DOMAIN-SUFFIX,example.com,DIRECT
- MATCH,选择代理字段怎么看:mixed-port 同时提供 HTTP 和 SOCKS 入口;allow-lan: false 默认不向局域网开放;mode: rule 使用规则模式;proxy-groups 定义策略组;rules 按从上到下的顺序匹配,MATCH 通常作为最后的兜底规则。mihomo 通用配置字段 mihomo 路由规则文档
这个模板中的 proxies: [] 代表没有内置节点。若客户端提示配置有效但节点列表为空,这不是 YAML 语法错误,而是节点来源尚未加入。
进阶模板:加入节点提供者、策略组、规则集和 DNS
最小模板能加载后,再逐项增加功能。下面示例仍以 mihomo 字段为准,远程地址只是占位符;请替换成你自己确认可信的订阅地址,不要把真实订阅链接发布到文章、截图或日志中。
proxy-providers:
我的节点:
type: http
url: "https://example.com/your-subscription"
path: ./proxy_providers/my-provider.yaml
interval: 3600
health-check:
enable: true
url: https://www.gstatic.com/generate_204
interval: 300
timeout: 5000
lazy: true
proxy-groups:
- name: 自动选择
type: url-test
use:
- 我的节点
url: https://www.gstatic.com/generate_204
interval: 300
rule-providers:
本地规则:
type: file
behavior: classical
format: yaml
path: ./rules/local.yaml
dns:
enable: true
ipv6: false
enhanced-mode: redir-host
nameserver:
- https://dns.alidns.com/dns-query
rules:
- RULE-SET,本地规则,DIRECT
- DOMAIN-SUFFIX,example.com,DIRECT
- MATCH,自动选择proxy-providers 负责加载节点集合,策略组通过 use 调用该集合;rule-providers 负责加载规则文件,主规则再通过 RULE-SET 使用它。规则集的 behavior 必须与实际文件内容对应,常见值包括 domain、ipcidr 和 classical,format 可使用 yaml、text 或 mrs。mihomo proxy-providers 配置文档 mihomo rule-providers 配置文档
这里先使用 redir-host,避免新手同时排查 fake-ip、TUN 和 DNS 劫持。mihomo 文档列出 fake-ip 与 redir-host 两种增强模式;只有在确认基础配置可用后,才建议单独测试 DNS 模式变化。mihomo DNS 配置文档
安全字段怎么写:allow-lan、绑定地址和控制接口
如果只在当前设备使用,建议保持 allow-lan: false。确实需要让局域网设备连接时,应同时限制绑定地址和允许网段,而不是只把开关改成 true。
allow-lan: true
bind-address: 192.168.1.20
lan-allowed-ips:
- 192.168.1.0/24
lan-disallowed-ips:
- 192.168.1.3/32bind-address 用于限制监听地址,lan-allowed-ips 用于允许的来源网段,lan-disallowed-ips 用于排除特定地址。mihomo 通用配置文档还说明,黑名单优先于白名单;配置前应确认本机局域网地址,不要照抄示例地址。mihomo allow-lan 与网络绑定字段
如果启用了外部控制接口,还应设置访问密钥并避免把接口暴露到不必要的网络范围。不要在命令行、截图或排障日志中打印订阅 token、密码或 secret。
导入和重载:先验证结构,再验证节点
- 备份原文件。复制当前 YAML,尤其不要直接修改可能由订阅自动更新生成的原始文件;长期修改应放在客户端支持的覆写或扩展配置中。
- 检查文本格式。确认扩展名为
.yaml或.yml,使用空格缩进,冒号后留空格,列表项使用半角连字符;包含:、#或特殊字符的值应考虑加引号。 - 导入配置。在客户端的配置或 Profiles 页面导入本地 YAML,或者粘贴你自己的订阅 URL。不要把订阅 URL 当成 YAML 内容直接粘贴到编辑器。
- 重新激活。切换到目标配置后执行更新、重新激活或重载,再查看配置页面和日志面板是否出现具体行号或字段名。
- 确认节点来源。如果最小模板能加载但列表为空,检查
proxies或proxy-providers;如果 provider 更新失败,检查 URL、返回内容、文件路径和更新日志。
部分客户端会复制或重新生成配置文件,因此“改完后又恢复”不一定是编辑失败,也可能是更新动作重新写入了原始配置。此时应区分原始订阅、运行时配置和覆写文件,不要反复修改同一个自动生成文件。
导入失败五分钟排查清单
| 现象 | 先看哪里 | 处理方法 |
|---|---|---|
| YAML parse error 或 mapping values are not allowed | 日志面板给出的行号 | 检查 Tab、缩进、冒号后的空格、引号和上一行是否少了符号 |
| 7890 端口启动失败 | 系统端口监听结果 | 确认是否已有其他程序占用,再改用未占用端口 |
| 配置能加载但节点为空 | provider 更新日志和实际返回文件 | 检查 URL、订阅响应格式、path 权限及内核字段兼容性 |
| 规则没有按预期分流 | 运行模式、策略组名称和 rules 顺序 | 确认是 rule 模式,名称完全一致,并把 MATCH 放在末尾 |
| 改动被订阅更新覆盖 | 配置来源和覆写入口 | 不要改自动生成文件,把长期修改放到支持的覆写或 Merge 配置 |
检查端口时,7890 只是示例端口号。Windows 命令提示符中执行 netstat -ano | findstr 7890;PowerShell 中执行 Get-NetTCPConnection -LocalPort 7890;macOS 或 Linux 终端执行 lsof -i :7890 或 ss -lntp | grep 7890。如果结果显示其他进程正在监听该端口,就改用其他端口或处理冲突进程。
检查订阅时,仅用 HEAD 不能确认响应内容是否为客户端可识别的配置,排查时优先使用 GET 获取实际响应。Windows PowerShell 中执行以下命令;它不会把响应内容直接打印到屏幕:
Invoke-WebRequest -Method Get -Headers @{"User-Agent"="Mozilla/5.0"} -Uri "你的订阅地址" -OutFile "$env:TEMP\clash-subscription.yaml"Windows 命令提示符中使用 curl.exe,避免被 PowerShell 5.1 的同名别名接管:
curl.exe -L -A "Mozilla/5.0" -sS -o "%TEMP%\clash-subscription.yaml" "你的订阅地址"这里只检查 HTTP 返回、文件是否为空以及内容是否像 YAML 或客户端支持的配置,不要输出或分享真实订阅地址、Cookie、token 和密码。
经典 Clash、Clash Meta 和 mihomo 的兼容提示
| 名称 | 本文定位 | 不能直接假设的内容 |
|---|---|---|
| 经典 Clash | 可用于理解基础 YAML、端口、策略组和规则概念 | 不应默认支持 mihomo 的全部 provider、DNS 或规则字段 |
| Clash Meta | 部分客户端曾使用的内核称呼 | 实际字段取决于客户端集成的内核版本 |
| mihomo | 本文进阶模板的主要参考内核 | 仍需以当前 mihomo 配置文档为准 |
| Clash Verge Rev | 可作为配置导入界面示例 | 客户端版本、运行模式和实际内核可能改变行为 |
因此,遇到“字段不识别”时,不要只看客户端名称。先确认实际使用的内核和版本,再对照该内核的配置文档;无法核实支持范围的字段,应先从最小模板中删除。
最后核对:2026-10-26
本文以 mihomo 为例,重点说明 clash 配置文件的对象区别、YAML 基础模板、节点提供者、规则集、DNS、端口检查和常见报错。字段和客户端行为可能随版本变化,正式使用前应以当前客户端和 mihomo 文档为准。
常见问题
clash 配置文件一定要叫 config.yaml 吗?
不一定。文件名和默认目录由客户端及内核决定,部分客户端支持 .yaml 或 .yml。导入失败时先检查扩展名、编码、配置来源和当前内核,而不要只改文件名。
配置文件里没有节点,为什么仍然可以导入?
YAML 可以只包含端口、策略组和规则结构。节点需要通过 proxies、proxy-providers 或订阅提供;没有节点时可以验证配置是否能加载,但不能凭空获得可用线路。
为什么我修改配置后,订阅更新又恢复原样?
远程订阅更新可能重新生成或替换原始配置。不要把长期修改直接写在自动生成文件中,应使用客户端支持的覆写、扩展配置或 Merge 文件,并保留原始订阅备份。
YAML 提示缩进错误怎么办?
统一使用空格,不要使用 Tab;检查冒号后的空格、列表项前的半角连字符,以及包含冒号或井号的值是否需要引号。再按照日志面板提供的行号逐段检查。
规则写了但没有生效,最常见的原因是什么?
先确认运行模式为 rule,再检查规则目标名称与策略组 name 是否完全一致,并确认前面没有过早出现宽泛规则。mihomo 规则按从上到下匹配,MATCH 通常应放在最后。