1. 先选路径:一锅端 YAML 合并,还是多套 profile 切换
Clash 多订阅合并常见有两种动机,心智模型完全不一样。第一种是:所有节点与规则最终在一份「运行时配置」里同时存在,你把来自 A、B、C 的代理资源都装进同一棵 proxy-groups可选集合,再用 rules决定谁先谁后。这种做法适合「我想在一个界面里点选」「不想维护三份互不通信的配置」。第二种动机是:根本不想混在一起——例如公司环境与个人环境要硬隔离,或你不想把流媒体专用规则与工作用的 DNS/Fake-IP 设写进同一份 YAML,那就应该使用多套 profile(或等价的多文件入口),在同一台机器上切换载入不同文件,而不是强求「字面意义上的合并成一个 blob」。
一旦你明确目标属于哪一种,后续的覆写策略才会清晰:一锅煮时,关注点在于「远端导入的 proxies 叫什么、怎么被 prepend 插队」;而多 profile时,关注点在于「磁盘上存几套 config.yaml、快捷键切哪一套」,覆写更多是对当前载入这份做微调。两种路径没有绝对优劣——只有是否与你的风险边界(日志、分流、出站 IP)对齐。若你已熟悉规则顺序与匹配语义,可把本文与 规则与分流顺序对照阅读。
2. 第一步:多条订阅如何在合并后的配置里「并排待命」
在现代 mihomo语境下,远端订阅往往不是直接「贴」成一块静态 proxies: 列表完事,而是由提供者(provider)周期性拉取、解析后在内存里并入。你在 GUI(如桌面端)里「添加多条订阅」,底层通常等价于:为每条 URL 起一个唯一前缀名,再在需要时把整个 provider 的产物暴露给策略组可选集合。这比早年「整份配置只有一段订阅」更清晰:更新频率、超时与缓存可以按源单独调,也方便你在日志里回溯「这条失败的是哪家」。
无论你是手写 YAML 还是用客户端生成文件,自检时应看见多套 proxy-providers 或等价结构并列,每个都有独立 url、path 或interval;而不应出现「两处指向同一本地缓存文件名却装作两家」这种事——那可是订阅冲突的高危雷区之一。示意(字段名请以你所用内核与客户端版本的文档为准):
proxy-providers:
airport-a-nodes:
type: http
url: "https://example-a.com/sub?token=***"
path: ./providers/airport-a.yaml
interval: 3600
airport-b-backup:
type: http
url: "https://example-b.com/link?token=***"
path: ./providers/airport-b.yaml
interval: 7200
当你在 proxy-groups 里用use:把整个 provider 挂进可选代理池时,本质是在运行时把「该文件当前解析到的节点一览」塞进组里。YAML 合并在这里的体现是:多份异步来源最终映射到一棵共享的策略树,而不是手写把三家节点抄进一页纸。若在拉取时出现 TLS、DNS、回环超时,可先对照站内 订阅更新与日志排错(Windows)把时间花在正确的一层上。
3. 第二步:处理订阅冲突与「同名」节点
所谓订阅冲突,最常见不是「两家公司节点质量打架」,而是:名字撞车。许多机场下发的节点名遵循「香港 01」「美国 02」这种模板——当你并行拉取两份不同机场时,极容易在合并后的proxies空间里出现完全相同的名字指向两个不同远端。内核在解析或你在 GUI 里点选策略时,就会把后续引用搞混,看起来像「选了 A 却仍走 B」的神秘 bug。
务实的修法有三类,按工程量从低到高排列:其一,在客户端或转换脚本层面为每家订阅自动加前缀别名(例如A-香港-01与B-香港-01),从源头消歧义。其二,若你只依赖 provider 文件名而不关心节点展示名,可确保策略组引用用 provider层级而不是裸抄节点数组。其三,对已存在的重复名做人工改名(注意有些 GUI 改名后会被下次更新覆盖——需要看你的客户端是否锁住覆写)。
另一类冲突来自规则或策略组同名:例如上游模板里都有MATCH兜底到不同的策略组别名,你一合并就出现「后加载的兜底覆盖先加载的」,表现为分流突然整体漂移。解法同样是显式命名隔离:把与工作相关的组叫PROXY-WORK,与个人相关的叫PROXY-HOME,再用你自己的rules:总控谁先匹配谁。Override此时负责的是:在不改供应商原始片段的前提下,把你的总控插队到正确深度。
4. 第三步:用策略组把你的多源出口揉成一手牌
光有多个 provider,不等于你会「用得舒服」。实操上一般需要至少三类proxy-groups分工:其一是总入口(用户日常手动或自动选用的那一组SELECT);其二是功能性旁路(例如流媒体、超低延迟游戏用独立URL-TEST);其三是容错FALLBACK或与测速结合的组,避免单条订阅临时抽风时整张表不可用。你从多个订阅里挑节点进这些组的过程,本质是对 YAML 语义做二次编排,而不是简单「把两段 YAML 首尾相接」——后者往往留下两套rules互相打架的第一行就开始冲突。
若想在大流量场景下把连接摊到多台,而不是压在单一测胜节点上,可把部分业务指向LOAD-BALANCE策略组——这与「多订阅并行」是正交能力,但常与多源组合一起出现。Clash 配置里如何写load-balance与健康检查详见站内 负载均衡策略组专文;本文只提示不要把它与『把两家订阅揉成一家』混淆:前者分摊连接,后者解决「出口从哪一家的池子里取名字」。
| 你想要的体验 | 更匹配的 proxy-groups 组合 | 与多订阅的直接关系 |
|---|---|---|
| 在同一界面选一个「总出口」,偶尔切流媒体 | SELECT / URL-TEST + 多条规则指向不同功能性组 | 各 provider 的节点名须先去歧义再填入组 |
| 订阅 A 挂机、B/C 仅存备用 failover | FALLBACK / 顺序敏感的对照表 | 关注点从「并排」转成按序尝试健康成员 |
| 不想改上游,只希望插两条直连规则置顶 | prepend-rules 或通过覆写插队 | 不改变 provider 字节,但对最终 rule 链表动刀 |
5. 覆写(override / mixin):在不动上游的前提下插队规则
「覆写」在圈子里有时叫 mixin、补丁、snippet——核心思想一致:保留远端模板与订阅可被覆盖更新的能力,而把只与个人环境相关的改写抽离到单独文件。Mihomo一类实现通常提供prepend-rules、append-rules、对 DNS 段落或 tun 参数的同类字段,使你的本地片段在合并后的 YAML AST里处于「确定会先被匹配」或「确定垫后」的位置。这与「直接去改机场下发的原始节点」截然不同:后者一遇更新即丢失;前者把可变与不可变关注点分离。
当你在桌面 GUI(例如常见 fork)里勾选「启用覆写 / 混入」并把路径指向某个override.yml时,自检方式很简单:导出最终生效的运行时配置(内核正在使用的那份),确认你的prepend-rules已经出现在整条rules:链表的顶部附近,且没有被意外重复一遍。若有重复两段相同匹配,多半是GUI 与你的手写片段同时注入了同类键——这就是另一类「看起来像订阅冲突其实是配置重复注入」。
实操建议:先在覆写文件里只放最小插队——例如两行DOMAIN-KEYWORD与工作域相关的DIRECT——验证加载顺序无误后,再逐步补 DNS 或 Sniffer。Clash YAML 合并从来不是「字面拼接字符串」,而是结构化合并:键冲突时谁是赢家取决于实现与载入顺序——因此永远以导出后的最终结果为准,而不要凭记忆觉得你「应该已经 prepend 成功了」。
6. profiles:按场景拆文件,切换而不覆盖
当你的需求是「上班一套、回家一套、出国旅行再一套」,多 profile比强行合并更清晰:每一套对应磁盘上的完整配置树——含独立订阅列表、可选独立覆写文件名、甚至可能不同的 TUN/系统代理默认值。切换 profile 本质是让内核载入另一份运行时入口,因此不存在A 套里的prepend-rules残留在 B 套里的问题——除非你的客户端设计了「全局注入」一类的跨 profile 钩子,那才是需要单独记在心里的例外。
实操上可把 profile 视作工作空间:profile-A主攻流媒体与家事网络,导入包含地区解锁规则的模板;profile-B只放行开发相关域名与白名单。它们之间不负责自动 YAML 双向同步——若你希望同一套 prepend 规则对两套生效,可把那段片段存成单独的公共片段文件,在各 profile 的覆写/include 里都引用同一路径(若客户端支持 include),从而减少复制粘贴漂移。若在 Windows/macOS 上还没有搭好「系统代理 + TUN」首启流程,可分头阅读 Verge Rev 在 Windows 11与站内对应 macOS 专文——与「多配置文件」是正交步骤。
7. 核对清单与设计提示
理清Clash 多订阅合并与覆写、profile切换之后,你应对「这份 YAML 里究竟谁说了算」会比单纯堆砌链接更有把握:相比零散复制机场文本,把时间花在可验证的最终运行时树上,长期来看维护成本更低、排错也更可预期。若在命令行或服务端场景中还需要把链路写进 systemd 与二进制路径,可把本文的思路与站内 Linux 一键部署系列交叉验证。
相关阅读 · 同主题集群
按主题相关度匹配的延伸阅读,覆盖同分类下的实战配置文章。
Clash Meta 外部控制器与 Secret:局域网启用 Web 面板安全步骤(2026)
内核已开却不知如何安全开控制台?拆解 mihomo 下 external-controller 与 Secret、REST API 鉴权(Bearer)及 bind-address 本机/局域网收听范围;对照 Yacd-meta Base URL、mixed-port 与防火墙入站错位;与 allow-lan 出站共享…
阅读全文Clash Meta 里 DNS 选 fake-ip 还是 redir-host?分流失效对照与修复步骤
已会写规则却不清楚 mihomo 下两种 DNS 模式差异?网页能开但国内外分流乱、GEOIP 与 DOMAIN 对不上。本文对照 fake-ip 与 redir-host 的适用场景,用典型分流失效现象对齐 DNS 监听、安全 DNS、规则顺序与日志排查,并附 YAML 骨架与修复清单,可与订阅导入、浏览器 DoH、…
阅读全文Clash 策略组里负载均衡怎么配:load-balance 与散列选节点分步操作
已会用 url-test 与 fallback 仍想在大文件、多路连接下把出口分摊到一组节点、避免全挤同一台,或让同源连接按散列稳定落点?分步写清 proxy-groups 中 type: load-balance 与 round-robin、consistent-hashing 的 YAML、健康检查、与测速/主备策…
阅读全文