标签 节点分组 下的文章

多个机场配置

使用 Sparkle + 内置 Sub-Store 统一归纳整理分组多个机场节点

效果如图:

1.Sub-Store 配置

1.1 新建单条订阅

  • 名称:可以直接取机场名称
  • 来源:远程订阅
  • 链接:机场复制的订阅链接,直接复制 clash 订阅链接即可
  • 其他默认即可

将所需要统一管理的机场按步骤逐个添加

1.2 新建组合订阅

  • 名称: 随意,区分即可 如 ‘机场合集’

  • 手动选择需要纳入到合集的单条机场订阅

  • 忽略失败的远程订阅:禁用 或 启用 (无通知)

  • 节点操作:添加一个脚本操作 -> 选择类型为脚本 -> 粘贴以下内容 (目的是为每个节点后缀添加你的订阅名以区分节点归属于哪个机场)

    • // Example: // Script Operator // 1. backend version(>2.14.88): $server.name = $server.name+" - "+$server._subName
      $server.ecn = true $server['test-url'] = 'http://1.0.0.1/generate_204' 

1.3 复制并导入组合订阅

  • 点击你创建的组合订阅,复制通用订阅 或 Mihomo 类型订阅
  • 在订阅管理中导入你复制的订阅链接

到这一步为止,你就得到了一个包含所有组合订阅机场节点的本地订阅,但是由于没有进行统一分组以及标识,还需要进行下一步配置

2. 覆写配置

覆写 - > 右上角-> 新建 JavaScript 命名并粘贴以下 js 代码 。你可以自由修改并测试,下面的是我使用的分组策略

js 代码
// 这里的 main 函数会接收当前的配置(config),修改后返回
function main(config) {
  
  // 1. 定义我们需要的节点分组和对应的正则
  // 格式:[组名, 正则表达式, 图标(可选)]
  const regionFilters = [
    ['🇭🇰 香港节点', /(HK|Hong|Kong|香港|🇭🇰)/i],
    ['🇯🇵 日本节点', /(JP|Japan|日本|🇯🇵)/i],
    ['🇺🇸 美国节点', /(US|America|美国|🇺🇸)/i],
    ['🇸🇬 新加坡节点', /(SG|Singapore|新加坡|🇸🇬)/i],
    ['🇹🇼 台湾节点', /(TW|Taiwan|台湾|🇹🇼)/i],
    ['🇰🇷 韩国节点', /(KR|Korea|韩国|🇰🇷)/i]
  ];

  // 辅助函数:检查是否是垃圾节点(剩余流量、官网等)
  const isBadProxy = (name) => {
    return /剩余|到期|重置|官网|客户端|备用|过期|错误|流量|时间/i.test(name);
  };

  // 2. 准备分组的节点容器
  const groups = {
    '🇭🇰 香港节点': [],
    '🇯🇵 日本节点': [],
    '🇺🇸 美国节点': [],
    '🇸🇬 新加坡节点': [],
    '🇹🇼 台湾节点': [],
    '🇰🇷 韩国节点': [],
    '🌍 其他地区': [],
    '♻️ 自动选择': [] // 所有可用节点
  };

  // 3. 遍历现有节点,进行分类
  const proxies = config.proxies || [];
  
  proxies.forEach(proxy => {
    const name = proxy.name;
    
    // 过滤垃圾节点
    if (isBadProxy(name)) return;

    // 加入“自动选择”全集
    groups['♻️ 自动选择'].push(name);

    let matched = false;
    // 尝试匹配特定地区
    for (const [groupName, regex] of regionFilters) {
      if (regex.test(name)) {
        groups[groupName].push(name);
        matched = true;
        break; // 一个节点只归入一个主地区
      }
    }

    // 如果没匹配到任何主要国家,放入“其他地区”
    if (!matched) {
      groups['🌍 其他地区'].push(name);
    }
  });

  // 4. 定义新的策略组结构
  const newProxyGroups = [
    {
      name: '🚀 节点选择',
      type: 'select',
      proxies: [
        '♻️ 自动选择',
        '🇭🇰 香港节点',
        '🇯🇵 日本节点',
        '🇺🇸 美国节点',
        '🇸🇬 新加坡节点',
        '🇹🇼 台湾节点',
        '🇰🇷 韩国节点',
        '🌍 其他地区',
        'DIRECT'
      ]
    },
    {
      name: '♻️ 自动选择',
      type: 'url-test',
      url: 'http://www.gstatic.com/generate_204',
      interval: 300,
      tolerance: 50,
      proxies: groups['♻️ 自动选择'].length > 0 ? groups['♻️ 自动选择'] : ['DIRECT']
    },
    // 生成各个地区的 url-test 组
    ...regionFilters.map(([name]) => ({
      name: name,
      type: 'url-test',
      url: 'http://www.gstatic.com/generate_204',
      interval: 300,
      tolerance: 50,
      // 如果该地区没节点,回退到 DIRECT 防止报错
      proxies: groups[name].length > 0 ? groups[name] : ['DIRECT']
    })),
    {
      name: '🌍 其他地区',
      type: 'select', // 其他地区用手动选择比较好,因为可能包含不同国家
      proxies: groups['🌍 其他地区'].length > 0 ? groups['🌍 其他地区'] : ['DIRECT']
    },
    {
      name: '📲 电报消息',
      type: 'select',
      proxies: ['🚀 节点选择', '🇸🇬 新加坡节点', '🇭🇰 香港节点', '🇺🇸 美国节点']
    },
    {
      name: '🤖 OpenAI',
      type: 'select',
      proxies: ['🇺🇸 美国节点', '🇯🇵 日本节点', '🇸🇬 新加坡节点', '🚀 节点选择']
    },
    {
      name: '🐟 漏网之鱼',
      type: 'select',
      proxies: ['🚀 节点选择', 'DIRECT']
    }
  ];

  // 5. 定义规则集 (Rule Providers)
  const ruleProviders = {
    reject: {
      type: 'http',
      behavior: 'domain',
      url: 'https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt',
      path: './ruleset/reject.yaml',
      interval: 86400
    },
    icloud: {
      type: 'http',
      behavior: 'domain',
      url: 'https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/icloud.txt',
      path: './ruleset/icloud.yaml',
      interval: 86400
    },
    apple: {
      type: 'http',
      behavior: 'domain',
      url: 'https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/apple.txt',
      path: './ruleset/apple.yaml',
      interval: 86400
    },
    google: {
      type: 'http',
      behavior: 'domain',
      url: 'https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/google.txt',
      path: './ruleset/google.yaml',
      interval: 86400
    },
    proxy: {
      type: 'http',
      behavior: 'domain',
      url: 'https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt',
      path: './ruleset/proxy.yaml',
      interval: 86400
    },
    direct: {
      type: 'http',
      behavior: 'domain',
      url: 'https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt',
      path: './ruleset/direct.yaml',
      interval: 86400
    },
    private: {
      type: 'http',
      behavior: 'domain',
      url: 'https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/private.txt',
      path: './ruleset/private.yaml',
      interval: 86400
    },
    telegramcidr: {
      type: 'http',
      behavior: 'ipcidr',
      url: 'https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/telegramcidr.txt',
      path: './ruleset/telegramcidr.yaml',
      interval: 86400
    },
    cncidr: {
      type: 'http',
      behavior: 'ipcidr',
      url: 'https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/cncidr.txt',
      path: './ruleset/cncidr.yaml',
      interval: 86400
    },
    lancidr: {
      type: 'http',
      behavior: 'ipcidr',
      url: 'https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/lancidr.txt',
      path: './ruleset/lancidr.yaml',
      interval: 86400
    },
    applications: {
      type: 'http',
      behavior: 'classical',
      url: 'https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/applications.txt',
      path: './ruleset/applications.yaml',
      interval: 86400
    }
  };

  // 6. 定义规则 (Rules)
  const rules = [
    'DOMAIN-KEYWORD,augment,🇺🇸 美国节点',
    'RULE-SET,google,🇺🇸 美国节点',
    'DOMAIN-KEYWORD,google,🇺🇸 美国节点',
    'DOMAIN-KEYWORD,antigravity,🇺🇸 美国节点',
    'DOMAIN-SUFFIX,goog,🇺🇸 美国节点',
    'RULE-SET,applications,DIRECT',
    'DOMAIN,clash.razord.top,DIRECT',
    'RULE-SET,private,DIRECT',
    'RULE-SET,reject,REJECT',
    'RULE-SET,icloud,DIRECT',
    'RULE-SET,apple,DIRECT',
    'RULE-SET,proxy,🚀 节点选择',
    'DOMAIN-KEYWORD,github,🚀 节点选择',
    'RULE-SET,direct,DIRECT',
    'RULE-SET,telegramcidr,📲 电报消息',
    'GEOIP,LAN,DIRECT',
    'GEOIP,CN,DIRECT',
    'RULE-SET,lancidr,DIRECT',
    'RULE-SET,cncidr,DIRECT',
    'MATCH,🐟 漏网之鱼'
  ];

  // 7. 写入配置
  config['proxy-groups'] = newProxyGroups;
  config['rule-providers'] = ruleProviders;
  config['rules'] = rules;

  // 返回修改后的配置
  return config;
}

应用配置

  • 在你刚刚导入成功的组合订阅处,选择编辑信息,在覆写处选择你刚刚新建的覆写配置文件,保存。点击保存后正常来讲没有任何弹框提示,如果有那就是配置有问题。

到这里就配置完了,效果就是开头贴出的效果图,小白第一次写这种配置帖,请多担待。


📌 转载信息
转载时间:
2026/1/20 17:50:46

起初是不想用 TUN 模式的,怕代理了下载流量和游戏流量。
为了认证咕噜咕噜学生会员和反重力,就开始折腾一下(结果因为以前用 Adsense 加了国内地址导致学生会员没资格,然后反重力也改成周刷新额度了,555)
本脚本解决了以下问题:

  • 锁定谷歌的地区为新加坡(你也可以自己改地区,或者加规则实现其他网站固定地区)
  • 把到期时间、剩余流量等没意义的节点单独丢一个分组,不参与自动选择
  • TUN 模式下,非必要代理的流量尽可能走直连(测试了游戏没问题)
    • 原理是解析 IP 如果是国内就走直连,但是不知道如果分发 CND 是亚洲 IP 能不能命中该规则
    • 有没有佬帮测一下 steam 下载这类流量比较大且使用场景比较多的情况
  • TUN 模式下反重力正常工作


然后我想再问个问题:
开了 TUN 之后,有些支持配置代理的软件,还需要再选择系统代理吗,或者是直接不开代理也行?因为我看 TUN 模式需要关闭系统代理,然后软件不配置代理的话好像也能走代理


脚本:

// 自定义域名配置
const forceProxyDomains = [
    "DOMAIN-SUFFIX,linux.do,常规节点组",
    "DOMAIN-SUFFIX,genspark.ai,常规节点组"
]

// 自定义规则集配置
// 规则集仓库 https://github.com/blackmatrix7/ios_rule_script/blob/master/rule/Clash/README.md
const ruleConfig = [
    {
        name: "谷歌规则集",
        group: "地区节点组",
        url: "https://cdn.jsdelivr.net/gh/blackmatrix7/ios_rule_script@master/rule/Clash/Google/Google.yaml"
    },
    {
        name: "油管规则集",
        group: "地区节点组",
        url: "https://cdn.jsdelivr.net/gh/blackmatrix7/ios_rule_script@master/rule/Clash/YouTube/YouTube.yaml"
    }
]

function main(config) {
    const newConfig = JSON.parse(JSON.stringify(config));

    // 特殊节点组:无用的节点(官网地址、到期时间等)
    const premiumKeywords = /(免费|2026|官网|剩余|到期|Traffic)/i;
    let specialProxies = newConfig.proxies.filter(p => premiumKeywords.test(p.name));
    let normalProxies = newConfig.proxies.filter(p => !premiumKeywords.test(p.name));
    
    // 地区节点组:固定新加坡,没有则降级到常规节点组
    const areaKeywords = /(singapore|新加坡)/i;
    let areaProxies = newConfig.proxies.filter(p => areaKeywords.test(p.name));
    if(areaProxies.length <= 0) {
        areaProxies = normalProxies;
    }

   // 构建代理组
    const proxyGroups = [
        {
            "name": "代理分流组",
            "type": "select",
            "proxies": specialProxies.length > 0 ? ["常规节点组", "特殊节点组", "DIRECT"] : ["常规节点组", "DIRECT"]
        },
        {
            "name": "常规节点组",
            "type": "url-test",
            "url": "http://www.google.com/generate_204",
            "interval": 1800,
            "tolerance": 30,
            "proxies": normalProxies.map(p => p.name)
        },
        ...(specialProxies.length > 0 ? [
            {
                "name": "特殊节点组",
                "type": "select",
                "proxies": specialProxies.map(p => p.name)
            }] : []
        ),
        {
                "name": "地区节点组",
                "type": "select",
                "proxies": areaProxies.map(p => p.name)
        },
        {
            "name": "国内直连组",
            "type": "select",
            "proxies": ["DIRECT"]
        }
    ];

    // 规则配置
    const rules = [];

    // 添加自定义域名
    forceProxyDomains.forEach(domain => {
        rules.push(domain);
    });

    // 添加自定义规则集
    const ruleProviders = {};
    ruleConfig.forEach(({ name, url, group }) => {
        const providerKey = `${name.toLowerCase()}_rules`;
        ruleProviders[providerKey] = {
            "type": "http",
            "behavior": "classical",
            "url": url,
            "interval": 86400,
            "path": `./rule-providers/${providerKey}.yaml`
        };
        rules.push(`RULE-SET,${providerKey},${group}`);
    });

    // 全局配置
    const globalConfig = {
        "global-client-fingerprint": "chrome",
        "tcp-concurrent": true,
        "geox-url": {
            "geoip": "https://ghfast.top/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip-lite.dat",
            "geosite": "https://ghfast.top/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat",
            "mmdb": "https://ghfast.top/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country-lite.mmdb"
        }
    };

    // GEO规则
    rules.push(
        // 确定被墙 → 代理
        "GEOSITE,gfw,代理分流组",
        // 中国相关 → 直连
        "GEOSITE,cn,国内直连组",
        "GEOSITE,private,国内直连组",
        "GEOIP,private,国内直连组,no-resolve",
        "GEOIP,cn,国内直连组",
        // 兜底 → 代理
        "MATCH,代理分流组"
    );


    return {
        ...newConfig,
        ...globalConfig,
        "proxy-groups": proxyGroups,
        "rules": rules,
        "rule-providers": ruleProviders
    };
}

没写 DNS 的规则,有需要可以参考之前的帖子傻瓜式 clash verge 全局脚本,实现 DNS 国内外分流,粘贴即用


📌 转载信息
原作者:
mos6
转载时间:
2025/12/28 19:50:40

起初是不想用 TUN 模式的,怕代理了下载流量和游戏流量。
为了认证咕噜咕噜学生会员和反重力,就开始折腾一下(结果因为以前用 Adsense 加了国内地址导致学生会员没资格,然后反重力也改成周刷新额度了,555)
本脚本解决了以下问题:

  • 锁定谷歌的地区为新加坡(你也可以自己改地区,或者加规则实现其他网站固定地区)
  • 把到期时间、剩余流量等没意义的节点单独丢一个分组,不参与自动选择
  • TUN 模式下,非必要代理的流量尽可能走直连(测试了游戏没问题)
    • 原理是解析 IP 如果是国内就走直连,但是不知道如果分发 CND 是亚洲 IP 能不能命中该规则
    • 有没有佬帮测一下 steam 下载这类流量比较大且使用场景比较多的情况
  • TUN 模式下反重力正常工作


然后我想再问个问题:
开了 TUN 之后,有些支持配置代理的软件,还需要再选择系统代理吗,或者是直接不开代理也行?因为我看 TUN 模式需要关闭系统代理,然后软件不配置代理的话好像也能走代理


脚本:

// 自定义域名配置
const forceProxyDomains = [
    "DOMAIN-SUFFIX,linux.do,常规节点组",
    "DOMAIN-SUFFIX,genspark.ai,常规节点组"
]

// 自定义规则集配置
// 规则集仓库 https://github.com/blackmatrix7/ios_rule_script/blob/master/rule/Clash/README.md
const ruleConfig = [
    {
        name: "谷歌规则集",
        group: "地区节点组",
        url: "https://cdn.jsdelivr.net/gh/blackmatrix7/ios_rule_script@master/rule/Clash/Google/Google.yaml"
    },
    {
        name: "油管规则集",
        group: "地区节点组",
        url: "https://cdn.jsdelivr.net/gh/blackmatrix7/ios_rule_script@master/rule/Clash/YouTube/YouTube.yaml"
    }
]

function main(config) {
    const newConfig = JSON.parse(JSON.stringify(config));

    // 特殊节点组:无用的节点(官网地址、到期时间等)
    const premiumKeywords = /(免费|2026|官网|剩余|到期|Traffic)/i;
    let specialProxies = newConfig.proxies.filter(p => premiumKeywords.test(p.name));
    let normalProxies = newConfig.proxies.filter(p => !premiumKeywords.test(p.name));
    
    // 地区节点组:固定新加坡,没有则降级到常规节点组
    const areaKeywords = /(singapore|新加坡)/i;
    let areaProxies = newConfig.proxies.filter(p => areaKeywords.test(p.name));
    if(areaProxies.length <= 0) {
        areaProxies = normalProxies;
    }

   // 构建代理组
    const proxyGroups = [
        {
            "name": "代理分流组",
            "type": "select",
            "proxies": specialProxies.length > 0 ? ["常规节点组", "特殊节点组", "DIRECT"] : ["常规节点组", "DIRECT"]
        },
        {
            "name": "常规节点组",
            "type": "url-test",
            "url": "http://www.google.com/generate_204",
            "interval": 1800,
            "tolerance": 30,
            "proxies": normalProxies.map(p => p.name)
        },
        ...(specialProxies.length > 0 ? [
            {
                "name": "特殊节点组",
                "type": "select",
                "proxies": specialProxies.map(p => p.name)
            }] : []
        ),
        {
                "name": "地区节点组",
                "type": "select",
                "proxies": areaProxies.map(p => p.name)
        },
        {
            "name": "国内直连组",
            "type": "select",
            "proxies": ["DIRECT"]
        }
    ];

    // 规则配置
    const rules = [];

    // 添加自定义域名
    forceProxyDomains.forEach(domain => {
        rules.push(domain);
    });

    // 添加自定义规则集
    const ruleProviders = {};
    ruleConfig.forEach(({ name, url, group }) => {
        const providerKey = `${name.toLowerCase()}_rules`;
        ruleProviders[providerKey] = {
            "type": "http",
            "behavior": "classical",
            "url": url,
            "interval": 86400,
            "path": `./rule-providers/${providerKey}.yaml`
        };
        rules.push(`RULE-SET,${providerKey},${group}`);
    });

    // 全局配置
    const globalConfig = {
        "global-client-fingerprint": "chrome",
        "tcp-concurrent": true,
        "geox-url": {
            "geoip": "https://ghfast.top/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip-lite.dat",
            "geosite": "https://ghfast.top/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat",
            "mmdb": "https://ghfast.top/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country-lite.mmdb"
        }
    };

    // GEO规则
    rules.push(
        // 确定被墙 → 代理
        "GEOSITE,gfw,代理分流组",
        // 中国相关 → 直连
        "GEOSITE,cn,国内直连组",
        "GEOSITE,private,国内直连组",
        "GEOIP,private,国内直连组,no-resolve",
        "GEOIP,cn,国内直连组",
        // 兜底 → 代理
        "MATCH,代理分流组"
    );


    return {
        ...newConfig,
        ...globalConfig,
        "proxy-groups": proxyGroups,
        "rules": rules,
        "rule-providers": ruleProviders
    };
}

没写 DNS 的规则,有需要可以参考之前的帖子傻瓜式 clash verge 全局脚本,实现 DNS 国内外分流,粘贴即用


📌 转载信息
原作者:
mos6
转载时间:
2025/12/28 18:29:55