Browse Source

Refactor: domestic, direct, dns mapping, real ip

SukkaW 1 year ago
parent
commit
78989026ab

+ 44 - 32
Build/build-domestic-ruleset.ts

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

+ 5 - 11
Build/build-sgmodule-always-realip.ts

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

+ 3 - 2
Build/build-sspanel-appprofile.ts

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

+ 1 - 0
Source/domainset/cdn.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 - 5
Source/non_ip/direct.conf

@@ -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 - 0
Source/non_ip/direct.ts

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

+ 0 - 93
Source/non_ip/domestic.ts

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