mihomo (Clash) 配置详解:定制你的专属配置文件
AI内容警告本文使用了AI润色,更多内容请看文章内容说明
文章内容过时,等待重置中…
更新日志
- 2025-08-04: 优化描述,调整文章结构,部分内容润色。
阅前须知
- 本文旨在帮助您理解
mihomo配置文件的核心概念,掌握常用选项的用途,而不是直接提供一份现成的配置文件。- 本教程主要面向 Windows 用户,部分内容可能不适用于 Linux、Android、macOS 等其他平台。
- 内容基于个人使用经验总结,如有错漏,欢迎指正。
- 参考文档: MetaCubeX Wiki
- 本人使用的是Sub-Store进行的订阅获取/转换, 以此能保证多设备的订阅统一(和多订阅合并/筛选节点/覆写流量信息/节点增加前缀), 所以不会包含代理集合相关的内容
因为我没用过- 如果在完整阅读后仍有疑问,建议优先查阅文档或者提问,不建议直接去问AI,不建议直接相信AI告诉你的任何内容,如果给你新增了某些选项或配置,建议优先查阅文档得知其作用
- 除非你很有信心和时间,否则不建议从0开始写一份配置文件,那太累了,更推荐寻找他人分享的配置文件,在其基础上进行自定义修改
一、配置结构
一份完整的 mihomo 内核配置文件(通常是 .yaml 格式)主要由以下几个部分组成:
- 通用 (General): 基础设置,如代理端口、局域网访问控制等。
- DNS
- 代理节点 (Proxies) (本文不含相关内容,因为种类多且一般不会需要手动配置)
- 代理集合 (Provider) (本文不含相关内容)
- 代理组 (Proxy Groups)
- 路由规则 (Rules)
- 规则集合 (Rule Providers)
二、通用设置 (General)
1. 代理端口
这部分设置通常无需手动修改,因为客户端会自动覆写这些端口配置。一般只有跑裸核的时候需要修改
# port: 7890# HTTP(S) 代理服务器端口# socks-port: 7891# SOCKS5 代理端口
# 混合端口是一个特殊的端口,它同时支持 HTTP(S) 和 SOCKS5 协议。# 您可以使用任何支持 HTTP 或 SOCKS 代理的程序连接到这个端口。mixed-port: 10801 # HTTP(S) 和 SOCKS 代理混合端口
# 透明代理端口 (主要用于非 Windows 系统)# redir-port: 7892 # 适用于 Linux/Android/macOS# tproxy-port: 7893 # 仅适用于 Linux/Android2. 局域网与验证
allow-lan 设为 true 后,您局域网内的其他设备(如手机、电视)才能通过当前设备的 IP 和端口号进行代理。如果不需要,保持 false 即可。
allow-lan: true # 允许局域网连接bind-address: "*" # 绑定所有 IP 地址# authentication: # HTTP/SOCKS 入口验证,格式 "用户名:密码"# - "user:password123"# skip-auth-prefixes: # 跳过验证的 IP 段# - 127.0.0.1/8# - ::1/128# lan-allowed-ips: # 允许连接的 IP 段 (白名单)# - 0.0.0.0/0# - ::/0# lan-disallowed-ips: # 禁止连接的 IP 段 (黑名单,优先级更高)# - 192.168.0.3/323. 控制面板 (Web UI)
用于配置网页控制面板,如果您不使用 Web UI 或者通过客户端软件控制,可以忽略这部分。
# external-controller: 0.0.0.0:9093 # RESTful API 监听地址# secret: "123456" # 连接密码# external-ui: ui # 控制面板目录# external-ui-name: zashboard # 控制面板名称# external-ui-url: "https://github.com/Zephyruso/zashboard/archive/refs/heads/gh-pages.zip" # 下载地址4. 核心行为
这部分包含了一些影响网络性能和连接行为的关键选项。
个人建议
find-process-mode我是always。log-level平时使用info或warning即可。
unified-delay: true # 统一延迟计算,消除因协议不同带来的延迟差异tcp-concurrent: true # TCP 并发连接,对同一域名解析出的多个 IP 同时发起连接,择优使用
# 进程匹配模式# - always: 强制匹配所有连接的进程# - strict: (默认) 由 mihomo 判断是否开启# - off: 不匹配进程,推荐在路由器上使用find-process-mode: always
# 全局 TLS 指纹,用于模拟特定浏览器行为,无特殊需求使用 chrome (整活可以填个`random`,不过应该没啥大影响)global-client-fingerprint: chrome
profile: store-selected: true # 记录策略组的选择 store-fake-ip: true # 持久化 fake-ip 分配记录
log-level: info # 日志等级: silent | error | warning | info | debugipv6: true # 全局 IPv6 开关,如果您的网络不支持 IPv6,建议关闭
# 运行模式# - rule: 规则模式 (常用)# - global: 全局代理# - direct: 全局直连mode: rule5. GeoData
GeoIP 和 Geosite 数据库是 GEOIP 和 GEOSITE 规则的基础,通常保持默认即可。
# 自定义 geodata 数据库的下载地址geox-url: geoip: "https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.dat" geosite: "https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geosite.dat" mmdb: "https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/country.mmdb" # asn: "https://github.com/xishang0128/geoip/releases/download/latest/GeoLite2-ASN.mmdb"
geo-auto-update: false # 是否自动更新 geodatageo-update-interval: 24 # 更新间隔 (小时)geodata-mode: true # 更改 geoip 使用文件,mmdb 或者 dat,可选 true/false,true为 dat,此项有默认值 false三、TUN 模式
TUN 模式可以接管系统所有流量,实现真正的“全局代理”,比系统代理 (System Proxy) 更彻底。
个人建议建议启用 TUN 模式。
stack如无使用问题,建议使用mixed栈,默认gvisor。
tun: enable: true stack: mixed # 可选: system, gvisor, mixed dns-hijack: - 0.0.0.0:53 # 劫持所有 DNS 请求 # auto-detect-interface: true # 自动识别出口网卡 # auto-route: true # 自动配置路由表 # strict-route: true # 严格路由,防止流量泄漏 # mtu: 9000 # 最大传输单元,会影响极限状态下的速率,一般用户默认即可。stack (协议栈) 说明:
system: 使用系统协议栈,可以提供更稳定/全面的 tun 体验,且占用相对其他堆栈更低gvisor: 通过在用户空间中实现网络协议栈,可以提供更高的安全性和隔离性,同时可以避免操作系统内核和用户空间之间的切换,从而在特定情况下具有更好的网络处理性能mixed: TCP 使用system栈,UDP 使用gvisor栈,使用体验可能相对更好。
防火墙问题如果打开了防火墙,则无法使用 system 和 mixed 协议栈,通过以下方式放行内核: Windows: 设置 -> Windows 安全中心 -> 允许应用通过防火墙 -> 选中内核
MacOS: 一般无需配置,防火墙默认放行签名软件,如果遇到开启防火墙无法使用的情况,可以尝试放行:系统设置 -> 网络 -> 防火墙 -> 选项 -> 添加 mihomo appLinux: 一般无需配置,防火墙默认不拦截应用,如果遇到开启防火墙无法使用的情况,可以尝试放行 TUN 网卡出站流量(假设 TUN 网卡为 Mihomo): sudo iptables -A OUTPUT -o Mihomo -j ACCEPT
顺带提一下,如果你是Android跑裸核的,用
box4magisk这类模块,我个人认为使用透明代理更好
四、嗅探 (Sniffer)
Sniffer 这个我觉得不需要花时间去配置(没啥好配置的);如果你使用的是机场,那么很有可能节点出口就开着嗅探,这里修改成啥都没影响
直接这样用都可以
sniffer: enable: true override-destination: true # 使用嗅探结果作为实际访问地址 force-dns-mapping: true # 对 redir-host 类型识别的流量进行强制嗅探 parse-pure-ip: true # 对所有未获取到域名的流量进行强制嗅探 sniff: HTTP: ports: [80, 8080-8880] TLS: ports: [443, 8443] QUIC: ports: [443, 8443] # force-domain: # 强制嗅探的域名列表 # - +.v2ex.com # skip-domain: # 跳过嗅探的域名列表 # - Mijia Cloud五、DNS 设置
DNS 是整个配置的核心之一,直接影响访问速度和分流准确性。
关于DNS泄露
无特殊需求不应追求”无 DNS 泄露”为了追求所谓的“无 DNS 泄露”而全局使用国外 DNS (如
8.8.8.8),会导致所有域名都通过国外服务器解析。这会影响解析速度和解析结果。DNS泄露可以理解为DNS的出口的IP和你网络的出口IP的地理位置不一致; 真要非常关心DNS泄露,那我建议你直接切换到全局模式,全走代理出口就好了
以我的博客为例:
- 使用国内 DNS 解析: 会分流到优选的腾讯eo
- 使用国外 DNS 解析: Cloudflare CDN
参考配置
dns: enable: true # 缓存算法,推荐arc,默认lru cache-algorithm: arc # DOH 优先使用 http/3 prefer-h3: false use-hosts: true use-system-hosts: true # dns 连接遵守路由规则,需配置 proxy-server-nameserver # 强烈不建议和 prefer-h3 一起使用 respect-rules: false # DNS 服务监听,支持 udp, tcp; 一般无需设置 listen: 0.0.0.0:1053 ipv6: false # 默认 DNS, 用于解析 DNS 服务器 的域名; 必须为 IP, 可为加密 DNS default-nameserver: - 223.5.5.5 # DNS处理模式,可选值 fake-ip/redir-host,默认redir-host enhanced-mode: fake-ip # fakeip 下的 IP 段设置,tun 的默认 IPV4 地址 也使用此值作为参考 fake-ip-range: 198.18.0.1/16 # 可选 blacklist/whitelist,默认blacklist,whitelist 即只有匹配成功才返回 fake-ip fake-ip-filter-mode: blacklist # fakeip 过滤,以下地址不会下发 fakeip 映射用于连接 fake-ip-filter: - '*.lan' # 指定域名查询的解析服务器,可使用 geosite, 优先于 nameserver/fallback 查询 # 个人认为没必要使用,除非你需要特定域名或规则特定DNS,如果只是CN这种的无需使用,只需要配置 default-nameserver,nameserver,fallback 这三个即可 nameserver-policy: '+.arpa': '10.0.0.1' 'rule-set:cn': - https://doh.pub/dns-query - https://dns.alidns.com/dns-query # 默认的域名解析服务器 # 我一般放国内加密DNS nameserver: - https://doh.pub/dns-query - https://dns.alidns.com/dns-query # 后备域名解析服务器,一般情况下使用境外 DNS, 保证结果可信 # 配置 fallback 后默认启用 fallback-filter,geoip-code为 cn fallback: - tls://8.8.4.4 - tls://1.1.1.1 # 代理节点域名解析服务器,仅用于解析代理节点的域名,如果不填则遵循 nameserver-policy、nameserver 和 fallback 的配置 # 个人认为无需配置 proxy-server-nameserver: - https://doh.pub/dns-query # 用于 direct 出口域名解析的 DNS 服务器,如果不填则遵循 nameserver-policy、nameserver 和 fallback 的配置 # 个人认为无需配置 direct-nameserver: - system # 是否遵循 nameserver-policy,默认为不遵守,仅当 direct-nameserver 不为空时生效 # 个人认为为无需配置 direct-nameserver-follow-policy: false # 后备域名解析服务器筛选,满足条件的将使用 fallback 结果或只使用 fallback 解析 # 如无特殊规则需要添加也可以不配置,默认会配置 geoip-code为 cn fallback-filter: geoip: true geoip-code: CN geosite: - gfw ipcidr: - 240.0.0.0/4 domain: - '+.google.com' - '+.facebook.com' - '+.youtube.com'enhanced-mode 的选择
个人建议我更喜欢
redir-host模式,fake-ip下访问部分域名异常, 需要在fake-ip-filter添加对应域名(也就是回退到redir-host)才能访问, 既然如此那我就直接redir-host了但
fake-ip能实现非直连域名一定不在本地本机进行任何DNS解析,能有效避免DNS污染/泄露
ddns: enable: true ipv6: false prefer-h3: true listen: 0.0.0.0:53 enhanced-mode: redir-host cache-algorithm: arc use-system-hosts: true default-nameserver: - "119.29.29.29" - "223.5.5.5" - "114.114.114.114" - "tls://1.12.12.12:853" - "tls://223.5.5.5:853" nameserver: - "system" - "quic://223.5.5.5" - "tls://dot.pub:853" - "tls://dns.alidns.com" fallback: - "tls://1.1.1.1:853" - "https://dns.google/dns-query" - "tls://dns.google" - "tcp://208.67.222.222" - "tcp://8.26.56.2"六、代理组 (Proxy Groups)
代理组是 mihomo 实现复杂分流策略的基础,它允许你将多个节点按不同方式组织起来。
proxy-groups:- name: "proxy" # 策略组类型, select:手动选择, url-test:自动选择, fallback:自动回退(故障转移), load-balance:负载均衡(一般用不到) type: select # 引入出站代理(节点)或其他策略组 proxies: - DIRECT - ss # 引入代理集合(由于本文不含相关内容,因此简单解释一下,就是引入某个机场的节点) use: - provider1 - provider1
# 健康检查测试地址, 只会检查代理组的 proxies 字段的代理,不会检查代理集合(proxy-providers)的代理(通过 use 引入的)。 url: 'https://www.gstatic.com/generate_204' # 健康检查间隔,如不为 0 则启用定时测试,单位为秒 interval: 300 # 懒惰状态,默认为true,未选择到当前策略组时,不进行测试 lazy: true # 健康检查超时时间,单位为毫秒 timeout: 5000 # 最大失败次数,超过则触发一次强制健康检查,默认 5 max-failed-times: 5 # 禁用该策略组的UDP disable-udp: true # 引入所有出站代理以及代理集合,顺序将按照名称排序; 引入不包含策略组,可在proxies引入其他策略组 include-all: false # 引入所有出站代理,顺序将按照名称排序; 引入不包含策略组,可在proxies引入其他策略组 include-all-proxies: false # 引入所有代理集合,顺序将按照名称排序; 会使引入代理集合失效 include-all-providers: false # 筛选满足关键词或正则表达式的节点,可以使用 ` 区分多个正则表达式; 仅作用于引入代理集合以及引入所有出站代理 # 搭配 include-all: true ,是一个较常用的筛选方式,例如筛选某个国家的节点 filter: "(?i)港|hk|hongkong|hong kong" # 排除满足关键词或正则表达式的节点,可以使用 ` 区分多个正则表达式 # 可以用于排除一些流量信息节点(如果你认为不需要的话) exclude-filter: "美|日" # 不支持正则表达式,通过 | 分割,根据节点类型排除,仅排除引入出站代理 # 支持类型请参阅Adapter Type (https://github.com/MetaCubeX/mihomo/blob/fbead56ec97ae93f904f4476df1741af718c9c2a/constant/adapters.go#L18-L45),无视大小写 exclude-type: "Shadowsocks|Http" # 健康检查时期望的 HTTP 响应状态码。若配置了该字段,则只有当响应状态码与期望状态一致时才认为节点可用。默认为 *,表示对响应状态不做要求 expected-status: 204 # 在 api 返回hidden状态,以隐藏该策略组展示 (需要使用 api 的前端适配) hidden: true # 在 api 返回icon所输入的字符串,以在该策略组显示 (需要使用 api 的前端适配) # 很常用的配置 icon: xxx七、路由规则 (Rules)
规则是配置的最后一道关卡,它定义了什么样的请求应该走哪个策略组。规则从上到下依次匹配,一旦匹配成功,后续规则将被忽略。 推荐把所有非IP类规则写在IP类规则之前
常用规则类型
| 类型 | 描述 | 示例 |
|---|---|---|
DOMAIN | 匹配完整域名 | DOMAIN,google.com,代理 |
DOMAIN-SUFFIX | 匹配域名后缀 | DOMAIN-SUFFIX,google.com,代理 (匹配 www.google.com) |
DOMAIN-KEYWORD | 匹配域名关键字 | DOMAIN-KEYWORD,google,代理 |
DOMAIN-WILDCARD | 通配符匹配 | DOMAIN-WILDCARD,*.google.com,代理 (仅支持*和?) |
GEOIP | 匹配 IP 归属地 | GEOIP,CN,DIRECT (匹配中国大陆 IP) |
GEOSITE | 匹配预设的网站列表 | GEOSITE,google,代理 |
MATCH | 最终规则,匹配所有剩余流量 | MATCH,DIRECT |
PROCESS-NAME | 使用进程匹配,在Android平台可以匹配包名 | PROCESS-NAME,qq.exe,REJECT |
TIP更多规则类型和高级用法,请参阅 官方文档。
八、规则集合 (Rule Providers)
为了方便管理和更新大量的规则,我们可以使用远程规则订阅。
rule-providers: # 订阅一个名为 "google" 的规则集 google: type: http # 订阅类型, 可选http / file / inline (除了http外其他两个应该很少用) behavior: classical # 行为 (domain/ipcidr/classical) format: yaml # 格式,可选 yaml/text/mrs,默认 yaml url: "https://raw.githubusercontent.com/user/repo/Google.yaml" path: ./rules/google.yaml # 本地路径,可选 interval: 86400 # 更新间隔 (秒),例如 86400 为一天 proxy: DIRECT # 使用哪个策略组下载规则, 可选然后在路由规则部分,使用 RULE-SET 来引用它:
rules: - RULE-SET,google,代理赞助支持
如果这篇文章对你有帮助,欢迎赞助支持!

