一句总结: 多上游源每日同步、自动清洗校验、清单追踪变更、联网审计质量 — 让你只需关心策略,不用操心底层规则。
- 🎯 目标用户:Surge 用户(iPhone / MacBook),需要精细化代理分流与规则管理
- 💡 核心价值:多上游源自动聚合 → 清洗校验 → 清单追踪 → 联网审计,全链路自动化
- 📜 许可证:MIT
- 🔄 更新频率:本地 agent 每日自动同步(约北京时间 04:00)
- 🧪 质量保障:每次更新须通过 5 项联网审查 + 15+ 项不变量校验
- 📦 零依赖:所有脚本仅使用 Python 3.10+ 标准库,无需 pip install
# 快速使用:在 Surge 配置中加载规则
RULE-SET,https://raw.githubusercontent.com/linnux-x/surge/main/Rule/AI.list,PROXY
RULE-SET,https://raw.githubusercontent.com/linnux-x/surge/main/Rule/China.list,DIRECT手动维护 Surge 规则面临多种痛点:
| 痛点 | 解决方式 |
|---|---|
| 🔄 上游规则频繁更新 | 本地 agent 每日自动同步 6+ 上游源(跑同一套流水线脚本) |
| 🧹 规则污染 / 残留 | 每次重新生成,不保留旧文件作为 baseline |
| 📊 变更不可追溯 | 清单索引系统:每条规则有 12 字符稳定哈希 + 来源标注 |
| 自动检测并排除 cookielaw / sentry / newrelic 等第三方平台 | |
| 🧪 质量无保障 | 联网审查流水线:5 项检查(可达性 / 比例 / 共享设施 / Surge 文档 / exclude 覆盖) |
| ✏️ 手动规则管理 | Rule/Manual/ 支持追加 + 排除,优先级最高 |
| 特性 | 说明 |
|---|---|
| 🤖 全自动同步 | 检查 38 个上游源的 Last-Modified / ETag,只同步有变更的规则集,无变化跳过提交 |
| 🧪 自动校验 | 15+ 不变量检查:规则类型合法性、无策略名渗入、无重复、domain-only 约束、no-resolve 策略等 |
| 📋 清单索引 | 每条规则拥有 12 字符稳定内容哈希 ID + 上游来源标注,支持跨版本追踪 |
| 📊 增量差异报告 | 每次变更生成 manifest diff(markdown + JSON),明确增减来源 |
| 🔍 联网审查 | 5 项审计检查,ERROR 阻断提交、WARN 需确认、INFO 仅记录 |
| 🧹 自动清洗 | 排除共享 CDN / 遥测 / 分析平台,检测不透明子域名 |
| 路径 | 说明 |
|---|---|
Conf/Linnux.conf |
主 Surge 配置示例,包含策略组和 RULE-SET 加载顺序 |
Rule/*.list |
Surge 外部规则集文件(自动生成,勿手动修改) |
clash/*.yaml |
Clash / mihomo rule-provider 文件(由 Rule/*.list 转换生成) |
Rule/Manual/*.txt / *.exclude.txt |
手动追加(最高优先级)与排除规则 |
Rule/.manifests/*.manifest |
规则清单索引(每行:稳定哈希ID + 来源标注) |
Module/*.sgmodule |
Surge 模块文件 |
scripts/sources.py |
上游源配置(单一定义,所有脚本引用) |
scripts/check_upstream_updates.py |
并行 HEAD 检查上游变更(8 线程) |
scripts/generate_rules.py |
规则生成引擎(下载、合并、清洗、校验、CIDR 裁剪) |
scripts/generate_clash_rules.py |
将 Surge 规则转换为 Clash / mihomo classical rule-provider |
scripts/manifest.py |
规则清单生成 + 差异对比(manifest → diff_report) |
scripts/validate_surge_repo.py |
不变量检查(15+ 项) |
scripts/audit_rules.py |
联网审查(5 项审计) |
scripts/test_routing_order.py |
路由顺序模拟测试(55 用例) |
tests/expected-routing.csv |
路由测试预期(域名 → 期望规则集) |
.github/workflows/auto-rules.yml |
规则同步 + DNS Mapping 模块同步流水线 |
CONTRIBUTING.md |
贡献指南 |
| 规则文件 | 上游来源 | 说明 |
|---|---|---|
| 📱 AI.list | 4 源 | AI 服务与模型 API |
| 🍎 Apple.list | blackmatrix7 | Apple 全系服务 |
| 🍎 Apple_CN.list | 2 源 | Apple 中国区 CDN 直连 |
| 📦 CDN.list | SukkaW | CDN、静态资源、下载资源 |
| 🏠 China.list | 3 源 | 中国大陆直连域名(domain-only) |
| 🌐 China_IP.list | 3 源 | 中国大陆 IP 回退(不加 no-resolve) |
| 📺 ChinaMedia.list | blackmatrix7 | 中国媒体服务 |
| 🏰 Disney.list | blackmatrix7 | Disney+ |
| ⬇️ Download.list | 2 源 | 下载、软件更新、游戏 CDN |
| 🎮 Game.list | blackmatrix7 | 游戏平台与服务 |
| 🌍 Global.list | blackmatrix7 | 通用海外/代理域名 |
| 🎬 GlobalMedia.list | blackmatrix7 | 国际流媒体服务 |
| 🔍 Google.list | blackmatrix7 | Google 服务(不含 YouTube) |
| 🪟 Microsoft.list | blackmatrix7 | Microsoft 服务(不含 GitHub) |
| 🪟 Microsoft_CDN.list | SukkaW | MS CDN 直连 |
| 🎥 Netflix.list | blackmatrix7 | Netflix |
| 💰 PayPal.list | blackmatrix7 | PayPal |
| 💬 SocialMedia.list | 4 源 | 社交媒体聚合(海外平台) |
| ⚡ Speedtest.list | SukkaW · 手动 | 测速 · fast.com 仅此文件 |
| 🎧 Spotify.list | blackmatrix7 | Spotify 音乐服务 |
| 3 源 | 域名、CIDR、ASN | |
| 🎵 TikTok.list | blackmatrix7 | TikTok |
| 💚 WeChat.list | blackmatrix7 | 微信相关服务 |
| blackmatrix7 | YouTube 与 YouTube Music |
Conf/Linnux.conf 中的规则遵循 Surge first-match 逻辑,重点服务规则放在宽泛规则之前:
- 💚 WeChat → 微信直连优先
- ⚡ Speedtest → 测速不走代理
- 📱 AI → AI 服务专用路由
- 🍎 Apple → Apple 原生服务
- 🪟 Microsoft → Microsoft / Office 服务
✈️ Telegram → 协议规避混淆- ⬇️ Download → 下载 CDN 直连
- 🎮 Game → 游戏平台直连/代理
▶️ YouTube → 流媒体路由- 🎵 TikTok → TikTok 路由
- 💬 SocialMedia → 社交媒体
- 💰 PayPal → 支付服务
- 🔍 Google → Google 服务
- 🎬 GlobalMedia + ChinaMedia → 国际与中国媒体服务
- 🎧 Spotify → 音乐流媒体
- 📦 CDN → 共享 CDN 后台回退
- 🌍 Global → 通用代理回退
- 🏠 China → 中国大陆直连域名
- 🏢 LAN → 局域网直连
- 🌐 China IP → 中国大陆 IP 回退
- 🔚 FINAL → 最终代理
| 方式 | 说明 |
|---|---|
| 🤖 每日同步 | 本地 agent 每日(约北京时间 04:00)运行同一套流水线脚本并推送 |
| 🖐 手动触发 | GitHub Actions 页面点击 Run workflow(全量重新生成 + 发布门禁) |
| ⌨️ CLI 触发 | gh workflow run auto-rules.yml |
触发 workflow
↓
1. 增量上游检查 → 拉取变更源 → 合并手动规则 → 应用排除 → 清洗校验(含 CIDR 裁剪)
↓
2. 生成紧凑清单 + 对比 git HEAD 生成增量差异报告 ← scripts/manifest.py
↓
3. 验证仓库不变量(15+ 检查项) ← scripts/validate_surge_repo.py
↓
4. 联网审查(5 项审计检查) ← scripts/audit_rules.py
├─ 上游可达性
├─ 规则数比例对比
├─ 共享第三方基础设施扫描
├─ Surge 文档更新检查
└─ exclude 排除覆盖率
↓
5. 同步 DNS Mapping 模块
↓
6. 提交到 GitHub(规则 + 清单 + 差异报告 + 模块)
流程中的 增量上游检查、Manifest & Diff、Online Audit 和 Sync DNS Mapping 步骤由本仓库新增,确保每次变更有据可查、可审计。
每条规则在 Rule/.manifests/*.manifest 中拥有一个 12 字符的稳定内容哈希 ID,并标注其上游来源。
数据格式(每行一个规则):
<12字符哈希ID> <来源名称>
| 好处 | 说明 |
|---|---|
| 🔄 跨版本追踪 | 每条规则的增减变化可精确追踪 |
| 🔗 归属转移 | 识别规则在来源间的迁移(如从 China 移入 Global) |
| 📊 增量报告 | 自动生成 diff_report.md + diff_report.json |
| 📈 量化审计 | 上游规则变动数量、方向有据可查 |
提交前运行:
python3 scripts/validate_surge_repo.py
python3 scripts/test_routing_order.py # 路由顺序模拟测试| 检查项 | 级别 |
|---|---|
| Surge 规则类型合法性 | 🔴 |
| 无策略名渗入规则文件 | 🔴 |
| 无重复规则 | 🟡 |
# TOTAL 头与实际计数一致 |
🔴 |
China.list domain-only |
🔴 |
China_IP.list 无 no-resolve |
🔴 |
其他 IP 规则带 no-resolve |
🟡 |
Microsoft.list 无 GitHub 家族 |
🔴 |
fast.com 仅出现在 Speedtest.list |
🔴 |
README、workflow 与 .list 文件一致性 |
🟡 |
| 无旧 baseline 区块和 SukkaW marker 域名 | 🟡 |
| 共享第三方基础设施检测 | 🟡 |
| PayPal CN 域名检测(.cn 不在 PayPal.list) | 🟡 |
不透明子域名检测(纯数字/十六进制前缀如 o207216.ingest.sentry.io) |
🟡 |
每次 workflow 生成规则后、提交 GitHub 前执行 scripts/audit_rules.py:
| 检查项 | 说明 |
|---|---|
| 🔗 上游可达性 | 所有配置的 URL 可正常访问 |
| 📊 规则数对比 | 生成 vs 上游比例异常时告警(多源合并文件豁免) |
| 🏗️ 共享基础设施 | 已知共享平台出现在服务规则中时告警 |
| 📖 Surge 文档 | 检查是否有新的 Surge 规则类型发布 |
| 🧹 exclude 覆盖率 | 验证排除条目是否生效(若排除规则仍出现在生成文件中则 WARN) |
🔴 ERROR → workflow 失败,必须修复
🟡 WARN → workflow 继续,但需人工确认
🔵 INFO → 仅供参考,无需处理
| 策略 | 说明 |
|---|---|
| 🐙 GitHub | 不归入 Microsoft。普通服务走 Global,Copilot 走 AI,下载资源走 CDN |
| ⚡ fast.com | 仅 Speedtest.list,其他地方不重复 |
| 🏠 China.list | 仅中国大陆直连域名,不放 IP |
| 🌐 China_IP.list | 不加 no-resolve,用于 IP 分类回落 |
| 🔒 IP 规则 | 其他 IP 默认加 no-resolve |
| 🔄 无 baseline | 不保留旧 Rule/*.list;长期规则进 Rule/Manual/ |
| 🏗️ 共享基础设施 | CDN / 遥测 / 分析等共享平台不作为服务规则合并 |
| 🔍 子域名策略 | 服务专属子域名可保留,不透明子域名应排除 |
最低版本要求:Surge iOS 5.8.1+ / Surge Mac 5.x 对应版本。配置使用了
extended-matching(5.8.0 引入);5.8.1 起 RULE-SET 在资源更新时自动预处理并索引,大规则集(如 China.list 11 万条)匹配为毫秒级,与 DOMAIN-SET 无性能差异。首次导入提示:托管配置与全部规则集均从
raw.githubusercontent.com拉取,请在代理可用的网络环境下完成首次导入;导入后 Surge 会缓存规则集,且托管配置为非 strict 模式,更新失败时继续使用旧配置。
- 导入托管配置 → 使用
Conf/Linnux.conf,首行已包含 Surge#!MANAGED-CONFIG,默认每日检查更新 - 添加自己的订阅 → 将
[Proxy Group]中✈️ 我的节点的policy-path=你的订阅地址改为自己的订阅地址 - 保持规则更新 → 本仓库规则每日由维护者的 agent 流水线自动更新,托管配置引用的
Rule/*.list无需你做任何操作
托管配置地址:
https://raw.githubusercontent.com/linnux-x/surge/main/Conf/Linnux.conf
Conf/Linnux.conf 首行固定为:
#!MANAGED-CONFIG https://raw.githubusercontent.com/linnux-x/surge/main/Conf/Linnux.conf interval=86400
strict 保持 Surge 默认值 false:远端更新失败时,客户端可以继续使用旧配置。
# Fork 后手动触发同步
gh workflow run auto-rules.yml --repo linnux-x/surge在 Rule/Manual/ 目录下放置:
<名称>.txt→ 手动追加规则,放在对应规则文件顶部,优先级最高<名称>.exclude.txt→ 排除规则,按生成后规则整行精确匹配(大小写敏感,非正则;需与上游格式完全一致)
⚠️ 注意:长期需要保留/排除的规则必须放入Rule/Manual/对应文件。不要依赖旧生成文件作为隐式 baseline。
适合: Surge 用户需要一个自动更新、有校验、有审计的规则仓库,不想手动维护上游变更。
不适合: 只需要几条静态规则的用户;使用非 Surge 客户端的用户(规则格式为 Surge 专用)。
Fork 后适配:
- 修改
.github/workflows/auto-rules.yml中的REPO_URL和AUTHOR_NAME环境变量为你的仓库 - 在仓库 Settings → Actions → General → Workflow permissions 中选择「Read and write permissions」
- 按需在
Rule/Manual/中添加自己的追加和排除规则 - 本仓库的 workflow 仅手动触发(每日同步由维护者本地 agent 负责);如需在 Fork 中定时自动更新,需两处改动:① 在
auto-rules.yml的on:中加回schedule触发器(例如cron: "23 21 * * *");② 把两个 job 顶部的if: github.repository == 'linnux-x/surge'改成你的仓库或删除,否则 Actions 会直接跳过
保持同步上游: git remote add upstream https://github.com/linnux-x/surge.git 后定期 git fetch upstream && git merge upstream/main
修改规则或同步逻辑前,请参考 CONTRIBUTING.md 了解项目架构和开发约定。
📖 完整的用户偏好和分类策略属于私有配置,不在本仓库中。
上游规则与参考来源:
| 来源 | 链接 |
|---|---|
| blackmatrix7 | ios_rule_script |
| Loyalsoldier | surge-rules |
| SukkaW | Surge |
| ConnersHua | RuleGo |
工作流借鉴 Rabbit-Spec/Surge 的思路,并加入了本仓库自己的分类策略、校验规则和联网审查流水线。
Made with ❤️ for Surge users | MIT License