FlClash 脚本分流配置教程

分类: 最佳娱乐365bet 时间: 2026-10-25 02:22:24 作者: admin 阅读: 3918 点赞: 569
FlClash 脚本分流配置教程

按照本站入门教程完成 FlClash 配置、能够正常上网后,在规则模式下,通常已经按机场订阅自带的规则进行分流。这套配置可以满足大部分日常使用场景,没有特殊需求就不必额外修改。

本文的分流脚本,主要让你给不同网站分别指定节点,而不是所有代理网站都跟着同一个节点切换。用的仍是你现有订阅里的节点,不需要再买一份订阅。例如:

ChatGPT、Claude 用节点 A:选择一个已经确认能访问这些服务的节点。YouTube 用节点 B:选择一个观看视频体验合适的节点,不影响 AI 的节点选择。GitHub 跟随默认节点 C:以后只需在“[本站]默认”里换节点,跟随默认的服务组也会一起改变;单独选了节点的 AI、YouTube 则不受影响。设置后,FlClash 根据脚本列出的域名把请求送到对应分组,再使用你在组里选的节点。其他网站仍按机场原有规则处理,该直连还是走哪个代理组,由原配置决定。

脚本不会让节点自动变快,也不能保证解锁服务;它只改变指定域名的流量去向,不修改 DNS、TUN 或端口。机场配置如果已经有你需要的分组,可以直接使用;想自己增删网站、决定它们走哪个节点时,再按下面的教程设置。

下面按电脑端的操作顺序完成配置:复制并保存脚本 → 绑定订阅 → 选择节点 → 验证分流,DNS 按需检查。不同版本的菜单名称和图标可能略有差异。

准备好可用订阅尚未安装或导入订阅,先看本站的FlClash 电脑端入门教程或FlClash 安卓入门教程。客户端来源可核对FlClash 项目说明。

开始前确认两件事:

当前订阅能够正常联网。脚本只处理配置,不提供节点,也不能修复失效节点。已备份当前配置和自定义覆写。本脚本只新增服务组和域名规则,不修改 DNS、TUN、端口、IPv6 或节点信息。第一步复制并保存脚本点击左侧的扳手图标(工具),进入 进阶配置 → 脚本。在脚本列表点击 添加,打开“未命名”编辑页。点击下方代码块右上角的复制按钮。回到 FlClash,先点击代码编辑区,再按 Ctrl+A → Ctrl+V,用完整代码替换示例代码,不要把两份代码拼在一起。点击右上角的保存图标,将名称填写为“我的分流”,写名称后点 确定。返回脚本列表,确认出现“我的分流”,选中后再进行下一步。

// mahu.blog 分流脚本 v1.0:只增加服务分组与域名规则,不修改 DNS、TUN 或端口。

function main(config) {

// 可编辑区:在这里增删分组和域名,只写域名,不写网址或通配符。

const prefix = "[本站]";

const services = {

AI: ["chatgpt.com", "openai.com", "oaistatic.com", "oaiusercontent.com", "claude.ai", "anthropic.com"],

YouTube: ["youtube.com", "youtu.be", "googlevideo.com", "ytimg.com"],

GitHub: ["github.com", "githubusercontent.com", "githubassets.com"],

};

if (!config || typeof config !== "object" || Array.isArray(config)) {

throw new Error("没有读取到有效订阅配置");

}

if (!Array.isArray(config.rules) || config.rules.length === 0) {

throw new Error("订阅没有基础规则,请先使用能够正常上网的完整配置");

}

if (config.proxies !== undefined && !Array.isArray(config.proxies)) {

throw new Error("订阅的 proxies 格式不正确");

}

if (config["proxy-groups"] !== undefined && !Array.isArray(config["proxy-groups"])) {

throw new Error("订阅的 proxy-groups 格式不正确");

}

const providers = config["proxy-providers"] || {};

if (typeof providers !== "object" || Array.isArray(providers)) {

throw new Error("订阅的 proxy-providers 格式不正确");

}

const nodes = config.proxies || [];

const oldGroups = config["proxy-groups"] || [];

const reserved = new Set(["DIRECT", "REJECT", "REJECT-DROP", "PASS", "COMPATIBLE", "GLOBAL"]);

const nodeNames = [...new Set(nodes

.filter(node => node && typeof node.name === "string" && node.name.trim()

&& !reserved.has(node.name) && !["direct", "reject", "pass"].includes(node.type))

.map(node => node.name))];

const providerNames = Object.keys(providers);

if (nodeNames.length === 0 && providerNames.length === 0) {

throw new Error("订阅没有可用节点或节点集合");

}

const defaultName = prefix + "默认";

const serviceNames = Object.keys(services);

const names = [defaultName, ...serviceNames.map(name => prefix + name)];

const existing = new Set([...nodes, ...oldGroups].map(item => item && item.name));

for (const name of names) {

if (!name.trim() || /[,\r\n]/.test(name) || reserved.has(name)) {

throw new Error("分组名称不能为空或包含逗号、换行");

}

if (existing.has(name)) {

throw new Error("配置已有同名分组或节点:" + name + "。请更换 prefix,或从原订阅重新加载");

}

}

if (new Set(names).size !== names.length) {

throw new Error("服务分组不能与默认分组重名");

}

const routes = [];

const domains = new Set();

for (const service of serviceNames) {

if (!Array.isArray(services[service]) || services[service].length === 0) {

throw new Error("分组必须包含域名:" + service);

}

for (const value of services[service]) {

const domain = typeof value === "string" ? value.trim().toLowerCase() : "";

if (!/^(?:[a-z0-9-]+\.)+[a-z0-9-]+$/.test(domain)) {

throw new Error("请只填写域名,不填写网址、路径或通配符:" + value);

}

if (domains.has(domain)) throw new Error("域名重复,请只保留一个分组:" + domain);

domains.add(domain);

routes.push({ domain, target: prefix + service });

}

}

// 更具体的子域名先匹配,方便给某个服务单独指定策略。

routes.sort((a, b) => b.domain.split(".").length - a.domain.split(".").length);

const makeGroup = (name, choices) => {

const group = { name, type: "select", proxies: choices, "empty-fallback": "REJECT" };

if (providerNames.length) group.use = providerNames.slice();

return group;

};

const groups = [makeGroup(defaultName, nodeNames.slice()),

...serviceNames.map(name => makeGroup(prefix + name, [defaultName, ...nodeNames]))];

// 只替换这两份数组;机场节点、基础规则及其他设置均保留。

return { ...config,

"proxy-groups": [...groups, ...oldGroups],

rules: [...routes.map(route => "DOMAIN-SUFFIX," + route.domain + "," + route.target), ...config.rules]

};

}保存脚本不等于启用脚本,还需要绑定订阅。

第二步绑定到你的订阅点击左侧的文件夹图标(配置),找到正在使用的订阅卡片。点击这张卡片右侧的 ⋮ 三点菜单 → 更多 → 覆写。在 覆写模式 中点击 脚本 按钮。在 覆写脚本 下点击“我的分流”这一行,确认名称左侧的圆形选项已选中。下方的“前往配置脚本”用于编辑脚本,不是启用按钮。点击左上角的返回箭头退出覆写页,让配置应用。确认这份订阅仍是当前选中的配置,再点击左侧 代理,刷新一下,检查是否出现 [本站] 分组。

右上角的 预览 只用于查看生成的配置,不代替选中脚本和返回应用。若分组尚未刷新,回到 仪表盘,用当前的启动/停止按钮停止后重新启动,再检查;无需删除订阅。

正常加载后,应能看到脚本生成的代理组。脚本会增加 [本站]默认、[本站]AI、[本站]YouTube、[本站]GitHub 四个分组。列出的域名优先按本站规则分流,其他请求继续按机场原有规则处理;域名后缀匹配也会覆盖其子域名。原理见mihomo 路由规则说明。

脚本只是一份精简域名列表,不保证覆盖每项服务的所有登录、接口或资源域名;遗漏的请求仍可能命中机场规则,可根据连接记录补充。

第三步设置代理组点击左侧 仪表盘,在 出站模式 中选择 规则,不要使用“全局”或“直连”来验证脚本分流。点击左侧 代理,再点击页面顶部的 [本站]默认 标签。点击下方一个能够正常访问网站的实际节点卡片。卡片选中后会高亮,表示默认组使用这个节点。依次点击顶部的 [本站]AI、[本站]YouTube、[本站]GitHub 标签,在每个分组里选择节点;想共用默认节点,就点击该组中的 [本站]默认 卡片。各组的设置用途如下:

分组怎么设置[本站]默认先选一个确认能用的节点,作为本站服务组的共同默认选择[本站]AI选择能够访问目标 AI 服务的节点,也可以沿用本站默认[本站]YouTube选择视频访问稳定的节点[本站]GitHub选择能正常访问及下载的节点

不要选择“剩余流量”“距离下次重置”“套餐到期”这类信息卡片,它们不是正常的线路。截图中的 Timeout 表示该项延迟测试超时,绿色毫秒数是一次延迟结果,不代表带宽或长期稳定性;最终仍要用目标网站验证。

服务组可以选择具体节点,也可以选择 [本站]默认,跟随它的节点选择。脚本保留原来的机场代理组,但不会自动把节点按地区分类;含 proxy-providers 的订阅通过节点集合提供可选节点。配置项含义见mihomo 代理组说明。

系统代理和 TUN 决定哪些请求进入客户端,规则模式决定进入后的请求怎么走。不要为了分流同时乱改这些开关;需要开启 TUN 时,确认没有与其他 VPN 冲突,具体限制可查mihomo TUN 说明。

添加自己的分组想给另一个网站单独选节点,只需编辑脚本开头的 services。例如在最后一项后面添加:

Google: ["google.com"],把这一行放在 GitHub 项后面、services 的结束括号前面,保留上一项末尾的逗号。修改后点击右上角的保存图标。

保存并重新加载配置(刷新一下订阅),就会多出 [本站]Google 分组。填写域名即可,不加协议、路径或通配符;同一域名只能属于一个分组。更具体的子域名会优先匹配,例如单独配置 gemini.google.com 时,它会排在 google.com 前面。

第四步确认分流是否生效以 GitHub 为例:

在浏览器里新打开 GitHub 页面。回到 FlClash,点击左侧的 连接,不是“请求”。点击右上角的放大镜图标,输入 github 筛选相关连接。除了 github.com,也可能看到 avatars.githubusercontent.com 等资源域名。查看对应连接下面的标签:是否包含 [本站]GitHub,以及最终是否使用了第三步选择的节点。若选择了共用默认节点,还会看到 [本站]默认。

图中 GitHub 连接带有 [本站]GitHub → [本站]默认 → 节点 这条策略关系,而 YouTube 连接走 [本站]YouTube → 节点,说明这两类请求分别进入了对应服务组。右侧的圆圈斜杠按钮是关闭该连接,不是切换节点;选择节点应回到“代理”页面。

再用同样的方法检查 AI 或 YouTube。服务可能使用多个域名,应查看实际请求,不是只看一个首页。切换策略后重新发起请求,旧连接可能仍使用之前的节点。

如果完全没有连接记录,先检查应用是否进入代理;如果有记录却走了 DIRECT 或其他组,检查规则命中。详细解释见本站Clash 日志与连接排查。

第五步按需检查 DNS本脚本不修改 DNS,也不包含“防泄露一键修复”。需要检查时,打开BrowserLeaks DNS 检测,比较启用脚本前后的解析服务器,查看是否符合自己的 DNS 设置。

如果出现不预期的本地运营商解析器,继续检查 TUN、浏览器安全 DNS 和系统 DNS。不能只凭国旗判断是否泄露,也不能把一次浏览器测试当作所有应用的安全保证。

DoH 表示 DNS 使用加密传输,不等于查询一定经过代理;具体解析策略可查mihomo DNS 文档。检测时不需要提交订阅链接或私人配置。

出错时按这个顺序恢复提示语法错误:确认复制了完整代码,没有连同 Markdown 的代码围栏一起粘贴。没有出现代理组:检查脚本是否保存、是否绑定当前订阅,以及配置错误提示。提示同名或重复域名:给 prefix 换一个前缀,或只保留该域名的一处分组设置。不要在已处理的配置上重复套用脚本。有代理组但打不开网页:先用原订阅确认节点可用,再检查规则和 DNS。启用后整个网络异常:停止连接,解除该订阅的脚本覆写,恢复备份和原来的代理开关,再测试。不要通过关闭证书校验、清空全部配置或关闭防火墙来处理这类问题。

设置完成后保存一份可用版本。这里粘贴的是本地脚本,不会自动从网站更新;以后修改脚本或更新订阅,都重新检查一次分流结果。

相关推荐