@@ -71,13 +71,6 @@ export const UNIFIED_RULES = [
71
71
site_rules : [ 'apple' ] ,
72
72
ip_rules : [ ]
73
73
} ,
74
- {
75
- name : 'Bahamut' ,
76
- outbound : '🎮 巴哈姆特' ,
77
- site_rules : [ 'bahamut' ] ,
78
- ip_rules : [ ]
79
- } ,
80
-
81
74
{
82
75
name : 'Social Media' ,
83
76
outbound : '🌐 社交媒体' ,
@@ -87,7 +80,7 @@ export const UNIFIED_RULES = [
87
80
{
88
81
name : 'Streaming' ,
89
82
outbound : '🎬 流媒体' ,
90
- site_rules : [ 'netflix' , 'hulu' , 'disney' , 'hbo' , 'amazon' ] ,
83
+ site_rules : [ 'netflix' , 'hulu' , 'disney' , 'hbo' , 'amazon' , 'bahamut' ] ,
91
84
ip_rules : [ ]
92
85
} ,
93
86
{
@@ -113,13 +106,19 @@ export const UNIFIED_RULES = [
113
106
outbound : '☁️ 云服务' ,
114
107
site_rules : [ 'aws' , 'azure' , 'digitalocean' , 'heroku' , 'dropbox' ] ,
115
108
ip_rules : [ ]
109
+ } ,
110
+ {
111
+ name : 'Non-China' ,
112
+ outbound : '🌐 非中国' ,
113
+ site_rules : [ 'geolocation-!cn' ] ,
114
+ ip_rules : [ ]
116
115
}
117
116
118
117
] ;
119
118
120
119
export const PREDEFINED_RULE_SETS = {
121
- minimal : [ 'Location:CN' , 'Private' ] ,
122
- balanced : [ 'Location:CN' , 'Private' , 'Google' , 'Youtube' , 'AI Services' , 'Telegram' ] ,
120
+ minimal : [ 'Location:CN' , 'Private' , 'Non-China' ] ,
121
+ balanced : [ 'Location:CN' , 'Private' , 'Non-China' , ' Google', 'Youtube' , 'AI Services' , 'Telegram' ] ,
123
122
comprehensive : UNIFIED_RULES . map ( rule => rule . name )
124
123
} ;
125
124
@@ -242,9 +241,19 @@ export function generateRuleSets(selectedRules = [], customRules = []) {
242
241
type : 'remote' ,
243
242
format : 'binary' ,
244
243
url : `${ IP_RULE_SET_BASE_URL } ${ IP_RULE_SETS [ rule ] } ` ,
245
- download_detour : '⚡ 自动选择'
244
+ download_detour : '⚡ 自动选择'
246
245
} ) ) ;
247
246
247
+ if ( ! selectedRules . includes ( 'Non-China' ) ) {
248
+ site_rule_sets . push ( {
249
+ tag : 'geolocation-!cn' ,
250
+ type : 'remote' ,
251
+ format : 'binary' ,
252
+ url : `${ SITE_RULE_SET_BASE_URL } geosite-geolocation-!cn.srs` ,
253
+ download_detour : '⚡ 自动选择'
254
+ } ) ;
255
+ }
256
+
248
257
if ( customRules ) {
249
258
customRules . forEach ( rule => {
250
259
if ( rule . site != '' ) {
@@ -281,23 +290,75 @@ export function generateRuleSets(selectedRules = [], customRules = []) {
281
290
export const SING_BOX_CONFIG = {
282
291
dns : {
283
292
servers : [
284
- { tag : 'dns_proxy' , address : 'tls://1.1.1.1' , address_resolver : 'dns_resolver' } ,
285
- { tag : 'dns_direct' , address : 'h3://dns.alidns.com/dns-query' , address_resolver : 'dns_resolver' , detour : 'DIRECT' } ,
286
- { tag : 'dns_fakeip' , address : 'fakeip' } ,
287
- { tag : 'dns_resolver' , address : '223.5.5.5' , detour : 'DIRECT' } ,
288
- { tag : 'dns_block' , address : 'rcode://success' }
293
+ {
294
+ tag : "dns_proxy" ,
295
+ address : "tcp://1.1.1.1" ,
296
+ address_resolver : "dns_resolver" ,
297
+ strategy : "ipv4_only" ,
298
+ detour : "🚀 节点选择"
299
+ } ,
300
+ {
301
+ tag : "dns_direct" ,
302
+ address : "https://dns.alidns.com/dns-query" ,
303
+ address_resolver : "dns_resolver" ,
304
+ strategy : "ipv4_only" ,
305
+ detour : "DIRECT"
306
+ } ,
307
+ {
308
+ tag : "dns_resolver" ,
309
+ address : "223.5.5.5" ,
310
+ detour : "DIRECT"
311
+ } ,
312
+ {
313
+ tag : "dns_success" ,
314
+ address : "rcode://success"
315
+ } ,
316
+ {
317
+ tag : "dns_refused" ,
318
+ address : "rcode://refused"
319
+ } ,
320
+ {
321
+ tag : "dns_fakeip" ,
322
+ address : "fakeip"
323
+ }
289
324
] ,
290
325
rules : [
291
- { outbound : [ 'any' ] , server : 'dns_resolver' } ,
292
- { geosite : [ 'category-ads-all' ] , server : 'dns_block' , disable_cache : true } ,
293
- { geosite : [ 'geolocation-!cn' ] , query_type : [ 'A' , 'AAAA' ] , server : 'dns_fakeip' } ,
294
- { geosite : [ 'geolocation-!cn' ] , server : 'dns_proxy' }
326
+ {
327
+ outbound : "any" ,
328
+ server : "dns_resolver"
329
+ } ,
330
+ {
331
+ rule_set : "geolocation-!cn" ,
332
+ query_type : [
333
+ "A" ,
334
+ "AAAA"
335
+ ] ,
336
+ server : "dns_fakeip"
337
+ } ,
338
+ {
339
+ rule_set : "geolocation-!cn" ,
340
+ query_type : [
341
+ "CNAME"
342
+ ] ,
343
+ server : "dns_proxy"
344
+ } ,
345
+ {
346
+ query_type : [
347
+ "A" ,
348
+ "AAAA" ,
349
+ "CNAME"
350
+ ] ,
351
+ invert : true ,
352
+ server : "dns_refused" ,
353
+ disable_cache : true
354
+ }
295
355
] ,
296
- final : ' dns_direct' ,
356
+ final : " dns_direct" ,
297
357
independent_cache : true ,
298
358
fakeip : {
299
359
enabled : true ,
300
- inet4_range : '198.18.0.0/15'
360
+ inet4_range : "198.18.0.0/15" ,
361
+ inet6_range : "fc00::/18"
301
362
}
302
363
} ,
303
364
ntp : {
@@ -317,6 +378,20 @@ export const SING_BOX_CONFIG = {
317
378
{ type : 'dns' , tag : 'dns-out' }
318
379
] ,
319
380
route : {
381
+ "rule_set" : [
382
+ {
383
+ "tag" : "geosite-geolocation-!cn" ,
384
+ "type" : "local" ,
385
+ "format" : "binary" ,
386
+ "path" : "geosite-geolocation-!cn.srs"
387
+ }
388
+ ] ,
389
+ rules : [
390
+ {
391
+ "outbound" : "any" ,
392
+ "server" : "dns_resolver"
393
+ }
394
+ ]
320
395
} ,
321
396
experimental : {
322
397
cache_file : {
0 commit comments