# vpn-rules 「哪些连接必须**直连、绝不进代理**」的规则真源(single source of truth),供电脑端 Clash Verge 和华硕路由器上的 mihomo(Magic Catling2)等消费端同步引用,一处维护、处处生效。 ## 目录结构 ``` vpn-rules/ ├── direct.yaml # 规则真源(mihomo rule-provider 格式) ├── router/ │ ├── direct-rules.yaml # 路由器手动粘贴版(`- ` 前缀 + DIRECT 策略) │ └── direct-plain.txt # 无 `- ` 前缀纯文本版(规则逐行、无策略) └── scripts/ ├── gen_clash_verge_script.py # 真源 → Clash Verge Script.js 生成器 ├── gen_router_paste.py # 真源 → 路由器手动粘贴版生成器 └── gen_plain_list.py # 真源 → 纯文本版生成器 ``` ## 为什么需要它 - 香港代理节点有流量配额(如 BygCloud 100GiB 用满),国内站点/内网流量被隧道进代理会白白烧配额。 - 必须直连的对象:FRP 控制面(mTLS)、B 站全系、DeepSeek/MiniMax 等国内 LLM API、 内网/私有 IP 段、国区 iCloud、UGREEN 绿联 NAS 云。 - **踩坑**:Clash Verge 全局 `Merge.yaml` 的 `prepend-rules` 会被内核忽略(不生效), 全局直连规则的唯一正确机制是 `profiles/Script.js`(`main(config)` 把规则 prepend 进 `config.rules`)。 ## 消费端接入 ### Clash Verge(Windows / macOS) ```bash # 按当前平台生成并写入 Clash Verge 数据目录的全局 Script.js python3 scripts/gen_clash_verge_script.py # 然后在 Clash Verge 界面点「重启内核」生效 ``` 对当前及以后新增/切换的所有订阅生效;订阅更新不会覆盖它。 Windows 默认写入 `%APPDATA%\io.github.clash-verge-rev.clash-verge-rev\profiles\Script.js`; macOS 默认写入 `~/Library/Application Support/io.github.clash-verge-rev.clash-verge-rev/profiles/Script.js`。 ### 路由器 mihomo(Magic Catling2 / OpenWrt) rule-provider 引用(policy 在外层指定),定期自动拉取真源: ```yaml rule-providers: vpn-direct: type: http behavior: classical url: https://gitea.puyuanfh.cn/ageorge156/vpn-rules/raw/branch/main/direct.yaml interval: 86400 path: ./ruleset/vpn-direct.yaml rules: - RULE-SET,vpn-direct,DIRECT ``` > 路由器内网自建 Gitea(192.168.50.2:3000)也可直连:`http://192.168.50.2:3000/ageorge156/vpn-rules/raw/branch/main/direct.yaml`。 **拉不到 URL 时(手动粘贴版)**:打开 `router/direct-rules.yaml`,把里面的规则行粘贴到路由器现有规则列表最前面即可,无需联网(生成命令 `python3 scripts/gen_router_paste.py`)。若工具不支持 `- ` 前缀,用 `router/direct-plain.txt`(生成命令 `python3 scripts/gen_plain_list.py`)。 ## 维护流程 1. 改 `direct.yaml`(rule-provider 条目,**不含**策略字段)。 2. `git commit` + push 到本仓库 `main`。 3. Clash Verge 端重跑 `python3 scripts/gen_clash_verge_script.py` + 重启内核; 路由器端等 rule-provider 到期自动拉新或手动 reload。