mirror of
https://github.com/SukkaW/Surge.git
synced 2025-12-12 09:10:35 +08:00
Perf: smaller local dns mapping
This commit is contained in:
parent
3bc4e69f35
commit
5f027572cf
@ -12,19 +12,28 @@ import { appendArrayInPlace } from './lib/append-array-in-place';
|
||||
import { OUTPUT_INTERNAL_DIR, OUTPUT_MODULES_DIR, SOURCE_DIR } from './constants/dir';
|
||||
import { RulesetOutput } from './lib/create-file';
|
||||
|
||||
const getRule = (domain: string) => {
|
||||
switch (domain[0]) {
|
||||
case '+':
|
||||
case '$':
|
||||
return `DOMAIN-SUFFIX,${domain.slice(1)}`;
|
||||
default:
|
||||
return `DOMAIN-SUFFIX,${domain}`;
|
||||
}
|
||||
};
|
||||
export const getDomesticAndDirectDomainsRulesetPromise = createMemoizedPromise(async () => {
|
||||
const domestics = await readFileIntoProcessedArray(path.join(SOURCE_DIR, 'non_ip/domestic.conf'));
|
||||
const directs = await readFileIntoProcessedArray(path.resolve(SOURCE_DIR, 'non_ip/direct.conf'));
|
||||
const lans: string[] = [];
|
||||
|
||||
Object.entries(DOMESTICS).forEach(([, { domains }]) => {
|
||||
appendArrayInPlace(domestics, domains.map((domain) => `DOMAIN-SUFFIX,${domain}`));
|
||||
appendArrayInPlace(domestics, domains.map(getRule));
|
||||
});
|
||||
Object.entries(DIRECTS).forEach(([, { domains }]) => {
|
||||
appendArrayInPlace(directs, domains.map((domain) => `DOMAIN-SUFFIX,${domain}`));
|
||||
appendArrayInPlace(directs, domains.map(getRule));
|
||||
});
|
||||
Object.entries(LANS).forEach(([, { domains }]) => {
|
||||
appendArrayInPlace(lans, domains.map((domain) => `DOMAIN-SUFFIX,${domain}`));
|
||||
appendArrayInPlace(lans, domains.map(getRule));
|
||||
});
|
||||
|
||||
return [domestics, directs, lans] as const;
|
||||
@ -74,10 +83,22 @@ export const buildDomesticRuleset = task(require.main === module, __filename)(as
|
||||
'[Host]',
|
||||
...dataset.flatMap(([, { domains, dns, hosts }]) => [
|
||||
...Object.entries(hosts).flatMap(([dns, ips]: [dns: string, ips: string[]]) => `${dns} = ${ips.join(', ')}`),
|
||||
...domains.flatMap((domain) => [
|
||||
`${domain} = server:${dns}`,
|
||||
`*.${domain} = server:${dns}`
|
||||
])
|
||||
...domains.flatMap((domain) => {
|
||||
if (domain[0] === '$') {
|
||||
return [
|
||||
`${domain.slice(1)} = server:${dns}`
|
||||
];
|
||||
}
|
||||
if (domain[0] === '+') {
|
||||
return [
|
||||
`*.${domain.slice(1)} = server:${dns}`
|
||||
];
|
||||
}
|
||||
return [
|
||||
`${domain} = server:${dns}`,
|
||||
`*.${domain} = server:${dns}`
|
||||
];
|
||||
})
|
||||
])
|
||||
],
|
||||
path.resolve(OUTPUT_MODULES_DIR, 'sukka_local_dns_mapping.sgmodule')
|
||||
@ -90,7 +111,16 @@ export const buildDomesticRuleset = task(require.main === module, __filename)(as
|
||||
'nameserver-policy': dataset.reduce<Record<string, string | string[]>>(
|
||||
(acc, [, { domains, dns }]) => {
|
||||
domains.forEach((domain) => {
|
||||
acc[`+.${domain}`] = dns === 'system'
|
||||
let domainWildcard = domain;
|
||||
if (domain[0] === '$') {
|
||||
domainWildcard = domain.slice(1);
|
||||
} else if (domain[0] === '+') {
|
||||
domainWildcard = `*.${domain.slice(1)}`;
|
||||
} else {
|
||||
domainWildcard = `+.${domain}`;
|
||||
}
|
||||
|
||||
acc[domainWildcard] = dns === 'system'
|
||||
? [
|
||||
'system://',
|
||||
'system',
|
||||
|
||||
@ -92,7 +92,10 @@ const REDIRECT_MIRROR_307 = [
|
||||
['google.cn/', 'https://google.com/'],
|
||||
['www.google.cn/', 'https://www.google.com/'],
|
||||
['g.cn/', 'https://google.com/'],
|
||||
['www.g.cn/', 'https://www.google.com/']
|
||||
['www.g.cn/', 'https://www.google.com/'],
|
||||
// avg.tv/sm114514 -> https://www.nicovideo.jp/watch/sm114514
|
||||
['acg.tv/sm', 'https://www.nicovideo.jp/watch/sm'],
|
||||
['acg.tv/', 'https://b23.tv/']
|
||||
];
|
||||
|
||||
const REDIRECT_FAKEWEBSITES = [
|
||||
|
||||
@ -392,8 +392,6 @@ export async function compareAndWriteFile(span: Span, linesA: string[], filePath
|
||||
if (p) await p;
|
||||
}
|
||||
|
||||
await asyncWriteToStream(writeStream, '\n');
|
||||
|
||||
writeStream.end();
|
||||
});
|
||||
}
|
||||
|
||||
@ -3,6 +3,13 @@ export interface DNSMapping {
|
||||
[domain: string]: string[]
|
||||
},
|
||||
dns: string,
|
||||
/**
|
||||
* domain[0]
|
||||
*
|
||||
* + subdomain only
|
||||
* $ domain only exact match
|
||||
* [none] domain and subdomain
|
||||
*/
|
||||
domains: string[]
|
||||
}
|
||||
|
||||
@ -35,8 +42,8 @@ export const DIRECTS = {
|
||||
// ZTE CPE
|
||||
'zte.home',
|
||||
// UniFi
|
||||
'ui.direct',
|
||||
'unifi',
|
||||
'+ui.direct',
|
||||
'$unifi',
|
||||
'amplifi.lan',
|
||||
// Other Router
|
||||
'hiwifi.com',
|
||||
@ -85,8 +92,8 @@ export const DIRECTS = {
|
||||
// TailScale Magic DNS
|
||||
'ts.net',
|
||||
// AdGuard
|
||||
'injections.adguard.org',
|
||||
'local.adguard.org'
|
||||
'$injections.adguard.org',
|
||||
'$local.adguard.org'
|
||||
]
|
||||
}
|
||||
} satisfies Record<string, DNSMapping>;
|
||||
@ -97,7 +104,7 @@ export const LANS = {
|
||||
hosts: {},
|
||||
domains: [
|
||||
'lan',
|
||||
'localhost',
|
||||
'$localhost',
|
||||
'localdomain',
|
||||
'home.arpa',
|
||||
// AS112
|
||||
|
||||
@ -10,22 +10,22 @@ export const DOMESTICS = {
|
||||
'uc.cn',
|
||||
'ucweb.com',
|
||||
'alibaba.com',
|
||||
'alicdn.com',
|
||||
'ialicdn.com',
|
||||
'myalicdn.com',
|
||||
'alidns.com',
|
||||
'aliimg.com',
|
||||
'+alicdn.com',
|
||||
'+ialicdn.com',
|
||||
'+myalicdn.com',
|
||||
'+alidns.com',
|
||||
'+aliimg.com',
|
||||
'aliyun.com',
|
||||
'aliyuncs.com',
|
||||
'alikunlun.com',
|
||||
'alikunlun.net',
|
||||
'cdngslb.com',
|
||||
'+aliyuncs.com',
|
||||
'+alikunlun.com',
|
||||
'+alikunlun.net',
|
||||
'+cdngslb.com',
|
||||
'alipay.com',
|
||||
'alipay.cn',
|
||||
'alipay.com.cn',
|
||||
'alipayobjects.com',
|
||||
'+alipayobjects.com',
|
||||
'alibaba-inc.com',
|
||||
'alibabausercontent.com',
|
||||
'+alibabausercontent.com',
|
||||
'alibabadns.com',
|
||||
'alicloudccp.com',
|
||||
'alipan.com',
|
||||
@ -46,18 +46,18 @@ export const DOMESTICS = {
|
||||
'soku.com',
|
||||
'tb.cn',
|
||||
'taobao.com',
|
||||
'taobaocdn.com',
|
||||
'tbcache.com',
|
||||
'+taobaocdn.com',
|
||||
'+tbcache.com',
|
||||
'tmall.com',
|
||||
'tmall.hk',
|
||||
'xiami.com',
|
||||
'xiami.net',
|
||||
'ykimg.com',
|
||||
'+ykimg.com',
|
||||
'youku.com',
|
||||
'tudou.com',
|
||||
'cibntv.net',
|
||||
'+cibntv.net',
|
||||
'ele.me',
|
||||
'elemecdn.com',
|
||||
'+elemecdn.com',
|
||||
'feizhu.com',
|
||||
'taopiaopiao.com',
|
||||
'fliggy.com',
|
||||
@ -75,10 +75,11 @@ export const DOMESTICS = {
|
||||
'npmmirror.com',
|
||||
'alios.cn',
|
||||
'wandoujia.com',
|
||||
'aliapp.org',
|
||||
'+aliapp.org',
|
||||
'tanx.com',
|
||||
'hellobike.com',
|
||||
'hichina.com'
|
||||
'+hichina.com',
|
||||
'+yunos.com'
|
||||
]
|
||||
},
|
||||
TENCENT: {
|
||||
@ -91,25 +92,25 @@ export const DOMESTICS = {
|
||||
domains: [
|
||||
'dns.pub',
|
||||
'doh.pub',
|
||||
'qcloud.com',
|
||||
'gtimg.cn',
|
||||
'gtimg.com',
|
||||
'gtimg.com.cn',
|
||||
'gdtimg.com',
|
||||
'idqqimg.com',
|
||||
'+qcloud.com',
|
||||
'+gtimg.cn',
|
||||
'+gtimg.com',
|
||||
'+gtimg.com.cn',
|
||||
'+gdtimg.com',
|
||||
'+idqqimg.com',
|
||||
'igamecj.com',
|
||||
'myapp.com',
|
||||
'myqcloud.com',
|
||||
'+myqcloud.com',
|
||||
'dnspod.com',
|
||||
'qpic.cn',
|
||||
'qlogo.cn',
|
||||
'+qpic.cn',
|
||||
'+qlogo.cn',
|
||||
'qq.com',
|
||||
'qq.com.cn',
|
||||
'qq.wang',
|
||||
'qqmail.cn',
|
||||
'qqmail.com',
|
||||
'qzone.com',
|
||||
'tencent-cloud.net',
|
||||
'+tencent-cloud.net',
|
||||
'tencent.com',
|
||||
'tencent.com.cn',
|
||||
'tencentmusic.com',
|
||||
@ -120,60 +121,58 @@ export const DOMESTICS = {
|
||||
'soso.com',
|
||||
'sogo.com',
|
||||
'sogou.com',
|
||||
'sogoucdn.com',
|
||||
'+sogoucdn.com',
|
||||
'roblox.cn',
|
||||
'robloxdev.cn',
|
||||
'wegame.com',
|
||||
'wegame.com.cn',
|
||||
'wegameplus.com',
|
||||
'cdn-go.cn',
|
||||
'tencentcs.cn',
|
||||
'tencent-coud.cn',
|
||||
'qcloudimg.com',
|
||||
'+tencentcs.cn',
|
||||
'+qcloudimg.com',
|
||||
'dnspod.cn',
|
||||
'yunos.com',
|
||||
'yitao.com',
|
||||
'anticheatexpert.com',
|
||||
'url.cn',
|
||||
'qlivecdn.com',
|
||||
'tcdnlive.com',
|
||||
'dnsv1.com'
|
||||
'$url.cn',
|
||||
'+qlivecdn.com',
|
||||
'+tcdnlive.com',
|
||||
'+dnsv1.com'
|
||||
]
|
||||
},
|
||||
BILIBILI_ALI: {
|
||||
dns: 'quic://dns.alidns.com:853',
|
||||
hosts: {},
|
||||
domains: [
|
||||
'upos-sz-mirrorali.bilivideo.com',
|
||||
'upos-sz-estgoss.bilivideo.com'
|
||||
'$upos-sz-mirrorali.bilivideo.com',
|
||||
'$upos-sz-estgoss.bilivideo.com'
|
||||
]
|
||||
},
|
||||
BILIBILI_BD: {
|
||||
dns: '180.76.76.76',
|
||||
hosts: {},
|
||||
domains: [
|
||||
'upos-sz-mirrorbd.bilivideo.com',
|
||||
'upos-sz-mirrorbos.bilivideo.com'
|
||||
'$upos-sz-mirrorbd.bilivideo.com',
|
||||
'$upos-sz-mirrorbos.bilivideo.com'
|
||||
]
|
||||
},
|
||||
BILIBILI: {
|
||||
dns: 'https://doh.pub/dns-query',
|
||||
hosts: {},
|
||||
domains: [
|
||||
'upos-sz-mirrorcoso1.bilivideo.com',
|
||||
'acg.tv',
|
||||
'b23.tv',
|
||||
'acgvideo.com',
|
||||
'$upos-sz-mirrorcoso1.bilivideo.com',
|
||||
'$acg.tv',
|
||||
'$b23.tv',
|
||||
'bilibili.cn',
|
||||
'bilibili.com',
|
||||
'bilibili.tv',
|
||||
'bilivideo.com',
|
||||
'bilivideo.cn',
|
||||
'bilivideo.net',
|
||||
'hdslb.com',
|
||||
'biliimg.com',
|
||||
'biliapi.com',
|
||||
'biliapi.net',
|
||||
// 'bilibili.tv',
|
||||
'+acgvideo.com',
|
||||
'+bilivideo.com',
|
||||
'+bilivideo.cn',
|
||||
'+bilivideo.net',
|
||||
'+hdslb.com',
|
||||
'+biliimg.com',
|
||||
'+biliapi.com',
|
||||
'+biliapi.net',
|
||||
'biligame.cn',
|
||||
'biligame.com',
|
||||
'biligame.net',
|
||||
@ -181,7 +180,7 @@ export const DOMESTICS = {
|
||||
'bilicomics.com',
|
||||
'bilibilipay.cn',
|
||||
'bilibilipay.com',
|
||||
'bilicdn1.com'
|
||||
'+bilicdn1.com'
|
||||
]
|
||||
},
|
||||
XIAOMI: {
|
||||
@ -190,7 +189,7 @@ export const DOMESTICS = {
|
||||
domains: [
|
||||
'mi.com',
|
||||
'duokan.com',
|
||||
'mi-img.com',
|
||||
'+mi-img.com',
|
||||
'mi-fds.com',
|
||||
'mifile.cn',
|
||||
'miui.com',
|
||||
@ -207,44 +206,45 @@ export const DOMESTICS = {
|
||||
dns: '180.184.2.2',
|
||||
hosts: {},
|
||||
domains: [
|
||||
'bytecdn.cn',
|
||||
'toutiaoimg.com',
|
||||
'toutiaoimg.cn',
|
||||
'toutiaostatic.com',
|
||||
'toutiaovod.com',
|
||||
'toutiaocloud.com',
|
||||
'+bytecdn.cn',
|
||||
'+toutiaoimg.com',
|
||||
'+toutiaoimg.cn',
|
||||
'+toutiaostatic.com',
|
||||
'+toutiaovod.com',
|
||||
'+toutiaocloud.com',
|
||||
'toutiaopage.com',
|
||||
'feiliao.com',
|
||||
'iesdouyin.com',
|
||||
'pstatp.com',
|
||||
'+pstatp.com',
|
||||
'snssdk.com',
|
||||
'bytegoofy.com',
|
||||
'+bytegoofy.com',
|
||||
'toutiao.com',
|
||||
'feishu.cn',
|
||||
'feishu.net',
|
||||
'feishucdn.com',
|
||||
'feishupkg.com',
|
||||
'+feishucdn.com',
|
||||
'+feishupkg.com',
|
||||
'douyin.com',
|
||||
'douyinpic.com',
|
||||
'douyinstatic.com',
|
||||
'douyincdn.com',
|
||||
'douyinliving.com',
|
||||
'douyinvod.com',
|
||||
'+douyinpic.com',
|
||||
'+douyinstatic.com',
|
||||
'+douyincdn.com',
|
||||
'+douyinliving.com',
|
||||
'+douyinvod.com',
|
||||
'huoshan.com',
|
||||
'huoshanstatic.com',
|
||||
'+huoshanstatic.com',
|
||||
'huoshanzhibo.com',
|
||||
'ixigua.com',
|
||||
'ixiguavideo.com',
|
||||
'ixgvideo.com',
|
||||
'volccdn.com',
|
||||
'byted-static.com',
|
||||
'+ixiguavideo.com',
|
||||
'+ixgvideo.com',
|
||||
'+volccdn.com',
|
||||
'+byted-static.com',
|
||||
'volces.com',
|
||||
'baike.com',
|
||||
'zjcdn.com',
|
||||
'zijieapi.com',
|
||||
'+zjcdn.com',
|
||||
'+zijieapi.com',
|
||||
'feelgood.cn',
|
||||
'bytetcc.com', // Use hichina.com as NS
|
||||
'bytednsdoc.com' // Uses alidns.com as NS
|
||||
'+bytetcc.com', // Use hichina.com as NS
|
||||
'+bytednsdoc.com', // Uses alidns.com as NS
|
||||
'+byteimg.com' // Uses alidns.com as NS
|
||||
]
|
||||
},
|
||||
BAIDU: {
|
||||
@ -256,25 +256,25 @@ export const DOMESTICS = {
|
||||
'baidu.cn',
|
||||
'baidu.com',
|
||||
'iqiyi.com',
|
||||
'iqiyipic.com',
|
||||
'baidubce.com',
|
||||
'bcelive.com',
|
||||
'baiducontent.com',
|
||||
'baidustatic.com',
|
||||
'bdstatic.com',
|
||||
'bdimg.com',
|
||||
'bcebos.com',
|
||||
'baidupcs.com',
|
||||
'baidubcr.com',
|
||||
'yunjiasu-cdn.net',
|
||||
'+iqiyipic.com',
|
||||
'+baidubce.com',
|
||||
'+bcelive.com',
|
||||
'+baiducontent.com',
|
||||
'+baidustatic.com',
|
||||
'+bdstatic.com',
|
||||
'+bdimg.com',
|
||||
'+bcebos.com',
|
||||
'+baidupcs.com',
|
||||
'+baidubcr.com',
|
||||
'+yunjiasu-cdn.net',
|
||||
'tieba.com',
|
||||
'xiaodutv.com',
|
||||
'shifen.com',
|
||||
'jomodns.com',
|
||||
'bdydns.com',
|
||||
'jomoxc.com',
|
||||
'duapp.com',
|
||||
'antpcdn.com' // Baidu PCDN
|
||||
'+jomodns.com',
|
||||
'+bdydns.com',
|
||||
'+jomoxc.com',
|
||||
'+duapp.com',
|
||||
'+antpcdn.com' // Baidu PCDN
|
||||
]
|
||||
},
|
||||
QIHOO360: {
|
||||
@ -288,40 +288,40 @@ export const DOMESTICS = {
|
||||
},
|
||||
dns: 'https://dns.360.net/dns-query',
|
||||
domains: [
|
||||
'qhimg.com',
|
||||
'qhimgs0.com',
|
||||
'qhimgs1.com',
|
||||
'qhimgs2.com',
|
||||
'qhimgs3.com',
|
||||
'qhimgs4.com',
|
||||
'qhimgs5.com',
|
||||
'qhimgs6.com',
|
||||
'qhres.com',
|
||||
'qhres0.com',
|
||||
'qhres1.com',
|
||||
'qhres2.com',
|
||||
'qhres3.com',
|
||||
'qhres4.com',
|
||||
'qhres5.com',
|
||||
'qhres6.com',
|
||||
'qhmsg.com',
|
||||
'qhstatic.com',
|
||||
'qhupdate.com',
|
||||
'qihucdn.com',
|
||||
'+qhimg.com',
|
||||
'+qhimgs0.com',
|
||||
'+qhimgs1.com',
|
||||
'+qhimgs2.com',
|
||||
'+qhimgs3.com',
|
||||
'+qhimgs4.com',
|
||||
'+qhimgs5.com',
|
||||
'+qhimgs6.com',
|
||||
'+qhres.com',
|
||||
'+qhres0.com',
|
||||
'+qhres1.com',
|
||||
'+qhres2.com',
|
||||
'+qhres3.com',
|
||||
'+qhres4.com',
|
||||
'+qhres5.com',
|
||||
'+qhres6.com',
|
||||
'+qhmsg.com',
|
||||
'+qhstatic.com',
|
||||
'+qhupdate.com',
|
||||
'+qihucdn.com',
|
||||
'360.com',
|
||||
'360.cn',
|
||||
'360.net',
|
||||
'360safe.com',
|
||||
'360tpcdn.com',
|
||||
'+360tpcdn.com',
|
||||
'360os.com',
|
||||
'360webcache.com',
|
||||
'+360webcache.com',
|
||||
'360kuai.com',
|
||||
'so.com',
|
||||
'haosou.com',
|
||||
'yunpan.cn',
|
||||
'yunpan.com',
|
||||
'yunpan.com.cn',
|
||||
'qh-cdn.com',
|
||||
'+qh-cdn.com',
|
||||
'baomitu.com'
|
||||
]
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user