同步范围:共享规则,保留设备设置
“共用一份配置”更适合理解为共用一份配置来源,而不是让三台设备加载完全相同的最终 YAML。节点、策略组名称和分流规则可以尽量一致;本地监听端口、TUN 接管方式、控制接口与客户端偏好则应分别管理。这样更新节点时,不会顺带覆盖另一台设备的网络设置。
还要先区分内核与图形客户端。mihomo 负责解析它支持的配置、匹配规则和建立代理连接;客户端负责订阅更新、配置选择、覆写以及系统集成。不同客户端对这些功能的界面和保存方式并不相同。iPhone 上的客户端也不一定使用 mihomo,能导入节点订阅,不代表能完整执行 Clash YAML 中的规则、DNS 和策略组。
- 适合共享:节点来源、稳定的策略组名称、域名规则,以及各端都支持的规则集。
- 适合本地保留:
mixed-port、external-controller、控制接口密钥、TUN 与网卡相关设置。 - 需要核对:协议支持、
proxy-providers、rule-providers、DNS 字段及客户端自有扩展。
三种同步方式对比
订阅链接适合持续接收上游节点更新;iCloud 文件夹适合少量设备间传递手动维护的文件;私有 Git 仓库适合需要审阅规则改动与回退的人。三者都只解决“配置如何到达设备”,不会自动同步当前连接、节点选择或系统代理开关。
| 方式 | 适合内容 | 更新动作 | 主要限制 |
|---|---|---|---|
| 订阅链接 | 节点、上游完整配置 | 各端分别刷新订阅 | 响应格式及字段支持可能不同 |
| iCloud 文件夹 | 手动维护的 YAML | 文件同步后重新导入或重载 | 客户端未必持续读取原文件 |
| 私有 Git 仓库 | 规则、模板、本地覆写样例 | 拉取、检查、应用 | 需要额外管理凭据与部署流程 |
如果主要需求是“Mac 与手机使用同一批节点”,优先尝试订阅。如果主要需求是“修改一条规则后各端一致”,先建立共同规则源,再决定用文件同步还是 Git 分发。不要为了共享节点,把每台设备的整个客户端数据目录一起复制。
订阅链接:各端导入,同源更新
导入与刷新顺序
- 在提供方确认订阅的输出类型:完整 Clash 配置、节点列表,还是其他客户端专用格式。
- 在 Mac 客户端的配置管理页面导入链接,手动更新一次,确认策略组和规则存在,再启用该配置。
- 在 Windows 客户端导入相同来源,检查实际响应是否一致。某些服务会按请求参数或客户端标识返回不同格式。
- 在 iPhone 客户端选择受支持的订阅类型,检查导入结果。若只导入了节点,规则与 DNS 需要另行配置。
三个客户端的订阅刷新是独立动作。Mac 更新成功,不会替 iPhone 完成刷新;移动端还可能受到后台执行限制。可以先把自动更新间隔设为 24 小时,遇到节点变更时再手动刷新。这是起始设置建议,具体可选间隔和后台行为以客户端为准。
避免修改被订阅覆盖
直接编辑订阅下载后的文件,下一次刷新可能丢失修改。支持覆写的客户端应把本地端口、DNS 调整和自定义规则放在独立覆写中;不支持覆写时,保留一份独立本地配置,并明确后续如何更新节点。也可以在各端支持的前提下,用节点提供器将节点更新与主配置分开。
订阅地址通常带访问令牌,应按密码管理。不要把完整链接放进公开截图、日志或公共仓库,也不要为了格式转换随意交给陌生在线服务。如果链接已经泄露,应在提供方更换令牌,然后逐台更新来源。
iCloud 文件夹:同步文件与重新导入
在 Mac 的“访达”→“iCloud 云盘”中新建专用文件夹,例如 ClashConfig,只放准备分发的配置文件。iPhone 可通过“文件”→“浏览”→“iCloud 云盘”查看;Windows 需要安装并登录 iCloud,启用 iCloud 云盘后再访问相应文件夹。
- 指定一台设备作为主要编辑端,先保存
shared.yaml,等待文件完成上传。 - 在目标设备确认文件已经下载到本地,而不是只有云端文件占位。
- 通过客户端的文件导入入口选择该文件,检查解析结果,再切换为当前配置。
- 修改后先在一台设备验证,再在其他设备重新导入或使用客户端支持的重载功能。
关键在于区分“读取原文件”和“导入副本”。有些客户端会把 YAML 复制到自己的数据目录;这时 iCloud 里的文件已经变化,客户端仍然使用旧副本。可以临时调整一个容易观察的策略组名称,重新导入后查看界面是否改变,以确认实际加载来源。
不要让两台设备同时编辑同一份 YAML。文件同步可能产生冲突副本,手动合并时又容易破坏缩进或规则顺序。建议一次只由一端编辑,保留上一份可用文件,确认接收端生效后再继续下一轮修改。
私有 Git:规则审阅与配置回退
Git 更适合保存自行维护的规则和配置结构,而不是存储账号凭据。可以按下面的目录分层;文件名属于项目约定,不会自动被 Clash 或 mihomo 识别,需要在客户端中显式导入,或由自己的生成流程组合。
clash-config/
├── shared.yaml
├── rules/
│ └── direct.yaml
├── local/
│ ├── mac.yaml
│ └── windows.yaml
└── .gitignore
其中 shared.yaml 保存共同策略组与规则,local/ 保存设备差异。含真实订阅地址和密钥的文件应排除提交;已经进入历史的秘密,后来加入忽略规则也不会自动清除,仍需更换凭据。私有仓库只是访问控制的一层,不应成为长期存放所有秘密的理由。
提交、拉取与验证
git diff -- shared.yaml rules/
git add shared.yaml rules/
git commit -m "调整直连规则顺序"
# 其他桌面设备更新工作副本
git pull --ff-only
git pull --ff-only 遇到分叉会停止,便于先处理本地修改,而不是直接生成一次不易察觉的合并。拉取成功后仍需让客户端重新加载配置。iPhone 若没有合适的 Git 工作流程,可以通过可信的文件导入方式接收发布文件,不必强行在手机上复制整套桌面开发流程。
基于 mihomo 的桌面环境,可在应用前测试最终生成文件。下面的 effective.yaml 指已经合并好共享内容与本地差异的文件;命令要求本机存在可调用的 mihomo 可执行文件。
mihomo -t -f effective.yaml
配置测试通过,表示内核接受该配置;它不代表远端节点可达,也不代表系统代理已经开启。发生问题时,可从 Git 取回上一份文件,再导入或重载。回退文件本身不会恢复系统网络设置,需要分别检查。
本地覆写:端口、TUN 与规则顺序
Mac 与 Windows 可以共享规则逻辑,但应保留各自的入口配置。以下是基于 mihomo 的桌面本地层字段片段,并非完整代理配置;示例使用混合端口 7890,控制接口仅监听回环地址 127.0.0.1:9090。
mixed-port: 7890
allow-lan: false
mode: rule
external-controller: 127.0.0.1:9090
tun:
enable: false
这些字段应通过客户端支持的本地设置或覆写机制生效,不能假定所有客户端都按相同方式合并 YAML。尤其是列表字段:有的机制替换整段列表,有的支持前置或追加。应用后要查看最终配置,确认原有代理组和规则没有意外消失。
- 端口:先检查
7890是否被其他进程占用。修改端口后,终端代理环境变量和手动填写的应用代理也要同步修改。 - TUN:桌面端涉及权限、路由和其他 VPN 的配合;iPhone 通常通过系统网络扩展建立接管,不能直接照搬桌面的
tun.stack或网卡名称。 - DNS:先保留各端可用的解析设置。需要共享 DNS 策略时,逐项核对支持情况,不要只因 YAML 能解析就认定行为一致。
- 控制接口:通常没有跨设备开放的必要。若确需局域网控制,应另行设置认证与访问边界,不要把监听地址简单改成所有网卡。
自定义规则放在兜底规则之前
Clash 风格规则按顺序匹配。下面是规则片段,用于说明域名直连规则必须位于最终兜底之前;PROXY 需要是完整配置里已经存在的代理或策略组名称。
rules:
- DOMAIN-SUFFIX,example.org,DIRECT
- MATCH,PROXY
如果把新规则追加到现有 MATCH 后面,它通常没有机会被匹配。共享规则还应避免依赖某台设备独有的策略组名。建议各端统一保留同名组,再允许每台设备在组内选择不同节点;组名统一不要求节点选择也完全一致。
涉及公司内网域名、局域网地址或特定 Wi-Fi 的例外规则,更适合留在本地层。它们可能只在 Mac 所连接的网络有效,复制到手机蜂窝网络后未必有意义,甚至可能改变预期出口。
同步后的验收与常见问题
每次更新按“来源 → 最终配置 → 规则匹配 → 实际出口”的顺序检查,比反复重装客户端更有效。先在一台设备验证,再推广到其他设备,能够缩小故障范围。
- 确认来源:查看订阅更新时间、文件修改时间或 Git 提交记录,确保三端接收到的是同一轮改动。
- 确认配置:检查当前启用配置的名称、策略组数量,以及新增规则是否出现在最终生效配置中。
- 确认接管:桌面端检查系统代理或 TUN 状态;iPhone 检查客户端连接状态,并留意其他 VPN 是否冲突。
- 确认分流:分别访问一项预期直连和一项预期代理的服务,在连接记录中核对命中的规则、策略组与实际节点。
同一订阅,节点列表不同
先检查输出格式、客户端协议支持和本地过滤条件,再比较刷新时间。订阅服务也可能根据客户端标识生成不同内容。不要仅凭列表长度判断同步失败,更不要把含令牌的完整响应公开用于比较。
规则相同,出口仍然不同
这可能是正常结果。手动选择组的当前节点通常保存在各端本地;自动测速组则会根据各设备所在网络分别测量。Mac 连家庭 Wi-Fi、iPhone 使用蜂窝网络,即使策略组定义相同,也可能选择不同节点。需要复现问题时,应临时在各端选择同一节点,再观察差异。
文件已更新,客户端仍使用旧内容
优先检查是否导入了副本、是否启用了另一份配置,以及订阅更新后是否成功重载。先保留当前可用配置,再重新导入测试。长期使用时,推荐采用“同一订阅或规则源 + 各端本地覆写”的结构;需要追踪规则历史再加入 Git,少量手动文件交换则使用 iCloud。同步范围越明确,跨平台问题越容易定位。