截屏2026-09-16 19.59.44.jpg

零基础从零上手:Mihomo / Clash 进阶定制配置文件编写与修改完全指南

以 Profiles4limbo.yaml 配置为例

在线订阅转换工具:https://limbopro.com/tools/2yaml

点此下载基础配置模板示例文件:https://limbopro.com/tools/2yaml/Profiles4limbo.yaml

对于刚接触代理工具(如 Clash、Mihomo / Mihomo Party 等内核)的小白来说,打开一份动辄上千行的 YAML 配置文件时,往往会有一种面对“天书”的无力感。满屏的英文、奇怪的缩进、长长的链接,让人直呼头大。

但实际上,一份优秀的配置文件就像是一座全自动的现代化物流枢纽:

  • 全局设置与 TUN 是枢纽的地基与总闸,决定了怎么接管你的电脑流量。
  • 智能 DNS 是分拣中心的“安检与地址翻译”,负责把网址精准翻译成 IP,顺便防住中间拦截。
  • 规则集 (rule-providers) 是海关的黑白名单目录,源源不断地更新哪些是广告、哪些是 AI、哪些是流媒体。
  • 策略组 (proxy-groups) 则是各个专属通道(如美区节点、故障自动切换、广告拦截拒收)。
  • 路由规则 (rules) 则是交警指挥官,自上而下指挥每一个数据包该走哪条专属通道。

本文将结合生产环境级别的进阶定制配置文件,带你用“第一性原理”彻底拆解每一个键值对,挖掘那些小白平时绝对想不到的细节、坑点与核心原理!

问问AI

日常交流

用简单易懂的语言告诉我这段配置的作用或报错原因。
直接给出修改后的正确代码。
告诉我修改了哪里,以及后续我该注意什么。

场景化提问模板

## 场景化提问模板

### 场景 A:想学习 YAML 语法与基础结构
> “请用最通俗易懂的方式,向一个零基础新手讲解 Mihomo/Clash 的 YAML 配置文件结构。主要告诉我 `proxies`(节点)、`proxy-groups`(策略组)和 `rules`(规则)这三者之间是怎么关联和起作用的?”

### 场景 B:想自定义分流规则(如让某个网站走直连/代理)
> “我想在 Mihomo / Clash 的配置文件里加一条自定义规则:
> - 让 `example.com` 这个域名[走直连 / 走指定策略组]。
> - 让应用 `xxxx` 的流量走指定节点。
> 
> 请告诉我应该加在 `rules` 领域的什么位置?请给出标准的 YAML 代码示例。”

### 场景 C:策略组(Proxy Groups)配置搞不懂
> “我想新建一个叫‘流媒体专线’的策略组,要求:
> 1. 可以手动选择节点,也可以自动选择延迟最低的节点(URL-Test)。
> 2. 包含我指定的两个节点/订阅。
> 
> 请帮我写出标准的 `proxy-groups` 配置代码,并说明关键参数(如 `url`、`interval`、`tolerance`)的意思。”

### 场景 D:从零开始合并/DIY 配置文件
> “我现在手里有一个基础配置文件(包含规则和策略组),还有几个节点的订阅链接。我想知道把它们合并成一个完整 YAML 文件的大致步骤是什么?哪些部分可以改,哪些部分绝对不能改动缩进?”

 YAML:面向人类友好的配置文件

YAML 的全称原本是 “Yet Another Markup Language”(又一个标记语言),后来为了强调它面向数据的本质,官方将其递归重命名为 YAML Ain't Markup Language(YAML 不是标记语言)。

它之所以被称为“面向人类友好的配置文件”,核心在于它的设计哲学彻底反叛了传统配置文件(如 XML、JSON、INI)的机械感。我们可以从它的几个核心特质来深度剖析这种“友好”是如何实现的:

1. 语法极简:用“缩进”代替“符号地狱”

在 JSON 或 XML 中,机器为了理清层级,需要大量的花括号 {}、方括号 [] 或闭合标签 <tag></tag>。这些符号对编译器很友好,但对人类眼睛是一种负担。

  • YAML 的解法:它完全移除了这些视觉干扰,转而借鉴了 Python 的哲学——通过空白缩进来表达层级关系。

  • 直观对比:

    • JSON 的括号世界:{"server": {"host": "127.0.0.1", "port": 7890}}

    • YAML 的缩进世界:

      YAML

      server:
        host: 127.0.0.1
        port: 7890

      这种层级关系一眼望去,就像是一份结构清晰的脑图或大纲。

2. 原生支持注释:赋予配置以“上下文”

在绝大多数真正的软件工程和运维场景中,“记录为什么这么配”往往比“怎么配”更重要。

  • JSON 的硬伤:标准 JSON 规范为了追求极致的纯粹性,不支持任何注释。如果你在 JSON 里写 # 这是备注,解析器会直接报错。

  • YAML 的优雅:它原生支持 # 开头的注释。你可以随心所欲地在复杂的规则、正则或节点组旁边写下说明(例如你那份 Mihomo 配置里对各个区块的中文注释),让几个月后回过头来看代码的自己,或者接手的人瞬间看懂。

3. 直观的数据类型识别

YAML 不需要你用繁琐的语法去声明数据类型,它具备优秀的“字面量推导”能力:

  • 纯文本直接写,不需要加双引号(除非里面有特殊字符)。

  • true / false 直接识别为布尔值。

  • 数字直接识别为整数或浮点数。

  • - 开头直接识别为列表(数组)。

这种“像写文档一样写代码”的体验,大大降低了配置文件的编写门槛。

然而,“面向人类友好”的另一面代价:YAML 的黑暗面

任何事物都有两面性。虽然 YAML 对人类写起来、看起来很友好,但它对机器(解析器)却极其苛刻,这也是它在计算机界饱受争议的地方:

  1. 对空格极度敏感(“缩进地狱”):
    YAML 严禁使用 Tab 键缩进,必须使用空格。如果你不小心在某一行多敲或少敲了一个空格,或者混用了 Tab 和空格,整个配置文件就会解析失败。对于人类来说,“肉眼很难在几百行代码里找出哪个地方少了一个空格”。

  2. 隐式类型转换的“坑”:
    因为 YAML 太智能了,它有时会好心办坏事。例如,如果你写了一个国家简写 no(表示挪威的顶级域名或选项),YAML 的解析器可能会自动把它当成布尔值 false(No)。这种“智能”在处理版本号(如 1.0 变成 1)时也经常引发诡异的 Bug。

  3. 解析性能较低:
    由于其语法规范极其庞大且复杂(YAML 规范说明书厚达上百页),导致它的解析速度比 JSON 慢得多。

总结

YAML 的发明,本质上是把人类的痛苦转嫁给了计算机——它牺牲了机器解析的严谨性和速度,换取了人类在维护庞大配置时的愉悦感和低出错率。对于像 Mihomo/Clash 这种动辄几百行、充满嵌套代理组和规则集的复杂配置文件来说,YAML 几乎是现阶段不可替代的最佳选择。

🛠️ 第一章:动工前必须知道的 YAML 语法“三大铁律”

在正式修改或自己编写配置文件之前,必须先明白:YAML 是一种对格式极其苛刻的语言。只要有一处不注意,内核就会直接罢工报错。

  1. 绝对不能用 Tab 键缩进:每一层级的缩进必须使用空格(推荐统一按 2 个或 4 个空格)。如果在电脑上按了 Tab 键,轻则解析失败,重则直接崩溃。

  2. 冒号后面必须加空格:例如 type: http,冒号和 http 之间必须有一个半角空格,不能写成 type:http。

  3. 短横线代表列表(数组):同级元素的罗列(如多个节点或规则)必须用 - 开头,且 - 后面也必须带一个空格。

  • 在“冒号后面必须加空格”里补充:

    ⚠️ 注意标点全半角:所有 YAML 的语法符号(冒号 :、短横线 -、引号 "")必须在英文半角状态下输入。如果小白不小心在中文输入法下敲了一个全角的冒号(:),内核会瞬间罢工报错。

  • 在“短横线代表列表”里补充:

    ⚠️ 缩进对齐线:列表中的每一个 - 必须和上一层的键名保持垂直对齐或者多缩进几个空格,绝对不能参差不齐,否则列表的归属层级会发生混乱。

🌐 第二章:全局基础设置与 TUN 虚拟网卡——整机流量的总闸

这部分是整个软件的“发动机舱”,决定了它的性能边界与工作姿态。

1. 基础网络与端口设置

YAML

mixed-port: 7890
allow-lan: true
ipv6: true
mode: rule
log-level: info
bind-address: "*"
unified-delay: true
tcp-concurrent: true
keep-alive-interval: 60
find-process-mode: strict
external-controller: 127.0.0.1:9090
external-ui: ui
external-ui-url: https://github.com/Zephyruso/zashboard/releases/latest/download/dist.zip
  • mixed-port: 7890:混合端口。相当于在电脑本地开了一个“总快递站”,同时支持 HTTP 和 SOCKS5 协议。本地局域网或不支持系统代理的软件,只要把代理服务器指向 127.0.0.1:7890 就能被内核接管。

  • allow-lan: true:允许局域网连接。开启后,同一路由器下的其他设备(如手机、平板、另一台电脑)也能通过你的电脑 IP 和 7890 端口共享代理。

  • ipv6: true:启用 IPv6 支持。如果你的宽带或机场支持 IPv6,开启它能正常解析和接管 IPv6 流量,防止 IPv6 泄露。

  • mode: rule:运行模式。设置为 rule(规则分流)表示根据路由规则自动判断哪些流量走代理、哪些直连;如果是 global 则是全部走代理,direct 则是全部直连。

  • unified-delay: true:统一延迟计算。让不同协议的节点测速标准趋于一致,避免虚假的低延迟。

  • tcp-concurrent: true:TCP 并发连接。对同一域名同时发起多个 TCP 连接并取最快的一个,能显著提升网页打开的响应速度。

  • find-process-mode: strict:进程匹配模式。设置为 strict(严格模式)可以精准识别到底是哪个应用(比如某个游戏或浏览器)在发起网络请求,从而实现“按进程分流”。

  • external-controller 与 external-ui:外部控制 API 与网页端面板(如 Zashboard)。这让你可以通过浏览器直观地看到实时流量曲线、当前连接数,并手动切换节点。

2. TUN 虚拟网卡模式(现代代理的灵魂)

YAML

tun:
enable: true
stack: system
auto-route: true
strict-route: true
auto-redirect: true
auto-detect-interface: true
dns-hijack:
- any:53
- tcp://any:53
  • 小白必知细节:早期的代理软件需要你在每个软件里手动设置代理,或者依赖系统的 HTTP 代理。而开启 tun: enable: true 后,内核会在你的电脑操作系统里凭空“虚拟”出一张网卡。

  • stack: system:使用操作系统原生的网络协议栈,稳定性和兼容性最好。

  • auto-route: true:自动将操作系统的默认网关指向这张虚拟网卡。从此,无论是微信聊天、网游、还是各种不听话的后台软件,其所有流量都会被强行拦截并纳入内核分流,实现真正的全局接管。

  • dns-hijack:强行将所有发往 53 端口的 DNS 请求拦截下来交由内核处理。这是防止本地运营商 DNS 投毒污染的关键招式。

🔍 第三章:智能 DNS 配置——告别解析污染与缓慢

DNS 负责把网址(如 google.com)翻译成 IP 地址。不合理的 DNS 配置会导致网页打不开、加载慢,甚至被运营商重定向到广告页。

YAML

dns:
enable: true
ipv6: true
use-hosts: true
cache-algorithm: arc
use-system-hosts: true
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/15
fake-ip-range6: 2001:2::1/48
fake-ip-filter:
- rule-set:local_rules
nameserver:
- https://cloudflare-dns.com/dns-query#✈️ 机场专线
- https://dns.google/dns-query#✈️ 机场专线
  • cache-algorithm: arc:采用 ARC(自适应替换缓存)算法。能极其聪明地缓存你经常访问的网址,再次访问时实现零延迟解析。

  • enhanced-mode: fake-ip(虚假 IP 模式):

  • 核心原理:当你在浏览器输入网址时,内核不会慢吞吞地去远端查真实 IP,而是瞬间秒回一个假的虚拟 IP(例如 198.18.x.x)给操作系统。操作系统误以为连接已建立,马上开始发送数据。与此同时,内核在后台默默把真实 IP 翻译出来并悄悄替换。这能让网页打开速度获得质的飞跃。

  • nameserver 的加密指向:

  • [https://cloudflare-dns.com/dns-query#](https://cloudflare-dns.com/dns-query#)✈️ 机场专线:指定使用加密的 DoH(DNS over HTTPS)协议向 Cloudflare 查询境外网址,并且强制让这个查询走 ✈️ 机场专线。这样可以彻底避开本地运营商的 DNS 监听和污染。

📦 第四章:规则集提供者 (rule-providers)——自动进化的分流目录

如果把规则写死在配置文件里,几万行的代码会让文件变得无比臃肿且难以维护。现代配置文件引入了 rule-providers(规则集提供者),让内核可以联网自动同步最新的分流名单。

YAML

rule-providers:
openai:
type: http
behavior: classical
interval: 86400
format: text
url: https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Surge/OpenAI/OpenAI.list
path: ./ruleset/openai.list
advertising_lite:
type: http
behavior: classical
interval: 86400
format: text
url: https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Surge/AdvertisingLite/AdvertisingLite.list
path: ./ruleset/advertising_lite.list
  • type: http:表示这个规则集是通过网络链接远程下载的。

  • interval: 86400:更新频率。单位是秒,86400 秒正好等于 24 小时。也就是说,内核每天会自动去检查并下载一次最新的 OpenAI 或广告拦截黑名单。

  • path:下载到本地后的缓存路径。即使电脑断网重启,内核也能直接读取本地缓存的 openai.list 正常运行,不影响刚开机时的联网。

  • 小白避坑指南:openai 或 advertising_lite 只是你在这一段给它起的名字,这个名字在后面的 rules(路由规则)中必须完全一致,多打一个字母或大小写不对都会报错。

🎛️ 第五章:策略组定义 (proxy-groups)——节点的分类与智能调度

策略组是整个配置文件的核心灵魂,它决定了当流量触发某条规则时,应该交由哪个国家的节点、哪条专线、还是直接拦截。

1. 手动选择组 (select) 配合正则自动过滤

YAML

- name: 🤖 OpenAI
type: select
proxies:
- 🇺🇸 美国节点
- 🇯🇵 日本节点
- DIRECT
include-all: true
filter: "(?i)美国|USA|UnitedStates|US"
icon: https://fastly.jsdelivr.net/gh/Koolson/Qure@master/IconSet/Color/ChatGPT.png
  • type: select:手动选择型。允许你在面板里随心所欲地点选。

  • include-all: true 与 filter 的黄金组合:

  • 小白惊叹细节:很多小白最烦心的是机场订阅每次更新,节点名字都在变。而这里的 filter: "(?i)美国|USA|UnitedStates|US" 会通过正则表达式,自动把机场订阅里所有名字带“美国/US”的节点全部自动抓取并塞进这个组里。不管机场主怎么改名,美国节点永远会自动更新,再也不用手动一行行去写节点名了!

2. 故障自动切换组 (fallback)——永不断流的秘诀

YAML

- name: ♻️ 故障切换
type: fallback
url: http://www.gstatic.com/generate_204
interval: 60
timeout: 3000
include-all: true
exclude-type: DIRECT
  • type: fallback:顺位故障切换。

  • 工作原理:内核每隔 60 秒(interval: 60)会自动去访问谷歌的测速网址 generate_204。如果排在第一位的节点突然超时(超过 3000 毫秒没响应,timeout: 3000)或者挂掉了,内核会瞬间无缝把流量切到下一个健康的节点上,你甚至在看视频或打游戏时都不会觉察到中断。

🚦 第六章:路由规则 (rules)——决定命运的交通指挥官

万事俱备,最后来到 rules。规则是整个配置文件的“最后一道关卡”,指挥着每一个数据包的去向。

核心铁律:自上而下,命中即停止!

内核在处理你的网络请求时,会像查户口一样从上到下挨个比对规则。只要你的访问请求命中了某一条规则,内核立刻停止向下匹配,直接把流量送往对应的策略组。

YAML

rules:
- RULE-SET,adobecc,☠️ AdobeCrack
- RULE-SET,adblock4limbo_surge,🛑 广告拦截
- RULE-SET,openai,🤖 OpenAI
- RULE-SET,youtube,🇾 YouTube
- RULE-SET,local_rules,DIRECT
- GEOIP,CN,DIRECT
- MATCH,🐟 final
  • - RULE-SET,openai,🤖 OpenAI:如果你访问的网址命中了前面 rule-providers 载入的 OpenAI 列表,立刻交由 🤖 OpenAI 策略组处理。

  • - GEOIP,CN,DIRECT:如果目标服务器的 IP 地址归属在中国大陆(CN),直接走本地直连(DIRECT),绝不浪费宝贵的机场流量。

  • - MATCH,🐟 final(绝对不能少的核心兜底):

  • 小白致命大坑:MATCH 兜底规则必须永远放在配置文件的最底部!它的意思是“前面所有规则都没匹配上的未知流量,统统走这里”。

  • 如果你不小心把 MATCH 写到了第一行,那么恭喜你,你的所有网页、广告、国内国外流量都会在第一行被全部拦截或统统送进同一个地方,导致全局瘫痪。

⚠️ 进阶避坑指南补充:filter 策略组与主流分流规则源的正确打开方式

在实际修改和自定义 proxy-groups(策略组)以及挑选分流规则时,往往有几个连老手也容易踩坑的细节。

一、 filter 过滤器的避坑要点与血泪教训

在编写策略组时,通过 filter 配合正则表达式自动抓取节点是非常爽的功能,但如果不注意以下几点,轻则导致策略组空空如也、网页无法打开,重则引发内核报错。

  1. 核心铁律:一个策略组里只能有一个 filter
  • 错误写法:试图在一个策略组里写多个 filter 或多行正则条件。

  • 后果:YAML 解析器或内核会直接忽略后面的 filter,或者因为键名重复导致配置文件直接解析失败拒绝启动。

  • 正确做法:如果需要匹配多个关键词,必须在同一个 filter 字符串里用管道符 |(代表“或”)连起来。例如:

YAML

filter: "(?i)美国|USA|UnitedStates|US"
  1. 区分大小写与贪婪匹配的坑
  • (?i) 的妙用:正则表达式最前面加上 (?i) 代表忽略大小写。如果不加,机场节点如果写的是 us 01 或 US 01,而你的正则写的是 us,就会漏掉大写的节点。

  • 谨防误伤:如果你想过滤“香港”节点,只写 港 是很危险的,可能会把“新加坡(Singapore)”里面包含某些奇怪字符的节点也误抓进来。建议使用规范的简写组合:

YAML

filter: "(?i)(香港|HK|HongKong|Hong)"
  1. 当 filter 匹配不到任何节点时会发生什么?
  • 如果你的正则表达式写错了,导致机场里没有任何一个节点的名称能被它选中,该策略组就会变成空。
  • 此时如果有流量打入这个策略组,内核会直接报错或抛出 Proxy group [xxx] has no available proxies(策略组没有可用代理)的致命错误,导致断网。
  • 安全建议:在 proxies 列表里,除了靠 filter 自动抓取外,最好手动兜底写一个 DIRECT 或 ♻️ 故障切换,防止极端情况下策略组完全瘫痪。

💡 补充防坑提醒:filter 与列表的边界感 像 filter、include-all、icon 属于策略组的独立配置属性,必须和 type、proxies 保持同级对齐。千万不要把 filter 误塞到 proxies: 的短横线列表项中间(例如夹在几个节点名字的中间),否则会被内核当成普通节点处理导致报错。

💡 正则表达式必须加引号 当 filter 后面跟正则表达式(包含 |、?、() 等特殊符号)时,必须用双引号 "" 将其包裹起来(例如 filter: "(?i)台|Taiwan|TW"),防止 YAML 解析器把特殊符号误判为语法指令。

二、 去哪里找主流、高质量的 Clash 分流规则?

如果你想自己添加新的分流(比如想单独分流某个冷门软件或游戏),绝不能随便去网上乱搜。业界公认最权威、更新最勤、生态最完整的 Clash/Surge 分流规则库,首推 blackmatrix7 大佬开源的 iOS Rule Script 项目。

  • 主流分流规则仓库地址:

👉 ios_rule_script/rule/Clash at master · blackmatrix7/ios_rule_script · GitHub

如何在实战中使用它?

点开上面的链接,你会发现里面按各大主流服务商(如 OpenAI、GitHub、Bilibili、Steam 等)分门别类整理好了 .yaml 或 .list 格式的规则文件。

以添加 GitHub 分流为例,你只需要在你的配置文件中这样配置:

  1. 第一步:在 rule-providers 里登记远程链接

YAML

rule-providers:
github:
type: http
behavior: classical
interval: 86400
format: text
url: https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/GitHub/GitHub.list
path: ./ruleset/github.list
  1. 第二步:在 proxy-groups 里建一个对应的专属策略组(或者让它直接走“✈️ 机场专线”)

  2. 第三步:在 rules 路由规则里加上一行(注意:必须放在 MATCH 兜底的前面!)

YAML

rules:
- RULE-SET,github,✈️ 机场专线
- MATCH,🐟 final

通过这种标准的模块化引入方式,你的配置文件不仅体积轻巧(保持在 30KB 左右),而且能够每天自动通过云端同步最新的网址黑白名单,真正实现“一次配置,永久省心”!

📝 总结:小白的 YAML 修改实战演练

现在,当你再次打开一份 mihomo / Clash 配置文件时,你可以自信地进行以下微调:

  1. 想加个新软件的分流?去网上找个 Surge/Clash 格式的 .list 链接,在 rule-providers 里照葫芦画瓢加一段,然后在 rules 里写一行 - RULE-SET,你的名字,你想走的策略组。

  2. 想让某个国家的节点自动归类?复制一个 proxy-groups 模块,改改 name 和 filter 里面的正则表达式即可。

只要守住 “空格缩进、冒号空格、短横线列表、兜底放底部” 这四大金刚法则,你就能轻松驾驭属于自己的个性化网络分流世界!

最后修改:2026 年 09 月 20 日 11 : 41 AM