From f58e8c3603adce34bd73d600da490b5cecd59fdf Mon Sep 17 00:00:00 2001 From: ageorge156 Date: Wed, 19 Aug 2026 16:53:11 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=B7=AF=E7=94=B1=E5=99=A8=E6=89=8B?= =?UTF-8?q?=E5=8A=A8=E7=B2=98=E8=B4=B4=E7=89=88=E7=9B=B4=E8=BF=9E=E8=A7=84?= =?UTF-8?q?=E5=88=99=E7=94=9F=E6=88=90=E5=99=A8=EF=BC=88router/direct-rule?= =?UTF-8?q?s.yaml=EF=BC=89=20(#1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ router/direct-rules.yaml | 43 +++++++++++++++++++++++++++++++++++++ scripts/gen_router_paste.py | 40 ++++++++++++++++++++++++++++++++++ 3 files changed, 85 insertions(+) create mode 100644 router/direct-rules.yaml create mode 100644 scripts/gen_router_paste.py diff --git a/README.md b/README.md index cfb35c7..5ddaa93 100644 --- a/README.md +++ b/README.md @@ -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`。 +**拉不到 URL 时(手动粘贴版)**:打开 `router/direct-rules.yaml`,把里面的规则行粘贴到路由器现有规则列表最前面即可,无需联网(生成命令 `python3 scripts/gen_router_paste.py`)。 + ## 维护流程 1. 改 `direct.yaml`(rule-provider 条目,**不含**策略字段)。 diff --git a/router/direct-rules.yaml b/router/direct-rules.yaml new file mode 100644 index 0000000..156c736 --- /dev/null +++ b/router/direct-rules.yaml @@ -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 diff --git a/scripts/gen_router_paste.py b/scripts/gen_router_paste.py new file mode 100644 index 0000000..ba30785 --- /dev/null +++ b/scripts/gen_router_paste.py @@ -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()