mirror of
https://github.com/SukkaW/Surge.git
synced 2025-12-13 01:30:37 +08:00
Refactor: domestic, direct, dns mapping, real ip
This commit is contained in:
parent
418456bcd4
commit
78989026ab
@ -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,9 +61,8 @@ 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(', ')}`)
|
||||||
@ -59,8 +72,7 @@ export const buildDomesticRuleset = task(import.meta.main, import.meta.path)(asy
|
|||||||
`${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')
|
||||||
)
|
)
|
||||||
|
|||||||
@ -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',
|
||||||
|
|||||||
@ -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')),
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
111
Source/non_ip/direct.ts
Normal 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;
|
||||||
@ -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;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user