-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathClashScript.js
More file actions
172 lines (153 loc) · 9.59 KB
/
ClashScript.js
File metadata and controls
172 lines (153 loc) · 9.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
/**
* @file Minimalist Clash Meta Configuration
* @version 2.3.0 (Defensive & Documented Edition)
* @description 专为自建节点设计的极简防漏方案。提供物理级 WebRTC 阻断、BT 流量隔离及极致的路由性能。
* @author [ForestSun2023/Clash-Merge-Script]
* @license MIT
*/
function main(config) {
// ===========================================================================
// [0] 防御性编程 (Defensive Programming)
// ===========================================================================
// 拦截上游客户端可能传入的异常数据,确保引擎绝对不会崩溃闪退
if (!config) config = {};
if (typeof config !== 'object') config = {};
// 安全保留上游真实节点,防止覆写时丢失
config.proxies = config.proxies || [];
config['proxy-groups'] = config['proxy-groups'] || [];
config['rule-providers'] = config['rule-providers'] || {};
config.rules = config.rules || [];
// ===========================================================================
// [1] Core System Settings (内核基础引擎配置)
// ===========================================================================
const baseSettings = {
'mode': 'rule',
'log-level': 'silent', // [Performance] 保持静默,大幅减少磁盘 I/O 写入开销
'ipv6': false, // [Network] 强制关闭 IPv6,彻底杜绝双栈环境下的真实 IP 泄露与特定宽带断流问题
'allow-lan': false, // [Security] 禁用局域网共享,防止内网其他设备未经授权的白嫖或恶意探测
'unified-delay': true, // [UX] 统一延迟计算,使测速结果更贴近真实的体感网络延迟
'tcp-concurrent': false, // [Security] 保持关闭。开启虽能加速首屏,但极易被 Cloudflare 等 CDN 判定为 CC 攻击特征
'find-process-mode': 'strict' // [Security] 启用严格进程查询,这是实现精准拦截 BT/PT 下载软件的前提
};
// ===========================================================================
// [2] TUN Interface & DNS Hijacking (虚拟网卡与流量劫持)
// ===========================================================================
const tunSettings = {
'enable': true,
'stack': 'Mixed', // [Compatibility] 使用 Mixed 栈,兼顾 System 的稳定与 gVisor 的全面
'auto-route': true,
'auto-detect-interface': true, // [Network] 自动识别出口网卡,适应经常切换 Wi-Fi/有线的移动办公场景
'dns-hijack': [
'any:53',
'tcp://any:53' // [Security] 补全 TCP 53 端口劫持,封死某些应用试图通过 TCP 绕过 DNS 审查的漏洞
]
};
// ===========================================================================
// [3] Traffic Sniffer (应用层流量特征嗅探)
// ===========================================================================
const snifferSettings = {
'enable': true,
'force-dns-mapping': true, // [Performance] 强制反推域名,减少不必要的远端 DNS 二次解析
'parse-pure-ip': true,
'sniff': {
'HTTP': { 'ports': ['80', '8080-8880'] },
'TLS': { 'ports': ['443', '8443'] },
'QUIC': { 'ports': ['443', '8443'] }
}
};
// ===========================================================================
// [4] Advanced DNS Strategy (高阶防污染 DNS 架构)
// ===========================================================================
const dnsSettings = {
'enable': true,
'ipv6': false,
'use-hosts': false,
'enhanced-mode': 'redir-host', // [Architecture] 坚守 redir-host 模式,确保 BT Tracker 能够获取真实 IP 以维持 P2P 隔离网的正常运作
'fake-ip-filter': ['*.lan', '*.localdomain', '*.localhost', '*.home.arpa'],
// [Anti-Deadlock] 专用于解析代理节点域名的加密 DNS,防止冷启动时“无网无法解析,不解析无法联网”的死锁
'proxy-server-nameserver': [
'https://223.5.5.5/dns-query',
'https://doh.pub/dns-query'
],
// [Routing] 默认外网解析:交由远端节点使用 Google DNS 处理,保障解析结果为纯净的海外 IP
'nameserver': ['tls://8.8.8.8#🚀 节点选择'],
// [Routing] 策略分流解析:国内域名走阿里 DoH 直连,海外域名走代理节点
'nameserver-policy': {
'rule-set:GEOSITE-CN': 'https://223.5.5.5/dns-query#🎯 全球直连',
'rule-set:geolocation-!cn': 'tls://8.8.8.8#🚀 节点选择'
}
};
// ===========================================================================
// [5] Binary Rule Providers (二进制高性能规则集)
// ===========================================================================
// 使用 .mrs 二进制格式替代传统 .yaml 文本,实测规则加载与匹配速度提升约 5 倍
const ruleProviders = {
'google': { type: 'http', behavior: 'domain', format: 'mrs', interval: 86400, url: 'https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@meta/geo/geosite/google.mrs' },
'category-ads-all': { type: 'http', behavior: 'domain', format: 'mrs', interval: 86400, url: 'https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@meta/geo/geosite/category-ads-all.mrs' },
'GEOIP-Private': { type: 'http', behavior: 'ipcidr', format: 'mrs', interval: 86400, url: 'https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@meta/geo/geoip/private.mrs' },
'GEOIP-CN': { type: 'http', behavior: 'ipcidr', format: 'mrs', interval: 86400, url: 'https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@meta/geo/geoip/cn.mrs' },
'GEOSITE-Private': { type: 'http', behavior: 'domain', format: 'mrs', interval: 86400, url: 'https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@meta/geo/geosite/private.mrs' },
'GEOSITE-CN': { type: 'http', behavior: 'domain', format: 'mrs', interval: 86400, url: 'https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@meta/geo/geosite/cn.mrs' },
'geolocation-!cn': { type: 'http', behavior: 'domain', format: 'mrs', interval: 86400, url: 'https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@meta/geo/geosite/geolocation-!cn.mrs' }
};
// ===========================================================================
// [6] Proxy Groups (极简策略组)
// ===========================================================================
const proxyGroups = [
{ name: '🚀 节点选择', type: 'select', 'include-all': true, proxies: ['🎈 自动选择'] },
{ name: '🎈 自动选择', type: 'url-test', 'include-all': true, url: 'https://www.gstatic.com/generate_204', interval: 300, tolerance: 150 },
{ name: '🎯 全球直连', type: 'select', proxies: ['DIRECT', 'REJECT'] },
{ name: '🛑 全球拦截', type: 'select', proxies: ['REJECT', 'DIRECT'] },
{ name: '🐟 漏网之鱼', type: 'select', proxies: ['🚀 节点选择', '🎯 全球直连'] }
];
// ===========================================================================
// [7] Routing Rules (核心路由分配逻辑)
// ===========================================================================
// 匹配引擎自上而下执行,顺序至关重要
const rules = [
// ---------------------------------------------------------
// 阶段一:高危资产保护 (VPS Protection & Privacy)
// ---------------------------------------------------------
// [DMCA-Block] 精准识别 P2P 软件进程与端口,强制直连,保护 VPS 不被版权警告封杀
"PROCESS-NAME,qBittorrent,🎯 全球直连",
"PROCESS-NAME,BitComet,🎯 全球直连",
"PROCESS-NAME,Thunder,🎯 全球直连",
"AND,((NETWORK,udp),(DST-PORT,6881-6889)),🎯 全球直连",
// [WebRTC-Block] 物理级阻断 STUN 协议的核心端口,实现浏览器 IP 零泄露
"AND,((NETWORK,udp),(DST-PORT,3478)),🛑 全球拦截",
"AND,((NETWORK,udp),(DST-PORT,19302)),🛑 全球拦截",
"AND,((NETWORK,udp),(DST-PORT,5349)),🛑 全球拦截",
"AND,((DST-PORT,443),(NETWORK,udp)),🛑 全球拦截",
// ---------------------------------------------------------
// 阶段二:应用层功能修复与净化 (Functionality)
// ---------------------------------------------------------
"RULE-SET,google,🚀 节点选择",
"RULE-SET,category-ads-all,🛑 全球拦截",
// ---------------------------------------------------------
// 阶段三:基于域名的极速分流 (Domain Routing)
// ---------------------------------------------------------
// 优先匹配域名,避免触发耗时的底层 IP 解析与运算
"RULE-SET,GEOSITE-Private,🎯 全球直连",
"RULE-SET,GEOSITE-CN,🎯 全球直连",
"RULE-SET,geolocation-!cn,🚀 节点选择",
// ---------------------------------------------------------
// 阶段四:基于 IP 的兜底分流 (IP Routing)
// ---------------------------------------------------------
// 配合 no-resolve 参数使用,遇到纯域名请求时直接跳过,防止产生数百毫秒的无效 DNS 阻塞
"RULE-SET,GEOIP-Private,🎯 全球直连,no-resolve",
"RULE-SET,GEOIP-CN,🎯 全球直连,no-resolve",
// 未知流量归宿
"MATCH,🐟 漏网之鱼"
];
// ===========================================================================
// 配置合并与导出
// ===========================================================================
Object.assign(config, baseSettings);
config['tun'] = tunSettings;
config['sniffer'] = snifferSettings;
config['dns'] = dnsSettings;
config['rule-providers'] = ruleProviders;
config['proxy-groups'] = proxyGroups;
config['rules'] = rules;
return config;
}