跨端配置一致性:桌面与移动端 Profile 对比调优
2024年11月15日
约12分钟
Profile 管理
桌面端调好的配置,搬到手机端经常行为不一致:有的规则集不生效、有的组切不了、 有的 TUN 开关对不上。这篇从 Profile 结构入手,讲跨端差异的来源,以及用 override 和版本管理实现「一份配置,多端一致」。
Profile 的三层结构
proxies: # 节点定义
proxy-groups: # 策略组(选择/负载均衡/自动)
rules: # 分流规则(自上而下匹配)
三层可以独立更新:订阅只动 proxies,override 只动 groups 与 rules。 保持三者分离,是跨端一致性的前提。
跨端差异的主要来源
| 差异点 | 原因 | 对策 |
|---|---|---|
| 规则集路径 | 本地路径移动端不存在 | 全部改用 URL 规则集 |
| DNS 配置 | 移动网络下 DoH 可达性不同 | fallback 配多组 DoH |
| 进程规则 | PROCESS-NAME 仅桌面有效 | 用域名规则替代进程规则 |
| TUN 参数 | 移动端 TUN 栈实现不同 | 关键差异用 override 覆盖 |
用 override 实现端侧差异
# 主 Profile 保持通用;手机端加一个 override 覆盖 DNS 与 TUN
dns:
enhanced-mode: fake-ip
fallback:
- https://1.1.1.1/dns-query
- https://8.8.8.8/dns-query
tun:
enable: true
stack: gvisor
主 Profile 永远只含「两端都成立」的内容,端侧差异全部下沉到 override。 这样更新订阅不会冲掉本地调优。
用 Git 管理 Profile
# 把主 Profile 与各端 override 放进仓库
git init
git add clash-base.yaml override-ios.yaml override-win.yaml
git commit -m "feat: 拆分端侧差异"
# 每次改动前先 diff 再提交,避免悄悄改坏配置
git diff
Git 的价值在可追溯:规则改动引发问题,可以快速回滚到上一版本,而不是靠记忆重写。
校验工具
- 客户端自带的「配置检查」:语法级校验,能抓缩进与字段错误
- YAML 校验:mihomo -t -f 配置,内核级校验
- 线上校验服务:部分机场提供 lint,能查规则集 URL 是否可达
- diff 对比:跨端 diff 主 Profile 与 override,确认差异符合预期
结论
跨端一致性的核心是「分层」:订阅管节点、主 Profile 管通用、override 管端差、 Git 管历史。分层清晰后,多端维护成本从「维护 N 份配置」降为「维护 1 份 + N 个补丁」。