Fix: opt-in Surge DNS's special handling for .local
Some checks failed
Build / Build (push) Has been cancelled
Build / Diff output (push) Has been cancelled
Build / Deploy to Cloudflare Pages (3.114.12) (push) Has been cancelled
Build / Deploy to GitHub and GitLab (push) Has been cancelled
Build / Remove Artifacts after Deployment (push) Has been cancelled

This commit is contained in:
SukkaW 2025-12-15 16:30:30 +08:00
parent 7f261b8681
commit 800b16a7c4
2 changed files with 27 additions and 4 deletions

View File

@ -233,7 +233,9 @@ export const buildDomesticRuleset = task(require.main === module, __filename)(as
const ruleset_name = cur[0].toLowerCase(); const ruleset_name = cur[0].toLowerCase();
const mihomo_ruleset_id = `mihomo_nameserver_policy_${ruleset_name}`; const mihomo_ruleset_id = `mihomo_nameserver_policy_${ruleset_name}`;
if (dns) {
acc.dns['nameserver-policy'][`rule-set:${mihomo_ruleset_id}`] = dns; acc.dns['nameserver-policy'][`rule-set:${mihomo_ruleset_id}`] = dns;
}
acc['rule-providers'][mihomo_ruleset_id] = { acc['rule-providers'][mihomo_ruleset_id] = {
type: 'http', type: 'http',
@ -257,7 +259,9 @@ export const buildDomesticRuleset = task(require.main === module, __filename)(as
break; break;
} }
if (dns) {
acc.dns['nameserver-policy'][domain] = dns; acc.dns['nameserver-policy'][domain] = dns;
}
}); });
} }
@ -297,6 +301,10 @@ export const buildDomesticRuleset = task(require.main === module, __filename)(as
'https://doh.pub/dns-query', 'https://doh.pub/dns-query',
'[//]udp://10.10.1.1:53', '[//]udp://10.10.1.1:53',
...(([DOMESTICS, DIRECTS, LAN, HOSTS] as const).flatMap(Object.values) as DNSMapping[]).flatMap(({ domains, dns: _dns }) => domains.flatMap((domain) => { ...(([DOMESTICS, DIRECTS, LAN, HOSTS] as const).flatMap(Object.values) as DNSMapping[]).flatMap(({ domains, dns: _dns }) => domains.flatMap((domain) => {
if (!_dns) {
return [];
}
let dns; let dns;
if (_dns in AdGuardHomeDNSMapping) { if (_dns in AdGuardHomeDNSMapping) {
dns = AdGuardHomeDNSMapping[_dns as keyof typeof AdGuardHomeDNSMapping].join(' '); dns = AdGuardHomeDNSMapping[_dns as keyof typeof AdGuardHomeDNSMapping].join(' ');

View File

@ -6,7 +6,7 @@ export interface DNSMapping {
realip: boolean, realip: boolean,
/** should convert to ruleset */ /** should convert to ruleset */
ruleset: boolean, ruleset: boolean,
dns: string, dns: string | null,
/** /**
* domain[0] * domain[0]
* *
@ -47,6 +47,18 @@ export const DIRECTS = {
} as const satisfies Record<string, DNSMapping>; } as const satisfies Record<string, DNSMapping>;
export const LAN = { export const LAN = {
// By default, all hostnames with the suffix '.local' will be resolved by the system.
// Some app like OrbStack uses mDNS and this TLD (orb.local) via mDNS.
// Surge already handles .local with mDNS properly, we should not map to server:system
LOCAL_SPECIAL: {
dns: null,
hosts: {},
realip: false,
ruleset: false,
domains: [
'+local'
]
},
LAN_WITHOUT_REAL_IP: { LAN_WITHOUT_REAL_IP: {
dns: 'system', dns: 'system',
hosts: { hosts: {
@ -139,7 +151,10 @@ export const LAN = {
ruleset: true, ruleset: true,
domains: [ domains: [
'+lan', '+lan',
'+local', // By default, all hostnames with the suffix '.local' will be resolved by the system.
// Some app like OrbStack uses mDNS and this TLD (orb.local) via mDNS.
// Surge already handles .local with mDNS properly, we should not map to server:system
// '+local',
'+internal', '+internal',
// 'amplifi.lan', // 'amplifi.lan',
// '$localhost', // '$localhost',