Clash Meta 配置完整教程 2026:从入门到精通 mihomo YAML 配置

什么是 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 中的结果。

⚠️
DNS 泄漏提醒

如果同时使用 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.commail.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 权限提醒

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(正确) vs key:value(错误)。
  • 包含特殊字符的字符串需要用引号包裹。

2. 端口被占用

如果 Clash 启动后提示端口冲突,说明 mixed-port 指定的端口已被其他应用使用。在 macOS 终端中执行 lsof -i :7890 查看占用进程,然后关闭该进程或更换端口号。

3. 节点无法连接

  • 检查服务器地址和端口是否正确。
  • 确认密码、UUID 等认证信息无误。
  • 确保 cipher(加密方式)与服务端一致。
  • 如果使用了 TLS,检查 sni 是否正确填写。

4. DNS 解析异常

  • 确认 dns.enabletrue
  • 使用 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 的日志输出来定位具体错误。

相关资源

📥 下载 ClashX ⚙️ Clash Meta 介绍 🛡️ Mac VPN 推荐 📝 博客 & 教程