This commit is contained in:
@@ -62,19 +62,37 @@ def render_script(payload: list[str]) -> str:
|
||||
rules = [f" {to_rule(e)!r}," for e in payload]
|
||||
lines = "\n".join(rules)
|
||||
return f"""// 由 vpn-rules/direct.yaml 生成 — 勿手改,改真源后重跑 gen_clash_verge_script.py。
|
||||
// 全局直连规则:FRP 控制面、B站、国内 LLM、内网段、国区 iCloud、UGREEN 一律 DIRECT。
|
||||
// 全局直连规则:OneDrive、FRP 控制面、B站、国内 LLM、内网段、国区 iCloud、UGREEN 一律 DIRECT。
|
||||
const prependRules = [
|
||||
{lines}
|
||||
];
|
||||
|
||||
// 国内可达的 DoH 同时作为 fallback,确保 OneDrive 等境外域名在 DIRECT 出站前可解析。
|
||||
const directDnsFallbacks = [
|
||||
'https://dns.alidns.com/dns-query',
|
||||
'https://doh.pub/dns-query',
|
||||
];
|
||||
|
||||
function main(config, profileName) {{
|
||||
const existingRules = Array.isArray(config.rules) ? config.rules : [];
|
||||
const existingRuleSet = new Set(existingRules);
|
||||
const dns = config.dns && typeof config.dns === 'object' && !Array.isArray(config.dns)
|
||||
? config.dns
|
||||
: {{}};
|
||||
const existingFallbacks = Array.isArray(dns.fallback)
|
||||
? dns.fallback
|
||||
: (typeof dns.fallback === 'string' ? [dns.fallback] : []);
|
||||
const existingFallbackSet = new Set(existingFallbacks);
|
||||
|
||||
config.rules = [
|
||||
...prependRules.filter((rule) => !existingRuleSet.has(rule)),
|
||||
...existingRules,
|
||||
];
|
||||
dns.fallback = [
|
||||
...directDnsFallbacks.filter((server) => !existingFallbackSet.has(server)),
|
||||
...existingFallbacks,
|
||||
];
|
||||
config.dns = dns;
|
||||
|
||||
return config;
|
||||
}}
|
||||
|
||||
Reference in New Issue
Block a user