feat: 路由器手动粘贴版直连规则生成器(router/direct-rules.yaml)
CI / check (pull_request) Successful in 3s

This commit is contained in:
George Berkshire
2026-08-19 16:52:46 +08:00
parent 25fcdf0701
commit 1ed82f6fd5
3 changed files with 85 additions and 0 deletions
+2
View File
@@ -51,6 +51,8 @@ rules:
> 路由器内网自建 Gitea(192.168.50.2:3000)也可直连:`http://192.168.50.2:3000/ageorge156/vpn-rules/raw/branch/main/direct.yaml`。 > 路由器内网自建 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`)。
## 维护流程 ## 维护流程
1. 改 `direct.yaml`(rule-provider 条目,**不含**策略字段)。 1. 改 `direct.yaml`(rule-provider 条目,**不含**策略字段)。
+43
View File
@@ -0,0 +1,43 @@
# vpn-rules 手动粘贴版(无需联网拉取)— 由 direct.yaml 生成,勿手改。
#
# 用法(Magic Catling2 等拉不到 rule-provider 时):
# 1. 打开路由器的规则设置;
# 2. 把下面 `rules:` 里的每一行 `- 规则` 粘贴到【现有规则列表的最前面】;
# 3. 只粘贴规则行,不要用整个文件替换你原来的 rules(否则订阅自带规则会丢)。
#
# 重新生成:python3 scripts/gen_router_paste.py(改真源 direct.yaml 后重跑)。
# 规则与 direct.yaml 逐条对应;对应拉取版 URL:
# https://gitea.puyuanfh.cn/ageorge156/vpn-rules/raw/branch/main/direct.yaml
# 内网源:http://192.168.50.2:3000/ageorge156/vpn-rules/raw/branch/main/direct.yaml
rules:
- DOMAIN,frp.puyuanfh.cn,DIRECT
- IP-CIDR,8.133.177.3/32,DIRECT,no-resolve
- DOMAIN-SUFFIX,bilibili.com,DIRECT
- DOMAIN-SUFFIX,bilibili.cn,DIRECT
- DOMAIN-SUFFIX,bilivideo.com,DIRECT
- DOMAIN-SUFFIX,bili2233.cn,DIRECT
- DOMAIN-SUFFIX,hdslb.com,DIRECT
- GEOIP,CN,DIRECT,no-resolve
- DOMAIN-SUFFIX,deepseek.com,DIRECT
- DOMAIN-SUFFIX,minimaxi.com,DIRECT
- DOMAIN-SUFFIX,minimax.chat,DIRECT
- DOMAIN-SUFFIX,hailuoai.com,DIRECT
- DOMAIN,minimax-public-cdn.oss-cn-wulanchabu.aliyuncs.com,DIRECT
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- IP-CIDR,100.64.0.0/10,DIRECT,no-resolve
- DOMAIN-SUFFIX,.local,DIRECT
- DOMAIN-SUFFIX,icloud.com.cn,DIRECT
- DOMAIN-SUFFIX,ug.link,DIRECT
- DOMAIN-SUFFIX,ugreen.com,DIRECT
- DOMAIN-SUFFIX,ugnas.cloud,DIRECT
- DOMAIN-SUFFIX,ugos.cn,DIRECT
- DOMAIN-KEYWORD,ugreen,DIRECT
- DOMAIN-KEYWORD,ugnas,DIRECT
- DOMAIN-KEYWORD,ugreengroup,DIRECT
- IP-CIDR,110.42.0.0/16,DIRECT,no-resolve
- IP-CIDR,43.248.128.0/17,DIRECT,no-resolve
- IP-CIDR,111.170.0.0/16,DIRECT,no-resolve
+40
View File
@@ -0,0 +1,40 @@
#!/usr/bin/env python3
"""从 direct.yaml(真源)生成路由器「手动粘贴版」规则文件 router/direct-rules.yaml。
适用于 Magic Catling2 等无法联网拉取 rule-provider 的场景:
把生成的规则行粘贴进现有 rules 列表最前面即可,无需 URL 拉取。
"""
from pathlib import Path
from gen_clash_verge_script import load_payload, to_rule
REPO_ROOT = Path(__file__).resolve().parent.parent
OUT = REPO_ROOT / "router" / "direct-rules.yaml"
TEMPLATE = """# vpn-rules 手动粘贴版(无需联网拉取)— 由 direct.yaml 生成,勿手改。
#
# 用法(Magic Catling2 等拉不到 rule-provider 时):
# 1. 打开路由器的规则设置;
# 2. 把下面 `rules:` 里的每一行 `- 规则` 粘贴到【现有规则列表的最前面】;
# 3. 只粘贴规则行,不要用整个文件替换你原来的 rules(否则订阅自带规则会丢)。
#
# 重新生成:python3 scripts/gen_router_paste.py(改真源 direct.yaml 后重跑)。
# 规则与 direct.yaml 逐条对应;对应拉取版 URL:
# https://gitea.puyuanfh.cn/ageorge156/vpn-rules/raw/branch/main/direct.yaml
# 内网源:http://192.168.50.2:3000/ageorge156/vpn-rules/raw/branch/main/direct.yaml
rules:
{rules}
"""
def main() -> None:
payload = load_payload(REPO_ROOT / "direct.yaml")
lines = "\n".join(f" - {to_rule(e)}" for e in payload)
OUT.parent.mkdir(parents=True, exist_ok=True)
OUT.write_text(TEMPLATE.format(rules=lines), encoding="utf-8")
print(f"✅ 已生成 {OUT}({len(payload)} 条规则,可直接粘贴)")
if __name__ == "__main__":
main()