文件引用自:https://linux.do/t/topic/424805/17
点击查看完整配置文件
// 国内DNS服务器
const domesticNameservers = [
"https://223.5.5.5/dns-query", // 阿里DoH
"https://doh.pub/dns-query" // 腾讯DoH,因腾讯云即将关闭免费版IP访问,故用域名
];
// 国外DNS服务器
const foreignNameservers = [
// "https://8.8.4.4/dns-query#ecs=1.1.1.1/24&ecs-override=true", // GoogleDNS
"https://1.1.1.1/dns-query", // CloudflareDNS
// "https://208.67.222.222/dns-query#ecs=1.1.1.1/24&ecs-override=true", // OpenDNS
"https://9.9.9.9/dns-query" //Quad9DNS
];
// DNS配置
const dnsConfig = {
"enable": true,
"listen": "0.0.0.0:1053",
"ipv6": true,
"use-system-hosts": false,
"cache-algorithm": "arc",
"enhanced-mode": "fake-ip",
"fake-ip-range": "198.18.0.1/16",
"fake-ip-filter": [
// 本地主机/设备
"+.lan",
"+.local",
// // Windows网络出现小地球图标
// "+.msftconnecttest.com",
// "+.msftncsi.com",
// QQ快速登录检测失败
"localhost.ptlogin2.qq.com",
"localhost.sec.qq.com",
// 微信快速登录检测失败
"localhost.work.weixin.qq.com"
],
"default-nameserver": ["https://223.5.5.5/dns-query"],
"nameserver": [...foreignNameservers],
"nameserver-policy": {
"geosite:private,cn": domesticNameservers
}
};
//分地区
// 规则集通用配置
const ruleProviderCommon = {
"type": "http",
"format": "yaml",
"interval": 86400
};
// 规则集配置
const ruleProviders = {
"reject": {
...ruleProviderCommon,
"behavior": "domain",
"url": "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt",
"path": "./ruleset/loyalsoldier/reject.yaml"
},
"icloud": {
...ruleProviderCommon,
"behavior": "domain",
"url": "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/icloud.txt",
"path": "./ruleset/loyalsoldier/icloud.yaml"
},
"apple": {
...ruleProviderCommon,
"behavior": "domain",
"url": "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/apple.txt",
"path": "./ruleset/loyalsoldier/apple.yaml"
},
"google": {
...ruleProviderCommon,
"behavior": "domain",
"url": "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/google.txt",
"path": "./ruleset/loyalsoldier/google.yaml"
},
"telegramcidr": {
...ruleProviderCommon,
"behavior": "ipcidr",
"url": "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/telegramcidr.txt",
"path": "./ruleset/loyalsoldier/telegramcidr.yaml"
},
"cncidr": {
...ruleProviderCommon,
"behavior": "ipcidr",
"url": "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/cncidr.txt",
"path": "./ruleset/loyalsoldier/cncidr.yaml"
},
"lancidr": {
...ruleProviderCommon,
"behavior": "ipcidr",
"url": "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/lancidr.txt",
"path": "./ruleset/loyalsoldier/lancidr.yaml"
},
"applications": {
...ruleProviderCommon,
"behavior": "classical",
"url": "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/applications.txt",
"path": "./ruleset/loyalsoldier/applications.yaml"
},
"openai": {
...ruleProviderCommon,
"behavior": "classical",
"url": "https://fastly.jsdelivr.net/gh/blackmatrix7/ios_rule_script@master/rule/Clash/OpenAI/OpenAI.yaml",
"path": "./ruleset/blackmatrix7/openai.yaml"
},
"ehentai": {
...ruleProviderCommon,
"behavior": "classical",
"url": "https://fastly.jsdelivr.net/gh/v2fly/domain-list-community@master/data/ehentai",
"path": "./ruleset/v2fly/ehentai.yaml"
},
"microsoft": {
...ruleProviderCommon,
"behavior": "classical",
"url": "https://fastly.jsdelivr.net/gh/v2fly/domain-list-community@master/data/microsoft",
"path": "./ruleset/v2fly/microsoft.yaml"
},
"bing": {
...ruleProviderCommon,
"behavior": "classical",
"url": "https://fastly.jsdelivr.net/gh/v2fly/domain-list-community@master/data/bing",
"path": "./ruleset/v2fly/bing.yaml"
},
"onedrive": {
...ruleProviderCommon,
"behavior": "classical",
"url": "https://fastly.jsdelivr.net/gh/v2fly/domain-list-community@master/data/onedrive",
"path": "./ruleset/v2fly/onedrive.yaml"
},
"youtube": {
...ruleProviderCommon,
"behavior": "classical",
"url": "https://fastly.jsdelivr.net/gh/v2fly/domain-list-community@master/data/youtube",
"path": "./ruleset/v2fly/youtube.yaml"
},
"netflix": {
...ruleProviderCommon,
"behavior": "classical",
"url": "https://fastly.jsdelivr.net/gh/v2fly/domain-list-community@master/data/netflix",
"path": "./ruleset/v2fly/netflix.yaml"
},
"abema": {
...ruleProviderCommon,
"behavior": "classical",
"url": "https://fastly.jsdelivr.net/gh/v2fly/domain-list-community@master/data/abema",
"path": "./ruleset/v2fly/abema.yaml"
},
"bahamut": {
...ruleProviderCommon,
"behavior": "classical",
"url": "https://fastly.jsdelivr.net/gh/v2fly/domain-list-community@master/data/bahamut",
"path": "./ruleset/v2fly/bahamut.yaml"
},
"steam": {
...ruleProviderCommon,
"behavior": "classical",
"url": "https://fastly.jsdelivr.net/gh/v2fly/domain-list-community@master/data/steam",
"path": "./ruleset/v2fly/steam.yaml"
},
"proxy": {
...ruleProviderCommon,
"behavior": "domain",
"url": "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt",
"path": "./ruleset/loyalsoldier/proxy.yaml"
},
"direct": {
...ruleProviderCommon,
"behavior": "domain",
"url": "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt",
"path": "./ruleset/loyalsoldier/direct.yaml"
},
"private": {
...ruleProviderCommon,
"behavior": "domain",
"url": "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/private.txt",
"path": "./ruleset/loyalsoldier/private.yaml"
},
"gfw": {
...ruleProviderCommon,
"behavior": "domain",
"url": "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/gfw.txt",
"path": "./ruleset/loyalsoldier/gfw.yaml"
},
"tld-not-cn": {
...ruleProviderCommon,
"behavior": "domain",
"url": "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/tld-not-cn.txt",
"path": "./ruleset/loyalsoldier/tld-not-cn.yaml"
},
};
// 规则
const rules = [
// 额外自定义规则 //在此添加你想要的规则
"PROCESS-NAME,steam.exe,🎮 Steam",
"DOMAIN,v2.ixlmo.net,🔗 Global Direct",
// 自定义规则
"DOMAIN-SUFFIX,googleapis.cn,⚙️ Node Select", // Google服务
"DOMAIN-SUFFIX,gstatic.com,⚙️ Node Select", // Google静态资源
"DOMAIN-SUFFIX,xn--ngstr-lra8j.com,⚙️ Node Select", // Google Play下载服务
"DOMAIN-SUFFIX,github.io,⚙️ Node Select", // Github Pages
"DOMAIN,v2rayse.com,⚙️ Node Select", // V2rayse节点工具
//Bilibili 港澳台
"DOMAIN,p-bstarstatic.akamaized.net,📺 BilibiliHMT",
"DOMAIN,p.bstarstatic.com,📺 BilibiliHMT",
"DOMAIN,upos-bstar-mirrorakam.akamaized.net,📺 BilibiliHMT",
"DOMAIN,upos-bstar1-mirrorakam.akamaized.net,📺 BilibiliHMT",
"DOMAIN,upos-hz-mirrorakam.akamaized.net,📺 BilibiliHMT",
// blackmatrix7 规则集
"RULE-SET,openai,💸 ChatGPT",
// Loyalsoldier 规则集
"RULE-SET,applications,🔗 Global Direct",
"RULE-SET,private,🔗 Global Direct",
"RULE-SET,reject,🥰 AdBlock",
"RULE-SET,icloud,🍎 iCloud",
"RULE-SET,apple,🍎 Apple",
"RULE-SET,google,📢 Google",
"RULE-SET,telegramcidr,📲 Telegram,no-resolve",
"RULE-SET,ehentai,🐼 E-Hentai,no-resolve",
"RULE-SET,microsoft,Ⓜ️ Microsoft,no-resolve",
"RULE-SET,bing,Ⓜ️ Bing,no-resolve",
"RULE-SET,onedrive,Ⓜ️ Onedrive,no-resolve",
"RULE-SET,youtube,📹 Youtube,no-resolve",
"RULE-SET,netflix,🎥 Netflix,no-resolve",
"RULE-SET,bahamut,📺 Bahamut,no-resolve",
"RULE-SET,abema,📺 Abema,no-resolve",
"RULE-SET,steam,🎮 Steam,no-resolve",
"RULE-SET,proxy,⚙️ Node Select",
"RULE-SET,gfw,⚙️ Node Select",
"RULE-SET,tld-not-cn,⚙️ Node Select",
"RULE-SET,direct,🔗 Global Direct",
"RULE-SET,lancidr,🔗 Global Direct,no-resolve",
"RULE-SET,cncidr,🔗 Global Direct,no-resolve",
// 其他规则
"GEOIP,LAN,🔗 Global Direct,no-resolve",
"GEOIP,CN,🔗 Global Direct,no-resolve",
"MATCH,🐟 Others"
];
// 代理组通用配置
const groupBaseOption = {
"interval": 300,
"timeout": 3000,
"url": "https://www.google.com/generate_204",
"lazy": true,
"max-failed-times": 3,
"hidden": false
};
// 程序入口
function main(config) {
const proxyCount = config?.proxies?.length ?? 0;
const proxyProviderCount =
typeof config?.["proxy-providers"] === "object" ? Object.keys(config["proxy-providers"]).length : 0;
if (proxyCount === 0 && proxyProviderCount === 0) {
throw new Error("配置文件中未找到任何代理");
}
// 覆盖原配置中DNS配置
config["dns"] = dnsConfig;
// 覆盖原配置中的代理组
config["proxy-groups"] = [
{
...groupBaseOption,
"name": "⚙️ Node Select",
"type": "select",
"proxies": ["♻️ Latency Tuning", "🚑 Fallback", "⚖️ Load Balance(Hashing)", "☁️ Load Balance(Round Robin)", "🇭🇰Hong Kong", "🇯🇵Japan", "🇰🇷Korea", "🇸🇬Singapore", "🇨🇳Taiwan", "🇺🇸United States", "🇬🇧United Kingdom"],
"include-all": true,
"icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/adjust.svg"
},
{
...groupBaseOption,
"name": "♻️ Latency Tuning",
"type": "url-test",
"tolerance": 50,
"include-all": true,
"icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/speed.svg"
},
{
...groupBaseOption,
"name": "🚑 Fallback",
"type": "fallback",
"include-all": true,
"icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/ambulance.svg"
},
{
...groupBaseOption,
"name": "⚖️ Load Balance(Hashing)",
"type": "load-balance",
"strategy": "consistent-hashing",
"include-all": true,
"icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/merry_go.svg"
},
{
...groupBaseOption,
"name": "☁️ Load Balance(Round Robin)",
"type": "load-balance",
"strategy": "round-robin",
"include-all": true,
"icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/balance.svg"
},
{
...groupBaseOption,
"name": "🇭🇰Hong Kong",
"type": "select",
"include-all": true,
"filter": "(?i)港|🇭🇰|hk|hongkong|hong kong",
"icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/flags/hk.svg"
},
{
...groupBaseOption,
"name": "🇯🇵Japan",
"type": "select",
"include-all": true,
"filter": "(?i)日本|🇯🇵|jp|japan",
"icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/flags/jp.svg"
},
{
...groupBaseOption,
"name": "🇰🇷Korea",
"type": "select",
"include-all": true,
"filter": "(?i)韩|🇰🇷|kr|korea",
"icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/flags/kr.svg"
},
{
...groupBaseOption,
"name": "🇸🇬Singapore",
"type": "select",
"include-all": true,
"filter": "(?i)新加坡|🇸🇬|sg|singapore",
"icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/flags/sg.svg"
},
{
...groupBaseOption,
"name": "🇨🇳Taiwan",
"type": "select",
"include-all": true,
"filter": "(?i)台湾|🇹🇼|tw|taiwan|tai wan",
"icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/flags/cn.svg"
},
{
...groupBaseOption,
"name": "🇺🇸United States",
"type": "select",
"include-all": true,
"filter": "(?i)美|🇺🇸|us|united state|america",
"icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/flags/us.svg"
},
{
...groupBaseOption,
"name": "🇬🇧United Kingdom",
"type": "select",
"include-all": true,
"filter": "(?i)英|🇬🇧|uk|united kingdom|great britain",
"icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/flags/gb.svg"
},
{
...groupBaseOption,
"name": "📢 Google",
"type": "select",
"proxies": ["⚙️ Node Select", "♻️ Latency Tuning", "🚑 Fallback", "⚖️ Load Balance(Hashing)", "☁️ Load Balance(Round Robin)", "🔗 Global Direct", "🇭🇰Hong Kong", "🇯🇵Japan", "🇰🇷Korea", "🇸🇬Singapore", "🇨🇳Taiwan", "🇺🇸United States", "🇬🇧United Kingdom"],
"include-all": true,
"icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/google.svg"
},
{
...groupBaseOption,
"name": "📲 Telegram",
"type": "select",
"proxies": ["⚙️ Node Select", "♻️ Latency Tuning", "🚑 Fallback", "⚖️ Load Balance(Hashing)", "☁️ Load Balance(Round Robin)", "🔗 Global Direct", "🇭🇰Hong Kong", "🇯🇵Japan", "🇰🇷Korea", "🇸🇬Singapore", "🇨🇳Taiwan", "🇺🇸United States", "🇬🇧United Kingdom"],
"include-all": true,
"icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/telegram.svg"
},
{
...groupBaseOption,
"name": "🐼 E-Hentai",
"type": "select",
"proxies": ["⚙️ Node Select", "♻️ Latency Tuning", "🚑 Fallback", "⚖️ Load Balance(Hashing)", "☁️ Load Balance(Round Robin)", "🔗 Global Direct", "🇭🇰Hong Kong", "🇯🇵Japan", "🇰🇷Korea", "🇸🇬Singapore", "🇨🇳Taiwan", "🇺🇸United States", "🇬🇧United Kingdom"],
"include-all": true,
"icon": "https://e-hentai.org/favicon.ico"
},
{
...groupBaseOption,
"name": "Ⓜ️ Microsoft",
"type": "select",
"proxies": ["⚙️ Node Select", "♻️ Latency Tuning", "🚑 Fallback", "⚖️ Load Balance(Hashing)", "☁️ Load Balance(Round Robin)", "🔗 Global Direct", "🇭🇰Hong Kong", "🇯🇵Japan", "🇰🇷Korea", "🇸🇬Singapore", "🇨🇳Taiwan", "🇺🇸United States", "🇬🇧United Kingdom"],
"include-all": true,
"icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/microsoft.svg"
},
{
...groupBaseOption,
"name": "Ⓜ️ Bing",
"type": "select",
"proxies": ["⚙️ Node Select", "♻️ Latency Tuning", "🚑 Fallback", "⚖️ Load Balance(Hashing)", "☁️ Load Balance(Round Robin)", "🔗 Global Direct", "🇭🇰Hong Kong", "🇯🇵Japan", "🇰🇷Korea", "🇸🇬Singapore", "🇨🇳Taiwan", "🇺🇸United States", "🇬🇧United Kingdom"],
"include-all": true,
"icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/bing.svg"
},
{
...groupBaseOption,
"name": "Ⓜ️ Onedrive",
"type": "select",
"proxies": ["⚙️ Node Select", "♻️ Latency Tuning", "🚑 Fallback", "⚖️ Load Balance(Hashing)", "☁️ Load Balance(Round Robin)", "🔗 Global Direct", "🇭🇰Hong Kong", "🇯🇵Japan", "🇰🇷Korea", "🇸🇬Singapore", "🇨🇳Taiwan", "🇺🇸United States", "🇬🇧United Kingdom"],
"include-all": true,
"icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/microsoft.svg"
},
{
...groupBaseOption,
"name": "📹 Youtube",
"type": "select",
"proxies": ["⚙️ Node Select", "♻️ Latency Tuning", "🚑 Fallback", "⚖️ Load Balance(Hashing)", "☁️ Load Balance(Round Robin)", "🔗 Global Direct", "🇭🇰Hong Kong", "🇯🇵Japan", "🇰🇷Korea", "🇸🇬Singapore", "🇨🇳Taiwan", "🇺🇸United States", "🇬🇧United Kingdom"],
"include-all": true,
"icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/youtube.svg"
},
{
...groupBaseOption,
"name": "🎥 Netflix",
"type": "select",
"proxies": ["⚙️ Node Select", "♻️ Latency Tuning", "🚑 Fallback", "⚖️ Load Balance(Hashing)", "☁️ Load Balance(Round Robin)", "🔗 Global Direct", "🇭🇰Hong Kong", "🇯🇵Japan", "🇰🇷Korea", "🇸🇬Singapore", "🇨🇳Taiwan", "🇺🇸United States", "🇬🇧United Kingdom"],
"include-all": true,
"icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/netflix.svg"
},
{
...groupBaseOption,
"name": "📺 Bahamut",
"type": "select",
"proxies": ["⚙️ Node Select", "♻️ Latency Tuning", "🚑 Fallback", "⚖️ Load Balance(Hashing)", "☁️ Load Balance(Round Robin)", "🔗 Global Direct", "🇭🇰Hong Kong", "🇯🇵Japan", "🇰🇷Korea", "🇸🇬Singapore", "🇨🇳Taiwan", "🇺🇸United States", "🇬🇧United Kingdom"],
"include-all": true,
"icon": "https://www.gamer.com.tw/favicon.ico"
},
{
...groupBaseOption,
"name": "📺 Abema",
"type": "select",
"proxies": ["⚙️ Node Select", "♻️ Latency Tuning", "🚑 Fallback", "⚖️ Load Balance(Hashing)", "☁️ Load Balance(Round Robin)", "🔗 Global Direct", "🇭🇰Hong Kong", "🇯🇵Japan", "🇰🇷Korea", "🇸🇬Singapore", "🇨🇳Taiwan", "🇺🇸United States", "🇬🇧United Kingdom"],
"include-all": true,
"icon": "https://abema.tv/favicon.ico"
},
{
...groupBaseOption,
"name": "📺 BilibiliHMT",
"type": "select",
"proxies": ["⚙️ Node Select", "♻️ Latency Tuning", "🚑 Fallback", "⚖️ Load Balance(Hashing)", "☁️ Load Balance(Round Robin)", "🔗 Global Direct", "🇭🇰Hong Kong", "🇯🇵Japan", "🇰🇷Korea", "🇸🇬Singapore", "🇨🇳Taiwan", "🇺🇸United States", "🇬🇧United Kingdom"],
"include-all": true,
"icon": "https://bilibili.com/favicon.ico"
},
{
...groupBaseOption,
"name": "🎮 Steam",
"type": "select",
"proxies": ["🔗 Global Direct", "⚙️ Node Select", "♻️ Latency Tuning", "🚑 Fallback", "⚖️ Load Balance(Hashing)", "☁️ Load Balance(Round Robin)", "🇭🇰Hong Kong", "🇯🇵Japan", "🇰🇷Korea", "🇸🇬Singapore", "🇨🇳Taiwan", "🇺🇸United States", "🇬🇧United Kingdom"],
"include-all": true,
"icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/steam.svg"
},
{
...groupBaseOption,
"url": "https://chatgpt.com",
"expected-status": "200",
"name": "💸 ChatGPT",
"type": "select",
"proxies": ["⚙️ Node Select", "♻️ Latency Tuning", "🚑 Fallback", "⚖️ Load Balance(Hashing)", "☁️ Load Balance(Round Robin)", "🔗 Global Direct", "🇭🇰Hong Kong", "🇯🇵Japan", "🇰🇷Korea", "🇸🇬Singapore", "🇨🇳Taiwan", "🇺🇸United States", "🇬🇧United Kingdom"],
"include-all": true,
"exclude-filter": "(?i)港|hk|hongkong|hong kong|俄|ru|russia|澳|macao",
"icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/chatgpt.svg"
},
{
...groupBaseOption,
"name": "🍎 iCloud",
"type": "select",
"proxies": ["⚙️ Node Select", "🔗 Global Direct", "♻️ Latency Tuning", "🚑 Fallback", "⚖️ Load Balance(Hashing)", "☁️ Load Balance(Round Robin)", "🇭🇰Hong Kong", "🇯🇵Japan", "🇰🇷Korea", "🇸🇬Singapore", "🇨🇳Taiwan", "🇺🇸United States", "🇬🇧United Kingdom"],
"include-all": true,
"icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/apple.svg"
},
{
...groupBaseOption,
"name": "🍎 Apple",
"type": "select",
"proxies": ["⚙️ Node Select", "♻️ Latency Tuning", "🚑 Fallback", "⚖️ Load Balance(Hashing)", "☁️ Load Balance(Round Robin)", "🔗 Global Direct", "🇭🇰Hong Kong", "🇯🇵Japan", "🇰🇷Korea", "🇸🇬Singapore", "🇨🇳Taiwan", "🇺🇸United States", "🇬🇧United Kingdom"],
"include-all": true,
"icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/apple.svg"
},
{
...groupBaseOption,
"name": "🥰 AdBlock",
"type": "select",
"proxies": ["REJECT", "DIRECT"],
"icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/bug.svg"
},
{
...groupBaseOption,
"name": "🔗 Global Direct",
"type": "select",
"proxies": ["DIRECT", "⚙️ Node Select", "♻️ Latency Tuning", "🚑 Fallback", "⚖️ Load Balance(Hashing)", "☁️ Load Balance(Round Robin)", "🇭🇰Hong Kong", "🇯🇵Japan", "🇰🇷Korea", "🇸🇬Singapore", "🇨🇳Taiwan", "🇺🇸United States", "🇬🇧United Kingdom"],
"include-all": true,
"icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/link.svg"
},
{
...groupBaseOption,
"name": "❌ Global Reject",
"type": "select",
"proxies": ["REJECT", "DIRECT"],
"icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/block.svg"
},
{
...groupBaseOption,
"name": "🐬 Custom Direct",
"type": "select",
"proxies": ["🔗 Global Direct", "⚙️ Node Select", "♻️ Latency Tuning", "🚑 Fallback", "⚖️ Load Balance(Hashing)", "☁️ Load Balance(Round Robin)", "🇭🇰Hong Kong", "🇯🇵Japan", "🇰🇷Korea", "🇸🇬Singapore", "🇨🇳Taiwan", "🇺🇸United States", "🇬🇧United Kingdom"],
"icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/unknown.svg"
},
{
...groupBaseOption,
"name": "🐳 Custom Proxy",
"type": "select",
"include-all": true,
"proxies": ["⚙️ Node Select", "♻️ Latency Tuning", "🚑 Fallback", "⚖️ Load Balance(Hashing)", "☁️ Load Balance(Round Robin)", "🔗 Global Direct", "🇭🇰Hong Kong", "🇯🇵Japan", "🇰🇷Korea", "🇸🇬Singapore", "🇨🇳Taiwan", "🇺🇸United States", "🇬🇧United Kingdom"],
"icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/openwrt.svg"
},
{
...groupBaseOption,
"name": "🐟 Others",
"type": "select",
"proxies": ["⚙️ Node Select", "♻️ Latency Tuning", "🚑 Fallback", "⚖️ Load Balance(Hashing)", "☁️ Load Balance(Round Robin)", "🔗 Global Direct", "🇭🇰Hong Kong", "🇯🇵Japan", "🇰🇷Korea", "🇸🇬Singapore", "🇨🇳Taiwan", "🇺🇸United States", "🇬🇧United Kingdom"],
"include-all": true,
"icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/fish.svg"
}
];
// 覆盖原配置中的规则
config["rule-providers"] = ruleProviders;
config["rules"] = rules;
config["proxies"].forEach(proxy => {
// 为每个节点设置 udp = true
proxy.udp = true
})
// 返回修改后的配置
return config;
}
你是否好奇过,当你点击一个 YouTube 视频时,数据包是如何通过代理服务器传输的?或者为什么有时候某些网站特别慢,而换个节点就变快了?这篇文章将为你揭开 Clash 配置文件的神秘面纱,用最通俗的语言解释它是如何工作的。
我们会按照以下顺序,循序渐进地了解整个过程:
- 配置文件是什么,它在整个代理过程中扮演什么角色
- 如何从订阅链接获取可用的代理服务器
- DNS 配置如何帮助你更快地访问网站
- 规则如何决定你的访问请求走什么路径
- 代理组是如何管理和分发节点的
- 实际案例:访问 YouTube 的全过程
Clash 配置文件详解:从订阅节点到转发 YouTube 流量
想象一下,配置文件就像是一本”说明书”,它告诉 Clash 该如何处理你的网络请求:该用哪个服务器、要不要加速、是否要绕过某些网站等。本文将带你一步步理解这本”说明书”的内容,让你明白当你浏览网页时,数据包是如何被智能处理的。
1. 配置文件整体介绍
如果把 Clash 比作一个快递公司,那么这份配置文件就是快递分拣的规则手册。它告诉快递员(Clash):
- 这个包裹(网络请求)要送到哪里
- 用什么路线最快(代理节点)
- 特殊包裹要如何处理(规则)
- 在哪些情况下需要绕路(分流)
这份配置文件使用 JavaScript 编写,主要完成以下工作:
- 检查你是否有可用的快递员(代理节点)
- 设置导航系统(DNS 配置)
- 制定派送路线(规则集和规则)
- 组建快递小组(代理组)
- 确保所有快递员都能处理特殊包裹(UDP 设置)
2. 如何获取订阅链接中的节点
订阅链接就像是一份快递员名单,里面包含了所有可以帮你送货的快递员信息(服务器地址、端口等)。当你在 Clash 中输入这个链接时,它会自动解析出所有可用的快递员。
让我们看看配置文件是如何处理这个名单的:
const proxyCount = config?.proxies?.length ?? 0;
const proxyProviderCount = typeof config?.["proxy-providers"] === "object" ? Object.keys(config["proxy-providers"]).length : 0;
if (proxyCount === 0 && proxyProviderCount === 0) {
throw new Error("配置文件中未找到任何代理");
}
这段代码就是在检查:
- 是否有直接可用的快递员(proxies)
- 是否有可以联系到的快递公司(proxy-providers)
- 如果两个都没有,就报错说”没有找到快递员”
当你导入订阅链接后,这些节点会被自动分配到不同的快递小组中(代理组)。配置文件中的 include-all: true
表示所有快递员都可以加入对应的小组。
3. DNS 配置与网站识别:以 YouTube 为例
DNS 是什么?
DNS(域名解析系统)就像是互联网世界的”导航地图”。当你想访问一个网站时,DNS 会告诉你这个网站具体在哪里(IP地址)。
为什么需要特别配置 DNS?
想象你要寄两个包裹:
- 一个寄往北京(国内网站)
- 一个寄往纽约(国外网站)
你会发现:
- 问国内快递员北京地址 → 准确快速
- 问国内快递员纽约地址 → 可能不准确或找不到
所以我们需要:
- 国内地址 → 问国内快递员
- 国外地址 → 问国际快递员
DNS 配置示例
dns:
enable: true
enhanced-mode: "fake-ip"
nameserver: # 国内 DNS 服务器
- https://dns.alidns.com/dns-query # 阿里 DNS
- https://doh.pub/dns-query # DNSPod DNS
fallback: # 国外 DNS 服务器
- https://1.1.1.1/dns-query # Cloudflare DNS
- https://9.9.9.9/dns-query # Quad9 DNS
fallback-filter: # 识别规则
geoip: true # 使用地理位置数据库
ipcidr: # IP 地址范围
- 240.0.0.0/4
如何识别国内外网站?
以访问 YouTube 为例,让我们看看完整的识别和解析过程:
- 域名规则匹配
rules:
- DOMAIN-SUFFIX,youtube.com,📹 Youtube
- DOMAIN-SUFFIX,googlevideo.com,📹 Youtube
- Clash 发现访问的是 youtube.com
- 匹配到上述规则,确定是 YouTube 服务
- 规则集验证
rule-providers:
youtube:
type: http
behavior: domain
url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/youtube.txt"
- 查询规则集确认这是 YouTube 相关域名
- 规则集中包含了完整的 YouTube 域名列表
- GeoSite 数据库查询
rules:
- GEOSITE,youtube,📹 Youtube
- 通过 GeoSite 数据库再次确认
- 数据库显示这是国外网站
- 选择合适的 DNS
- 因为确定是国外网站
- 使用 fallback 中的国外 DNS(1.1.1.1 或 9.9.9.9)
- 避免使用可能被污染的国内 DNS
实际工作流程
当你在浏览器输入 youtube.com 时:
请求捕获
- Clash 截获访问请求
- 提取域名 youtube.com
网站识别
- 通过规则匹配识别为 YouTube
- 确定是国外网站
- 需要使用代理访问
DNS 解析
- 自动切换到国外 DNS(如 Cloudflare 1.1.1.1)
- 获取 YouTube 的真实 IP 地址
- 避免 DNS 污染问题
建立连接
- 使用解析到的 IP 地址
- 通过选定的代理节点访问
这样的设计确保了:
- 国内网站用国内 DNS → 访问更快
- 国外网站用国外 DNS → 解析更准确
- 自动识别和切换 → 体验更流畅
就像有两个导航系统:
- 国内导航 → 熟悉国内的路
- 国外导航 → 了解国外的路
- 系统自动选择合适的导航 → 永远不会迷路
4. 规则集和规则:如何让 Clash 知道该走哪条路
想象一下,Clash 就像一个智能的交通指挥官,需要知道不同的网站该走什么路。规则集就是他手中的”指挥手册”,告诉他该如何分配这些网络流量。
规则集是什么?
简单来说,规则集就是一个清单,告诉 Clash:
- 哪些网站需要代理(比如 YouTube、Google)
- 哪些网站直接访问(比如淘宝、百度)
- 每个网站该使用什么样的连接方式
就像快递公司的分拣指南:
- 国内包裹走普通快递
- 国际包裹走国际快递
- 特殊物品走特殊渠道
规则集是如何工作的?
配置文件通过 ruleProviders
来管理这些规则集:
// 以 YouTube 为例
"RULE-SET,youtube,📹 Youtube,no-resolve"
这行配置的意思是:
- 发现 YouTube 相关的网址
- 交给 ”📹 Youtube” 这个代理组处理
- 不需要额外的地址解析(no-resolve)
为什么要这样设计?
这种设计有几个好处:
自动更新
- 规则集会定期从网上下载最新版本
- 就像导航软件会更新最新的路况信息
模块化管理
- 不同类型的网站有不同的规则集
- 就像快递公司对不同类型的包裹有不同的处理方式
便于维护
- 规则变化时只需更新规则集
- 用户不需要手动修改配置
实际工作流程
当你访问 YouTube 时:
识别网站
- Clash 看到你访问的是 youtube.com
- 查找规则集,发现这是 YouTube 相关网站
选择路线
- 根据规则找到对应的代理组(📹 Youtube)
- 在代理组中选择合适的节点
建立连接
- 通过选定的节点访问 YouTube
- 确保视频能够流畅播放
就像快递系统:
- 收到包裹(网络请求)
- 查看目的地(网站域名)
- 选择合适的快递员(代理节点)
- 送达目的地(访问网站)
5. 代理组:Clash 的智能调度系统
代理组就像是不同的快递小组,每个小组都有自己的特长:
手动选择组(select 类型)
- 自己选择想用的节点
- 就像指定特定的快递员
自动测速组(url-test 类型)
- 自动选择最快的节点
- 就像系统自动分配最空闲的快递员
故障转移组(fallback 类型)
- 当前节点出问题自动换下一个
- 就像快递员请假有替补上岗
负载均衡组(load-balance 类型)
- 在多个节点之间分配流量
- 就像多个快递员合作送同一个区域
每个代理组都可以设置:
- 包含哪些节点(proxies)
- 是否包含所有节点(include-all)
- 使用什么策略(type)
这样的设计确保了:
- 网络访问稳定可靠
- 自动选择最佳路线
- 出现问题能够自动处理
6. 流量转发全过程:当你点开 YouTube 视频时发生了什么?
让我们通过实际的配置代码,一步步看看当你访问 YouTube 时,Clash 是如何工作的。
第一步:DNS 解析
首先看看 DNS 配置:
// 国外DNS服务器
const foreignNameservers = [
"https://1.1.1.1/dns-query", // CloudflareDNS
"https://9.9.9.9/dns-query" // Quad9DNS
];
当你输入 youtube.com 时:
- Clash 捕获到这个域名
- 发现是国外网站,使用 foreignNameservers
- 通过 CloudflareDNS 或 Quad9DNS 解析出真实 IP
这就像在国外找房子,要问当地的人才知道准确地址。
第二步:规则匹配
看看 YouTube 的规则配置:
{
...groupBaseOption,
"name": "📹 Youtube",
"type": "select",
"proxies": ["⚙️ Node Select", "♻️ Latency Tuning", "🚑 Fallback", "⚖️ Load Balance(Hashing)", "☁️ Load Balance(Round Robin)", "🔗 Global Direct", "🇭🇰Hong Kong", "🇯🇵Japan", "🇰🇷Korea", "🇸🇬Singapore", "🇨🇳Taiwan", "🇺🇸United States", "🇬🇧United Kingdom"],
"include-all": true,
"icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/youtube.svg"
}
节点选择过程:
- 可以手动选择特定地区节点
- 或使用自动策略:
- ♻️ 自动选择延迟最低的节点
- 🚑 当前节点故障自动切换
- ⚖️ 在多个节点间平衡分配
就像有多个快递员,可以:
- 指定特定快递员送货
- 让系统自动选择最快的
- 或者多个快递员轮流送
第四步:流量转发
最后看看节点配置:
config["proxies"].forEach(proxy => {
// 为每个节点设置 udp = true
proxy.udp = true
})
转发过程:
- 选定节点后,建立连接
- 开启 UDP 支持,确保视频流畅
- 通过节点访问 YouTube 服务器
- 将视频数据返回给你
就像快递员:
- 拿到包裹(你的请求)
- 选择最佳路线(代理节点)
- 送到目的地(YouTube 服务器)
- 把货物(视频数据)带回来
整个过程总结
当你想看 YouTube 视频时:
- 输入网址 → DNS 解析获取真实地址
- 规则匹配 → 确定使用 YouTube 代理组
- 代理选择 → 找到最适合的节点
- 流量转发 → 通过节点访问视频
所有这些都是自动完成的,你只需要:
- 打开浏览器
- 输入 YouTube 网址
- 享受流畅的视频体验
这就是一个优秀的代理配置系统应该做到的:把复杂的事情变得简单,让用户专注于使用体验。
总结
整个配置文件的作用可以归纳为:
- 检查是否正确导入了订阅节点(这些节点保存于 config.proxies 或 proxy-providers 中)。
- 配置 DNS,确保国内外域名解析走不同的服务器,增强解析准确性和绕过污染。
- 定义规则集以及具体规则,将各类网站(如 Google、YouTube、Netflix 等)按类别匹配到不同的代理组。
- 定义代理组,通过手动选择、自动检测、负载均衡等策略,把所有订阅的节点分组,用户(或者规则)选择合适的节点。
- 在访问 YouTube 时,Clash 通过 DNS 解析、规则匹配、模块化代理组选择,将数据流量转发到一个经过挑选的节点上,实现无障碍访问。
通过这份配置文件,你不仅学会了如何导入和使用订阅链接中的节点,还能根据实际需要制定不同的规则和代理组,实现对流量的智能分流。希望这篇文章能帮助你更好地理解和使用 Clash 的配置。