Perf: smaller local dns mapping

This commit is contained in:
SukkaW 2024-09-26 01:18:23 +08:00
parent 3bc4e69f35
commit 5f027572cf
5 changed files with 172 additions and 134 deletions

View File

@ -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) => [
...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',

View File

@ -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 = [

View File

@ -392,8 +392,6 @@ export async function compareAndWriteFile(span: Span, linesA: string[], filePath
if (p) await p;
}
await asyncWriteToStream(writeStream, '\n');
writeStream.end();
});
}

View File

@ -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

View File

@ -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'
]
}