什么是 Clash Meta 配置文件?为什么要学习它?
Clash Meta(现已更名为 mihomo)是目前最主流的代理内核之一,被 ClashX、Clash Verge、Clash Nyanpasu 等众多客户端采用。它的核心功能——代理节点管理、DNS 解析、流量规则分流——全部通过一个 YAML 格式的配置文件来定义。
虽然大多数用户可以通过导入订阅链接来自动获取配置,但理解配置文件的结构和原理能带来明显的好处:
- 精准分流:自定义规则,让国内流量直连、海外流量走代理,避免不必要的绕路。
- 故障排查:遇到无法连接时,能快速定位是节点问题、DNS 问题还是规则配置错误。
- 性能优化:合理配置 DNS、启用 TUN 模式可以显著提升网络体验。
- 安全可控:清楚每一项配置的含义,避免使用来路不明的配置导致隐私泄露。
已经安装了 ClashX 或 Clash Verge 等客户端,想深入理解和自定义配置文件的用户。无论你是刚接触代理工具的新手,还是想优化现有配置的进阶用户,本教程都会帮到你。
配置文件基础结构
一个完整的 Clash Meta 配置文件由多个顶层字段组成。以下是最基本的骨架结构,每个字段我们会逐一讲解:
# Clash Meta (mihomo) 基础配置
# 混合代理端口(HTTP + SOCKS5 共用一个端口)
mixed-port: 7890
# 允许局域网设备连接
allow-lan: true
# 绑定地址,* 表示所有网卡
bind-address: '*'
# 运行模式:rule(规则)/ global(全局代理)/ direct(直连)
mode: rule
# 日志级别:silent / error / warning / info / debug
log-level: info
# 外部控制器 API,用于仪表盘或客户端通信
external-controller: 127.0.0.1:9090
# 外部控制器访问密钥(可选但推荐设置)
secret: "your-secret-here"
# 查找进程名称(用于基于进程的规则匹配)
find-process-mode: strict
# GeoIP 数据文件格式
geodata-mode: true
geox-url:
geoip: "https://cdn.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.dat"
geosite: "https://cdn.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geosite.dat"
mmdb: "https://cdn.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/country.mmdb"
关键字段解释
- mixed-port:最重要的端口配置。设置为 7890 后,HTTP 代理和 SOCKS5 代理都通过这个端口接入。如果需要分开,可以分别使用
port(HTTP)和socks-port(SOCKS5)。 - allow-lan:设为
true后,同一局域网下的其他设备(如手机、平板)可以通过你的电脑作为代理网关上网。 - mode:决定流量的全局行为。
rule是最常用的模式,让 Clash 根据规则列表决定每个连接走代理还是直连。global让所有流量走代理,direct让所有流量直连。 - external-controller:提供 RESTful API,让客户端的仪表盘(Dashboard)、yacd 等管理面板可以连接和控制 Clash。
- find-process-mode:启用后可在规则中按进程名匹配(如让 Telegram 走特定节点),
strict模式最精确但稍微消耗更多资源。
DNS 配置详解
DNS 配置是 Clash Meta 中最影响上网体验的部分之一。错误的 DNS 设置可能导致解析缓慢、无法访问某些网站,甚至造成 DNS 泄漏。
dns:
enable: true
listen: 0.0.0.0:53
ipv6: false
# enhanced-mode 决定 DNS 的工作方式
# fake-ip: 返回虚拟 IP,加速首次连接(推荐)
# redir-host: 返回真实 IP,兼容性更好
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
# 排除不走 fake-ip 的域名
fake-ip-filter:
- '*.lan'
- '*.local'
- 'localhost.ptlogin2.qq.com'
- '+.stun.*.*'
- '+.stun.*.*.*'
- 'lens.l.google.com'
- 'stun.l.google.com'
# 默认 DNS 服务器(用于解析国内域名)
nameserver:
- https://doh.pub/dns-query
- https://dns.alidns.com/dns-query
- 223.5.5.5
- 119.29.29.29
# 回退 DNS(用于解析可能被污染的域名)
fallback:
- https://dns.cloudflare.com/dns-query
- https://dns.google/dns-query
- tls://8.8.4.4:853
# 回退过滤策略
fallback-filter:
geoip: true
geoip-code: CN
geosite:
- gfw
ipcidr:
- 240.0.0.0/4
domain:
- '+.google.com'
- '+.facebook.com'
- '+.youtube.com'
fake-ip vs redir-host
fake-ip 模式是目前的推荐选择。当应用程序请求 DNS 解析时,Clash 会立即返回一个虚拟 IP(从 fake-ip-range 中分配),然后在后台异步完成真实 DNS 解析。这种方式的好处是连接建立速度极快,因为不需要等待 DNS 结果返回。
redir-host 模式会等待真实 DNS 解析完成后再返回结果。虽然速度稍慢,但在某些依赖真实 IP 的场景(如本地设备发现、特定游戏联机)中更可靠。
nameserver 和 fallback 的协作
nameserver 中配置的是主 DNS 服务器,通常使用国内的公共 DNS(如阿里 DNS、腾讯 DNS),它们解析国内域名速度最快。fallback 中配置的是备用 DNS,通常使用海外 DNS(如 Cloudflare、Google),当 Clash 检测到主 DNS 返回的 IP 可能被污染时(通过 fallback-filter 判断),会自动使用 fallback 中的结果。
如果同时使用 fake-ip 模式和 TUN 模式,请确保 dns.listen 配置正确,避免系统 DNS 请求绕过 Clash 直接发送到运营商 DNS,造成隐私泄漏。
代理节点配置
代理节点(proxies)是配置文件的核心部分,定义了你可以使用的每一个代理服务器。Clash Meta 支持多种协议,以下是各主流协议的配置示例:
Shadowsocks (SS)
proxies:
- name: "SS-HK"
type: ss
server: hk.example.com
port: 8388
cipher: aes-256-gcm
password: "your-password"
udp: true
VMess
- name: "VMess-JP"
type: vmess
server: jp.example.com
port: 443
uuid: a1b2c3d4-e5f6-7890-abcd-ef1234567890
alterId: 0
cipher: auto
tls: true
network: ws
ws-opts:
path: /ws-path
headers:
Host: jp.example.com
Trojan
- name: "Trojan-US"
type: trojan
server: us.example.com
port: 443
password: "your-password"
udp: true
sni: us.example.com
skip-cert-verify: false
VLESS(Clash Meta 特有)
- name: "VLESS-SG"
type: vless
server: sg.example.com
port: 443
uuid: a1b2c3d4-e5f6-7890-abcd-ef1234567890
network: ws
tls: true
udp: true
flow: xtls-rprx-vision
ws-opts:
path: /vless-ws
headers:
Host: sg.example.com
reality-opts:
public-key: "your-public-key"
short-id: "your-short-id"
Hysteria2(Clash Meta 特有)
- name: "Hy2-TW"
type: hysteria2
server: tw.example.com
port: 8443
password: "your-password"
obfs: salamander
obfs-password: "obfs-password"
sni: tw.example.com
skip-cert-verify: false
up: "30 Mbps"
down: "200 Mbps"
如果你的服务商支持 Hysteria2,优先选择它——基于 QUIC 协议,在高丢包网络环境下表现远优于 TCP 协议。VLESS + Reality 是目前最难被检测的方案之一。传统的 SS 和 VMess 仍然稳定可靠,是最通用的选择。
代理组策略配置
代理组(proxy-groups)是 Clash 实现智能分流的关键。你可以将多个节点组合在一起,并定义选择策略。
手动选择(select)
proxy-groups:
- name: "🚀 节点选择"
type: select
proxies:
- "♻️ 自动选择"
- "🔮 负载均衡"
- "SS-HK"
- "VMess-JP"
- "Trojan-US"
- "VLESS-SG"
- "Hy2-TW"
- DIRECT
自动测速(url-test)
- name: "♻️ 自动选择"
type: url-test
proxies:
- "SS-HK"
- "VMess-JP"
- "Trojan-US"
- "VLESS-SG"
- "Hy2-TW"
url: http://www.gstatic.com/generate_204
interval: 300
tolerance: 50
故障转移(fallback)
- name: "🔄 故障转移"
type: fallback
proxies:
- "Hy2-TW"
- "VLESS-SG"
- "Trojan-US"
url: http://www.gstatic.com/generate_204
interval: 300
负载均衡(load-balance)
- name: "🔮 负载均衡"
type: load-balance
proxies:
- "SS-HK"
- "VMess-JP"
- "Trojan-US"
strategy: consistent-hashing
url: http://www.gstatic.com/generate_204
interval: 300
四种策略的适用场景:
- select:最灵活,手动切换节点。适合需要精确控制出口 IP 的场景(如解锁特定地区流媒体)。
- url-test:全自动选最快节点。
tolerance参数(单位 ms)设定容忍范围,避免频繁切换——新节点延迟必须比当前节点低超过 tolerance 值才会切换。 - fallback:按优先级排列,第一个可用就用第一个。适合有明确优先节点偏好的场景。
- load-balance:将请求分散到多个节点。
consistent-hashing策略让同一域名始终走同一节点,避免 IP 频繁变动。
规则分流配置
规则(rules)定义了每个网络连接应该走代理、直连还是屏蔽。Clash Meta 从上到下逐条匹配,匹配到第一条就执行对应策略,所以规则的顺序很重要。
rules:
# 域名精确匹配
- DOMAIN,google.com,🚀 节点选择
# 域名后缀匹配(包括所有子域名)
- DOMAIN-SUFFIX,googleapis.com,🚀 节点选择
- DOMAIN-SUFFIX,github.com,🚀 节点选择
- DOMAIN-SUFFIX,youtube.com,🚀 节点选择
# 域名关键词匹配
- DOMAIN-KEYWORD,google,🚀 节点选择
- DOMAIN-KEYWORD,twitter,🚀 节点选择
- DOMAIN-KEYWORD,facebook,🚀 节点选择
# GeoSite 规则(使用 Meta 扩展数据库)
- GEOSITE,google,🚀 节点选择
- GEOSITE,github,🚀 节点选择
- GEOSITE,telegram,🚀 节点选择
- GEOSITE,cn,DIRECT
# IP 地址段匹配
- 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
- IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
# GeoIP 规则(根据 IP 归属地匹配)
- GEOIP,CN,DIRECT
- GEOIP,private,DIRECT,no-resolve
# 进程名匹配(需要 find-process-mode 开启)
- PROCESS-NAME,Telegram,🚀 节点选择
- PROCESS-NAME,Steam,DIRECT
# 兜底规则(必须放在最后)
- MATCH,🚀 节点选择
规则类型速查
- DOMAIN:精确匹配完整域名,如
google.com不会匹配www.google.com。 - DOMAIN-SUFFIX:匹配域名后缀,
google.com会同时匹配www.google.com和mail.google.com。这是最常用的规则类型。 - DOMAIN-KEYWORD:包含关键词即匹配,范围最广但也最容易误伤。
- GEOSITE:Clash Meta 特有,基于分类好的域名数据库匹配,比手动维护域名列表高效得多。
- IP-CIDR:匹配目标 IP 地址段。加
no-resolve参数可以跳过 DNS 解析,避免在 fake-ip 模式下触发不必要的解析。 - GEOIP:根据 IP 地理位置匹配,
CN匹配中国大陆 IP。 - PROCESS-NAME:按应用进程名匹配,实现对特定应用的精确控制。
- MATCH:兜底规则,放在所有规则的最后,匹配所有未被前面规则命中的流量。
精确规则(DOMAIN)放在前面,宽泛规则(DOMAIN-KEYWORD、GEOSITE)放在中间,IP 类规则和兜底规则放在最后。这样能保证命中率和性能的最佳平衡。
TUN 模式配置
TUN(网络隧道)模式可以接管系统所有流量,包括那些不支持设置代理的应用程序。在 Clash Meta 中,TUN 模式已经非常成熟,是实现真正全局代理的最佳方案。
tun:
enable: true
stack: system # system / gvisor / mixed
dns-hijack:
- any:53
- tcp://any:53
auto-route: true
auto-detect-interface: true
# macOS 下的 MTU 设置
mtu: 9000
TUN 栈选择
- system:使用系统网络栈,性能最好,兼容性最高。在 macOS 上推荐使用。
- gvisor:用户态网络栈,不依赖系统实现,在某些 Linux 环境下更稳定。
- mixed:混合模式,TCP 使用 system,UDP 使用 gvisor。适合 UDP 表现不佳的系统环境。
dns-hijack 会劫持所有 DNS 查询请求,确保它们经过 Clash 的 DNS 模块处理而不是直接发给运营商 DNS,是防止 DNS 泄漏的核心配置。auto-route 自动创建路由表项,无需手动配置。auto-detect-interface 自动识别出站网卡。
TUN 模式需要管理员权限(macOS 上需要在系统设置中授权 VPN 权限)。首次启用时,系统会弹出授权提示,点击允许即可。如果使用 ClashX Pro,TUN 功能已经内置。
进阶:脚本规则与子规则
Clash Meta 提供了比传统规则列表更强大的流量控制方式,适合有复杂分流需求的高级用户。
Sub-Rules(子规则)
子规则允许你在一条规则命中后,继续使用另一组规则进行细分匹配。这在需要对同一类流量进行更精细控制时非常有用。
# 主规则中引用子规则
rules:
- SUB-RULE,(AND,((GEOSITE,geolocation-!cn),(NOT,((GEOSITE,cn))))),overseas-rules
- SUB-RULE,(GEOSITE,cn),china-rules
- MATCH,🚀 节点选择
# 子规则定义
sub-rules:
overseas-rules:
- GEOSITE,youtube,📹 YouTube
- GEOSITE,netflix,🎬 Netflix
- GEOSITE,openai,🤖 AI 服务
- GEOSITE,telegram,📱 Telegram
- MATCH,🚀 节点选择
china-rules:
- GEOSITE,bilibili,📺 哔哩哔哩
- GEOSITE,zhihu,DIRECT
- MATCH,DIRECT
Rule Providers(规则集引用)
当规则数量庞大时,可以将规则存储在外部文件或远程 URL 中,通过 rule-providers 引用:
rule-providers:
reject:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt"
path: ./ruleset/reject.yaml
interval: 86400
proxy:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt"
path: ./ruleset/proxy.yaml
interval: 86400
direct:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt"
path: ./ruleset/direct.yaml
interval: 86400
rules:
- RULE-SET,reject,REJECT
- RULE-SET,proxy,🚀 节点选择
- RULE-SET,direct,DIRECT
- GEOIP,CN,DIRECT
- MATCH,🚀 节点选择
使用 rule-providers 的好处是规则可以自动更新(通过 interval 设置更新间隔,单位秒),且主配置文件保持简洁。behavior 字段有三种类型:domain(域名列表)、ipcidr(IP 地址段列表)、classical(混合格式)。
常见错误与排查指南
即使是经验丰富的用户也经常在配置中遇到问题。以下是最高频的错误和解决方案:
1. YAML 格式错误
这是最常见的问题。YAML 对缩进极其敏感:
- 必须使用空格缩进,绝对不能用 Tab 键。
- 同一层级的缩进必须一致(推荐统一使用 2 个空格)。
- 冒号后面必须有空格:
key: value(正确) vskey:value(错误)。 - 包含特殊字符的字符串需要用引号包裹。
2. 端口被占用
如果 Clash 启动后提示端口冲突,说明 mixed-port 指定的端口已被其他应用使用。在 macOS 终端中执行 lsof -i :7890 查看占用进程,然后关闭该进程或更换端口号。
3. 节点无法连接
- 检查服务器地址和端口是否正确。
- 确认密码、UUID 等认证信息无误。
- 确保
cipher(加密方式)与服务端一致。 - 如果使用了 TLS,检查
sni是否正确填写。
4. DNS 解析异常
- 确认
dns.enable为true。 - 使用 DoH(DNS over HTTPS)格式的 DNS 服务器,避免 DNS 请求被运营商劫持。
- 如果使用 fake-ip 模式但某些应用出问题,将该应用的域名加入
fake-ip-filter。
5. 规则不生效
- 检查规则是否被更前面的规则"抢先"匹配了。规则是从上往下按顺序执行的。
- 确认代理组名称与规则中引用的名称完全一致(区分大小写和 emoji)。
- 使用客户端的「连接」面板查看具体请求命中了哪条规则,辅助调试。
将 log-level 临时设为 debug,可以在日志中看到每个连接的完整匹配过程。排查完问题后记得改回 info,避免日志文件过大。
常见问题 (FAQ)
1. Clash Meta 和原版 Clash 的配置文件有什么区别?
Clash Meta(mihomo)在原版 Clash 配置格式的基础上进行了大量扩展。主要区别包括:支持 VLESS、Hysteria2、TUIC 等新协议;增加了 TUN 模式的精细化配置;支持 sub-rules(子规则)和更复杂的规则匹配;DNS 配置支持更多解析模式。原版 Clash 的配置文件可以在 Clash Meta 中使用,但反过来不一定兼容。
2. Clash Meta 配置文件放在哪个目录?
配置文件位置取决于你使用的客户端。ClashX 在 macOS 上默认将配置文件存放在 ~/.config/clash/ 目录下。Clash Verge 有自己的配置管理目录,通常在应用数据文件夹中。你也可以在客户端设置中手动指定配置文件路径。配置文件通常以 .yaml 或 .yml 为后缀名。
3. fake-ip 和 redir-host 模式哪个更好?
fake-ip 模式在绝大多数场景下表现更优。它通过返回虚拟 IP 来加速 DNS 解析过程,减少首次连接的延迟,特别适合日常浏览和流媒体使用。redir-host 模式会返回真实 IP 地址,在某些需要真实 IP 的场景中更合适。推荐默认使用 fake-ip,遇到兼容性问题时再切换为 redir-host。
4. 为什么我的 Clash Meta 配置文件无法加载?
配置文件无法加载通常有以下原因:1)YAML 格式错误,最常见的是缩进不一致(必须用空格,不能用 Tab);2)端口冲突,mixed-port 指定的端口已被其他应用占用;3)代理节点信息有误;4)规则语法错误。建议使用 YAML 验证工具检查格式,并查看 Clash Meta 的日志输出来定位具体错误。