sub.manager/
├── bin/
│ └── makeurl.sh # 批量生成配置的Shell脚本
├── core/
│ ├── __init__.py
│ ├── clash_rule_builder.py # 主程序:配置生成器
│ ├── clash.py # Clash配置管理类
│ └── config.py # 配置常量(分组、规则、节点)
├── rule/clash/
│ ├── gfwlist.py # GFWList下载和转换
│ ├── clash2autoproxy.py # Clash规则转AutoProxy格式
│ ├── QR_*.list # 自定义规则文件
│ └── *.list # 第三方规则文件
├── core/
│ ├── __init__.py
│ ├── clash_rule_builder.py # 主程序:配置生成器
│ ├── clash.py # Clash配置管理类
│ ├── config.py # 配置常量(分组、规则、节点)
│ └── download.php # 下载服务PHP文件
├── config/
│ ├── in/ # 配置模板
│ │ ├── provider.yaml.in
│ │ └── config.sh.in
│ └── user/ # 用户配置(不提交git)
│ ├── provider.yaml
│ ├── extraprovider.yaml
│ └── config.sh
└── output/ # 生成的配置文件
├── files/
│ ├── config.yaml
│ ├── office.yaml
│ ├── home.yaml
│ ├── nas.yaml
│ └── node.yaml
└── download.php
主程序,负责生成Clash配置文件。
流程:
- 解析命令行参数
- 初始化clash_yaml对象
- 添加订阅源(proxy-providers)
- 构建节点池(根据参数过滤自建节点)
- 构建代理分组(proxy-groups)
- 添加路由规则(rules)
- 写入YAML文件
关键函数:
main()- 入口函数,执行完整流程
Clash配置管理类,封装YAML操作。
类:clash_yaml
方法分类:
文件操作:
read(filename)- 读取YAML文件write(filename)- 写入YAML文件read_text(yaml_text)- 解析YAML文本
配置修改:
config_override(A, B)- 用B覆盖Aconfig_append(A, B)- 将B追加到Aconfig_set(dict_in, yaml_text)- 修改配置
代理管理:
addproxies(newproxie)- 添加单个代理节点addproxies_providers(url, prefix)- 添加订阅源
分组管理:
buildgroups(name, type, filter)- 构建代理分组addproxies2group(proxiename, groupname)- 添加节点到分组dropproxies(tag)- 删除包含特定标签的节点
规则管理:
addrules(rulesfile, route, tag)- 从文件添加规则matchrules(route)- 添加MATCH规则(兜底)
预设配置:
set_quick()- 快速配置(调用set_basis和set_geo)set_basis()- 基础配置(端口、日志等)set_dns()- DNS配置set_tun()- TUN模式配置set_sniff()- 协议嗅探配置set_geo()- GEO数据库配置
配置常量定义。
常量:
SELF_HOSTED_NODES
{
"节点名": {
"server": "IP地址",
"port": 端口,
"type": "socks5",
"tags": ["标签1", "标签2"]
}
}GROUPS
{
"分组名": {
"type": "select|url-test",
"filter": "正则表达式",
"add_nodes": ["节点1", "节点2"], # 可选
"url": "测速URL" # 可选,url-test类型需要
}
}RULES
[
{
"file": "规则文件名.list",
"route": "目标分组",
"tag": "规则类型", # 可选,如IP-CIDR
"qtags": ["条件标签"] # 可选,如sci
}
]其他常量:
HEALTH_CHECK_URL- 健康检查URLHEALTH_CHECK_INTERVAL- 检查间隔(秒)RULE_DIR- 规则文件目录
订阅源URL
↓
addproxies_providers() → proxy-providers配置
↓
自动拉取节点 → proxies列表
↓
buildgroups() + filter → proxy-groups配置
↓
addrules() → rules配置
↓
write() → 最终YAML文件
nodes_pool = {}
if args.my:
exclude_tags = []
if args.nas:
exclude_tags.append("nas")
for node_name, node_config in SELF_HOSTED_NODES.items():
node_tags = node_config.get("tags", [])
should_exclude = any(tag in exclude_tags for tag in node_tags)
if not should_exclude:
nodes_pool[node_name] = node_configfor group_name, group_config in GROUPS.items():
# 构建分组
sub.buildgroups(
name=group_name,
type=group_config["type"],
filter=group_config["filter"],
url=group_config.get("url")
)
# 添加特定节点
for node_name in group_config.get("add_nodes", []):
if node_name in nodes_pool or node_name == "DIRECT":
sub.addproxies2group(node_name, group_name)sub.content["rules"] = []
sub.matchrules("QG_漏网之鱼") # 先添加MATCH规则
for rule_config in RULES:
rule_file = f"{RULE_DIR}/{rule_config['file']}"
route = rule_config['route']
# 处理条件标签
if "sci" in rule_config.get("qtags", []) and not args.sci:
route = "DIRECT"
sub.addrules(
rulesfile=rule_file,
route=route,
tag=rule_config.get('tag')
)QG_*- 代理分组名(Groups)QP_*- 自定义节点名(Proxies)QR_*- 规则文件名(Rules)qtags- 规则条件标签(用于条件控制)
订阅源名称:
url: https://订阅链接DOMAIN-SUFFIX,example.com
DOMAIN,exact.example.com
DOMAIN-KEYWORD,keyword
IP-CIDR,1.2.3.0/24
IP-CIDR6,2001:db8::/32
项目中的规则文件按优先级和用途分为三类:
这些是项目创建的核心规则,针对特定场景优化:
- QR_谷歌服务.list - 谷歌服务(Gemini等需要美国IP的服务)
- QR_学术网站.list - 学术网站(Nature/PubMed/IEEE等,需学校IP或代理访问)
- 使用
qtags: ["sci"]条件控制,未启用-sci参数时路由到 DIRECT
- 使用
- QR_AI官方站.list - AI官方站(ChatGPT/Grok/Claude等AI Agent网站)
- QR_地域限制.list - 地域限制服务(要求美国/欧洲等特定地区IP,港澳台、新加坡等亚洲节点都不行)
- 包含:Docker Hub、Netflix、Disney+、Spotify等流媒体服务
- 包含:GitHub、GitLab、Discord、Reddit、Steam等对IP切换敏感的服务(避免频繁切换IP导致账户被封禁)
- QR_微软服务.list - 微软服务(有时需国内,有时需国外,单独处理)
- QR_通用代理.list - 通用代理(任意非大陆IP可访问,对IP切换容忍度高)
- 包含:Telegram、开发平台(Vercel/Netlify等)、软件源(PyPI/npm等)、技术社区(Stack Overflow等)
- QR_ipv6.list - IPv6专用(只能通过IPv6节点访问的网站)
- QR_DIRECT.list - 强制直连(禁止使用代理或检测代理的网站)
从其他配置复制的通用规则:
- sanmao.gfw.list - GFW列表
- sanmao.ip.list - IP规则
- gfwlist_proxy.list - GFWList代理规则
兜底规则,确保国内流量直连:
- direct.ip.list - 直连IP列表
- LidaoNote_OpenCode_china_ip.txt - 中国IP段(使用
tag: "IP-CIDR") - sanmao.direct.list - 直连域名列表
| 场景 | 命令 | 特点 |
|---|---|---|
| config.yaml | 无参数 | 公共配置,纯订阅源节点 |
| office.yaml | -my -ep extraprovider.yaml |
默认配置,自建节点 + 额外订阅源 |
| home.yaml | -my -sci |
远程配置,自建节点 + 学术网站代理 |
| nas.yaml | -my -sci -nas |
软路由/NAS托管,排除NAS标签节点 |
| node.yaml | -my -node |
仅自建节点,无路由规则 |