Refactor: domestic, direct, dns mapping, real ip

This commit is contained in:
SukkaW 2024-06-16 00:42:20 +08:00
parent 418456bcd4
commit 78989026ab
7 changed files with 165 additions and 143 deletions

View File

@ -1,45 +1,59 @@
// @ts-check // @ts-check
import path from 'path'; import path from 'path';
import { DOMESTICS } from '../Source/non_ip/domestic'; import { DOMESTICS } from '../Source/non_ip/domestic';
import { DIRECTS } from '../Source/non_ip/direct';
import { readFileIntoProcessedArray } from './lib/fetch-text-by-line'; import { readFileIntoProcessedArray } from './lib/fetch-text-by-line';
import { compareAndWriteFile, createRuleset } from './lib/create-file'; import { compareAndWriteFile, createRuleset } from './lib/create-file';
import { task } from './trace'; import { task } from './trace';
import { SHARED_DESCRIPTION } from './lib/constants'; import { SHARED_DESCRIPTION } from './lib/constants';
import { createMemoizedPromise } from './lib/memo-promise'; import { createMemoizedPromise } from './lib/memo-promise';
export const getDomesticDomainsRulesetPromise = createMemoizedPromise(async () => { export const getDomesticAndDirectDomainsRulesetPromise = createMemoizedPromise(async () => {
const results = await readFileIntoProcessedArray(path.resolve(import.meta.dir, '../Source/non_ip/domestic.conf')); const domestics = await readFileIntoProcessedArray(path.resolve(import.meta.dir, '../Source/non_ip/domestic.conf'));
const directs = await readFileIntoProcessedArray(path.resolve(import.meta.dir, '../Source/non_ip/direct.conf'));
results.push( Object.entries(DOMESTICS).forEach(([, { domains }]) => {
...Object.entries(DOMESTICS).reduce<string[]>((acc, [key, { domains }]) => { domestics.push(...domains.map((domain) => `DOMAIN-SUFFIX,${domain}`));
if (key === 'SYSTEM') return acc; });
return [...acc, ...domains]; Object.entries(DIRECTS).forEach(([, { domains }]) => {
}, []).map((domain) => `DOMAIN-SUFFIX,${domain}`) directs.push(...domains.map((domain) => `DOMAIN-SUFFIX,${domain}`));
); });
return results; return [domestics, directs] as const;
}); });
export const buildDomesticRuleset = task(import.meta.main, import.meta.path)(async (span) => { export const buildDomesticRuleset = task(import.meta.main, import.meta.path)(async (span) => {
const rulesetDescription = [ const res = await getDomesticAndDirectDomainsRulesetPromise();
...SHARED_DESCRIPTION,
'',
'This file contains known addresses that are avaliable in the Mainland China.'
];
const res = await getDomesticDomainsRulesetPromise();
return Promise.all([ return Promise.all([
createRuleset( createRuleset(
span, span,
'Sukka\'s Ruleset - Domestic Domains', 'Sukka\'s Ruleset - Domestic Domains',
rulesetDescription, [
...SHARED_DESCRIPTION,
'',
'This file contains known addresses that are avaliable in the Mainland China.'
],
new Date(), new Date(),
res, res[0],
'ruleset', 'ruleset',
path.resolve(import.meta.dir, '../List/non_ip/domestic.conf'), path.resolve(import.meta.dir, '../List/non_ip/domestic.conf'),
path.resolve(import.meta.dir, '../Clash/non_ip/domestic.txt') path.resolve(import.meta.dir, '../Clash/non_ip/domestic.txt')
), ),
createRuleset(
span,
'Sukka\'s Ruleset - Direct Rules',
[
...SHARED_DESCRIPTION,
'',
'This file contains domains and process that should not be proxied.'
],
new Date(),
res[1],
'ruleset',
path.resolve(import.meta.dir, '../List/non_ip/direct.conf'),
path.resolve(import.meta.dir, '../Clash/non_ip/direct.txt')
),
compareAndWriteFile( compareAndWriteFile(
span, span,
[ [
@ -47,20 +61,18 @@ export const buildDomesticRuleset = task(import.meta.main, import.meta.path)(asy
`#!desc=Last Updated: ${new Date().toISOString()}`, `#!desc=Last Updated: ${new Date().toISOString()}`,
'', '',
'[Host]', '[Host]',
...Object.entries(DOMESTICS) ...([...Object.entries(DOMESTICS), ...Object.entries(DIRECTS)])
.flatMap( .flatMap(([, { domains, dns, ...rest }]) => [
([, { domains, dns, ...rest }]) => [ ...(
...( 'hosts' in rest
'hosts' in rest ? Object.entries(rest.hosts).flatMap(([dns, ips]: [dns: string, ips: string[]]) => `${dns} = ${ips.join(', ')}`)
? Object.entries(rest.hosts).flatMap(([dns, ips]: [dns: string, ips: string[]]) => `${dns} = ${ips.join(', ')}`) : []
: [] ),
), ...domains.flatMap((domain) => [
...domains.flatMap((domain) => [ `${domain} = server:${dns}`,
`${domain} = server:${dns}`, `*.${domain} = server:${dns}`
`*.${domain} = server:${dns}` ])
]) ])
]
)
], ],
path.resolve(import.meta.dir, '../Modules/sukka_local_dns_mapping.sgmodule') path.resolve(import.meta.dir, '../Modules/sukka_local_dns_mapping.sgmodule')
) )

View File

@ -1,13 +1,11 @@
import path from 'path'; import path from 'path';
import { task } from './trace'; import { task } from './trace';
import { compareAndWriteFile } from './lib/create-file'; import { compareAndWriteFile } from './lib/create-file';
import { DIRECTS } from '../Source/non_ip/direct';
const HOSTNAMES = [ const HOSTNAMES = [
// Intranet // Intranet, Router Setup, and mant more
'*.lan', ...(Object.entries(DIRECTS)).flatMap(([, { domains }]) => domains.flatMap((domain) => [`*.${domain}`, domain])),
'*.localdomain',
'*.localhost',
'*.home.arpa',
// Network Detection, Captive Portal // Network Detection, Captive Portal
'msftncsi.com', 'msftncsi.com',
'msftconnecttest.com', 'msftconnecttest.com',
@ -27,14 +25,10 @@ const HOSTNAMES = [
'stun.twilio.com', 'stun.twilio.com',
'*.stun.twilio.com', '*.stun.twilio.com',
'stun.syncthing.net', 'stun.syncthing.net',
'stun.*.*', 'stun.*',
'stun.*.*.*',
'controlplane.tailscale.com', 'controlplane.tailscale.com',
// NTP // NTP
'time.*.com', 'time.*.gov, time.*.edu.cn, time.*.apple.com', 'time1.*.com', 'time2.*.com', 'time3.*.com', 'time4.*.com', 'time5.*.com', 'time6.*.com', 'time7.*.com', 'time8.*.com', 'time9.*.com, ntp.*.com, ntp1.*.com, ntp2.*.com, ntp3.*.com, ntp4.*.com, ntp5.*.com, ntp6.*.com, ntp7.*.com', 'time1.*.com', 'time2.*.com', 'time3.*.com', 'time4.*.com', 'time5.*.com', 'time6.*.com', 'time7.*.com', 'time8.*.com', 'ti me9.*.com', '*.time.edu.cn', '*.ntp.org.cn', '*.pool.ntp.org', 'time1.cloud.tencent.com', 'time.*.com', 'time.*.gov, time.*.edu.cn, time.*.apple.com', 'time?.*.com', 'ntp.*.com', 'ntp?.*.com', '*.time.edu.cn', '*.ntp.org.cn', '*.pool.ntp.org', 'time*.cloud.tencent.com',
// AdGuard
'local.adguard.org',
'injections.adguard.org',
// QQ Login // QQ Login
'localhost.ptlogin2.qq.com', 'localhost.ptlogin2.qq.com',
'localhost.sec.qq.com', 'localhost.sec.qq.com',

View File

@ -1,5 +1,5 @@
import { getAppleCdnDomainsPromise } from './build-apple-cdn'; import { getAppleCdnDomainsPromise } from './build-apple-cdn';
import { getDomesticDomainsRulesetPromise } from './build-domestic-ruleset'; import { getDomesticAndDirectDomainsRulesetPromise } from './build-domestic-ruleset';
import { surgeRulesetToClashClassicalTextRuleset, surgeDomainsetToClashRuleset } from './lib/clash'; import { surgeRulesetToClashClassicalTextRuleset, surgeDomainsetToClashRuleset } from './lib/clash';
import { readFileIntoProcessedArray } from './lib/fetch-text-by-line'; import { readFileIntoProcessedArray } from './lib/fetch-text-by-line';
import { task } from './trace'; import { task } from './trace';
@ -46,7 +46,8 @@ export const buildSSPanelUIMAppProfile = task(import.meta.main, import.meta.path
lanCidrs lanCidrs
] = await Promise.all([ ] = await Promise.all([
// domestic - domains // domestic - domains
getDomesticDomainsRulesetPromise().then(surgeRulesetToClashClassicalTextRuleset), getDomesticAndDirectDomainsRulesetPromise()
.then(data => data.flatMap(surgeRulesetToClashClassicalTextRuleset)),
getAppleCdnDomainsPromise().then(domains => domains.map(domain => `DOMAIN-SUFFIX,${domain}`)), getAppleCdnDomainsPromise().then(domains => domains.map(domain => `DOMAIN-SUFFIX,${domain}`)),
getMicrosoftCdnRulesetPromise().then(surgeRulesetToClashClassicalTextRuleset), getMicrosoftCdnRulesetPromise().then(surgeRulesetToClashClassicalTextRuleset),
readFileIntoProcessedArray(path.resolve(import.meta.dir, '../Source/non_ip/apple_cn.conf')), readFileIntoProcessedArray(path.resolve(import.meta.dir, '../Source/non_ip/apple_cn.conf')),

View File

@ -2039,6 +2039,7 @@ net-fe-static-assets.network-controller.svc.ui.com
images.svc.ui.com images.svc.ui.com
static.ui.com static.ui.com
img.community.ui.com img.community.ui.com
cdn.pkg.svc.ui.com
# SoftSonic # SoftSonic
.sftcdn.net .sftcdn.net
# apponic # apponic

View File

@ -1,9 +1,5 @@
# $ meta_title Sukka's Ruleset - Direct Rules # $ meta_title Sukka's Ruleset - Direct Rules
# $ meta_description This file contains domains and process that should not be proxied. # $ custom_build_script
# >> AdGuard
DOMAIN,injections.adguard.org
DOMAIN,local.adguard.org
# >> Proxy # >> Proxy
PROCESS-NAME,v2ray PROCESS-NAME,v2ray

111
Source/non_ip/direct.ts Normal file
View File

@ -0,0 +1,111 @@
export const DIRECTS = {
ROUTER: {
dns: 'system',
domains: [
// Aruba Router
'instant.arubanetworks.com',
'setmeup.arubanetworks.com',
// ASUS router
'router.asus.com',
'repeater.asus.com',
'asusrouter.com',
// NetGear
'routerlogin.net',
// Tenda WiFi
'tendawifi.com',
// TP-Link Router
'tplinkwifi.net',
'tplogin.cn',
'tplinkap.net',
'tplinkeap.net',
'tplinkmodem.net',
'tplinkplclogin.net',
'tplinkrepeater.net',
// Xiaomi Router
'miwifi.com',
// ZTE CPE
'zte.home',
// UniFi
'ui.direct',
'unifi',
'amplifi.lan',
// Other Router
'hiwifi.com',
'huaweimobilewifi.com',
'my.router',
'phicomm.me',
'router.ctc',
'peiluyou.com',
'airbox.home',
'arcor.easybox',
'aterm.me',
'bthub.home',
'bthomehub.home',
'congstar.box',
'connect.box',
'console.gl-inet.com',
'easy.box',
'etxr',
'fritz.box',
'fritz.nas',
'fritz.repeater',
'giga.cube',
'hi.link',
'hitronhub.home',
'homerouter.cpe',
'myfritz.box',
'mobile.hotspot',
'ntt.setup',
'pi.hole',
'plex.direct',
'app.plex.tv',
'routerlogin.com',
'samsung.router',
'speedport.ip',
'steamloopback.host',
'web.setup',
'web.setup.home'
]
},
SYSTEM: {
dns: 'system',
domains: [
'_hotspot_.m2m',
'hotspot.cslwifi.com',
// TailScale Magic DNS
'ts.net',
// AdGuard
'injections.adguard.org',
'local.adguard.org'
]
},
LAN: {
dns: 'system',
domains: [
'lan',
'localhost',
'localdomain',
'home.arpa',
// AS112
'10.in-addr.arpa',
'16.172.in-addr.arpa',
'17.172.in-addr.arpa',
'18.172.in-addr.arpa',
'19.172.in-addr.arpa',
'20.172.in-addr.arpa',
'21.172.in-addr.arpa',
'22.172.in-addr.arpa',
'23.172.in-addr.arpa',
'24.172.in-addr.arpa',
'25.172.in-addr.arpa',
'26.172.in-addr.arpa',
'27.172.in-addr.arpa',
'28.172.in-addr.arpa',
'29.172.in-addr.arpa',
'30.172.in-addr.arpa',
'31.172.in-addr.arpa',
'168.192.in-addr.arpa',
'254.169.in-addr.arpa'
]
}
} as const;

View File

@ -1,4 +1,3 @@
// @ts-check
export const DOMESTICS = { export const DOMESTICS = {
ALIBABA: { ALIBABA: {
hosts: { hosts: {
@ -307,97 +306,5 @@ export const DOMESTICS = {
'qh-cdn.com', 'qh-cdn.com',
'baomitu.com' 'baomitu.com'
] ]
},
SYSTEM: {
dns: 'system',
domains: [
'_hotspot_.m2m',
'hotspot.cslwifi.com',
'amplifi.lan',
'*.lan',
'home.arpa',
// TailScale Magic DNS
'ts.net',
// Aruba Router
'instant.arubanetworks.com',
'setmeup.arubanetworks.com',
// ASUS router
'router.asus.com',
'repeater.asus.com',
'asusrouter.com',
// NetGear
'routerlogin.net',
// Tenda WiFi
'tendawifi.com',
// TP-Link Router
'tplinkwifi.net',
'tplogin.cn',
'tplinkap.net',
'tplinkeap.net',
'tplinkmodem.net',
'tplinkplclogin.net',
'tplinkrepeater.net',
// Xiaomi Router
'miwifi.com',
// ZTE CPE
'zte.home',
// Other Router
'ui.direct',
'hiwifi.com',
'huaweimobilewifi.com',
'my.router',
'phicomm.me',
'router.ctc',
'peiluyou.com',
'airbox.home',
'arcor.easybox',
'aterm.me',
'bthub.home',
'bthomehub.home',
'congstar.box',
'connect.box',
'console.gl-inet.com',
'easy.box',
'etxr',
'fritz.box',
'fritz.nas',
'fritz.repeater',
'giga.cube',
'hi.link',
'hitronhub.home',
'homerouter.cpe',
'myfritz.box',
'mobile.hotspot',
'ntt.setup',
'pi.hole',
'plex.direct',
'app.plex.tv',
'routerlogin.com',
'samsung.router',
'speedport.ip',
'steamloopback.host',
'web.setup',
'web.setup.home',
// AS112
'10.in-addr.arpa',
'16.172.in-addr.arpa',
'17.172.in-addr.arpa',
'18.172.in-addr.arpa',
'19.172.in-addr.arpa',
'20.172.in-addr.arpa',
'21.172.in-addr.arpa',
'22.172.in-addr.arpa',
'23.172.in-addr.arpa',
'24.172.in-addr.arpa',
'25.172.in-addr.arpa',
'26.172.in-addr.arpa',
'27.172.in-addr.arpa',
'28.172.in-addr.arpa',
'29.172.in-addr.arpa',
'30.172.in-addr.arpa',
'31.172.in-addr.arpa',
'168.192.in-addr.arpa',
'254.169.in-addr.arpa'
]
} }
} as const; } as const;