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
|
||||
import path from 'path';
|
||||
import { DOMESTICS } from '../Source/non_ip/domestic';
|
||||
import { DIRECTS } from '../Source/non_ip/direct';
|
||||
import { readFileIntoProcessedArray } from './lib/fetch-text-by-line';
|
||||
import { compareAndWriteFile, createRuleset } from './lib/create-file';
|
||||
import { task } from './trace';
|
||||
import { SHARED_DESCRIPTION } from './lib/constants';
|
||||
import { createMemoizedPromise } from './lib/memo-promise';
|
||||
|
||||
export const getDomesticDomainsRulesetPromise = createMemoizedPromise(async () => {
|
||||
const results = await readFileIntoProcessedArray(path.resolve(import.meta.dir, '../Source/non_ip/domestic.conf'));
|
||||
export const getDomesticAndDirectDomainsRulesetPromise = createMemoizedPromise(async () => {
|
||||
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).reduce<string[]>((acc, [key, { domains }]) => {
|
||||
if (key === 'SYSTEM') return acc;
|
||||
return [...acc, ...domains];
|
||||
}, []).map((domain) => `DOMAIN-SUFFIX,${domain}`)
|
||||
);
|
||||
Object.entries(DOMESTICS).forEach(([, { domains }]) => {
|
||||
domestics.push(...domains.map((domain) => `DOMAIN-SUFFIX,${domain}`));
|
||||
});
|
||||
Object.entries(DIRECTS).forEach(([, { domains }]) => {
|
||||
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) => {
|
||||
const rulesetDescription = [
|
||||
...SHARED_DESCRIPTION,
|
||||
'',
|
||||
'This file contains known addresses that are avaliable in the Mainland China.'
|
||||
];
|
||||
|
||||
const res = await getDomesticDomainsRulesetPromise();
|
||||
const res = await getDomesticAndDirectDomainsRulesetPromise();
|
||||
|
||||
return Promise.all([
|
||||
createRuleset(
|
||||
span,
|
||||
'Sukka\'s Ruleset - Domestic Domains',
|
||||
rulesetDescription,
|
||||
[
|
||||
...SHARED_DESCRIPTION,
|
||||
'',
|
||||
'This file contains known addresses that are avaliable in the Mainland China.'
|
||||
],
|
||||
new Date(),
|
||||
res,
|
||||
res[0],
|
||||
'ruleset',
|
||||
path.resolve(import.meta.dir, '../List/non_ip/domestic.conf'),
|
||||
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(
|
||||
span,
|
||||
[
|
||||
@ -47,20 +61,18 @@ export const buildDomesticRuleset = task(import.meta.main, import.meta.path)(asy
|
||||
`#!desc=Last Updated: ${new Date().toISOString()}`,
|
||||
'',
|
||||
'[Host]',
|
||||
...Object.entries(DOMESTICS)
|
||||
.flatMap(
|
||||
([, { domains, dns, ...rest }]) => [
|
||||
...(
|
||||
'hosts' in rest
|
||||
? Object.entries(rest.hosts).flatMap(([dns, ips]: [dns: string, ips: string[]]) => `${dns} = ${ips.join(', ')}`)
|
||||
: []
|
||||
),
|
||||
...domains.flatMap((domain) => [
|
||||
`${domain} = server:${dns}`,
|
||||
`*.${domain} = server:${dns}`
|
||||
])
|
||||
]
|
||||
)
|
||||
...([...Object.entries(DOMESTICS), ...Object.entries(DIRECTS)])
|
||||
.flatMap(([, { domains, dns, ...rest }]) => [
|
||||
...(
|
||||
'hosts' in rest
|
||||
? Object.entries(rest.hosts).flatMap(([dns, ips]: [dns: string, ips: string[]]) => `${dns} = ${ips.join(', ')}`)
|
||||
: []
|
||||
),
|
||||
...domains.flatMap((domain) => [
|
||||
`${domain} = server:${dns}`,
|
||||
`*.${domain} = server:${dns}`
|
||||
])
|
||||
])
|
||||
],
|
||||
path.resolve(import.meta.dir, '../Modules/sukka_local_dns_mapping.sgmodule')
|
||||
)
|
||||
|
||||
@ -1,13 +1,11 @@
|
||||
import path from 'path';
|
||||
import { task } from './trace';
|
||||
import { compareAndWriteFile } from './lib/create-file';
|
||||
import { DIRECTS } from '../Source/non_ip/direct';
|
||||
|
||||
const HOSTNAMES = [
|
||||
// Intranet
|
||||
'*.lan',
|
||||
'*.localdomain',
|
||||
'*.localhost',
|
||||
'*.home.arpa',
|
||||
// Intranet, Router Setup, and mant more
|
||||
...(Object.entries(DIRECTS)).flatMap(([, { domains }]) => domains.flatMap((domain) => [`*.${domain}`, domain])),
|
||||
// Network Detection, Captive Portal
|
||||
'msftncsi.com',
|
||||
'msftconnecttest.com',
|
||||
@ -27,14 +25,10 @@ const HOSTNAMES = [
|
||||
'stun.twilio.com',
|
||||
'*.stun.twilio.com',
|
||||
'stun.syncthing.net',
|
||||
'stun.*.*',
|
||||
'stun.*.*.*',
|
||||
'stun.*',
|
||||
'controlplane.tailscale.com',
|
||||
// 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',
|
||||
// AdGuard
|
||||
'local.adguard.org',
|
||||
'injections.adguard.org',
|
||||
'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',
|
||||
// QQ Login
|
||||
'localhost.ptlogin2.qq.com',
|
||||
'localhost.sec.qq.com',
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
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 { readFileIntoProcessedArray } from './lib/fetch-text-by-line';
|
||||
import { task } from './trace';
|
||||
@ -46,7 +46,8 @@ export const buildSSPanelUIMAppProfile = task(import.meta.main, import.meta.path
|
||||
lanCidrs
|
||||
] = await Promise.all([
|
||||
// domestic - domains
|
||||
getDomesticDomainsRulesetPromise().then(surgeRulesetToClashClassicalTextRuleset),
|
||||
getDomesticAndDirectDomainsRulesetPromise()
|
||||
.then(data => data.flatMap(surgeRulesetToClashClassicalTextRuleset)),
|
||||
getAppleCdnDomainsPromise().then(domains => domains.map(domain => `DOMAIN-SUFFIX,${domain}`)),
|
||||
getMicrosoftCdnRulesetPromise().then(surgeRulesetToClashClassicalTextRuleset),
|
||||
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
|
||||
static.ui.com
|
||||
img.community.ui.com
|
||||
cdn.pkg.svc.ui.com
|
||||
# SoftSonic
|
||||
.sftcdn.net
|
||||
# apponic
|
||||
|
||||
@ -1,9 +1,5 @@
|
||||
# $ meta_title Sukka's Ruleset - Direct Rules
|
||||
# $ meta_description This file contains domains and process that should not be proxied.
|
||||
|
||||
# >> AdGuard
|
||||
DOMAIN,injections.adguard.org
|
||||
DOMAIN,local.adguard.org
|
||||
# $ custom_build_script
|
||||
|
||||
# >> Proxy
|
||||
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 = {
|
||||
ALIBABA: {
|
||||
hosts: {
|
||||
@ -307,97 +306,5 @@ export const DOMESTICS = {
|
||||
'qh-cdn.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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user