From 7f86c455b0d812cc82592aca9e1982a144a9866f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Mon, 10 Mar 2025 15:53:32 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20SNI=E9=BB=98=E8=AE=A4=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E7=9A=84DNS=EF=BC=8C=E5=8F=AF=E5=9C=A8=20`DNS=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E7=AE=A1=E7=90=86`=20=E4=B8=AD=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/config/index.js | 1 + packages/mitmproxy/src/lib/dns/index.js | 10 ++++++++++ .../src/lib/proxy/mitmproxy/createRequestHandler.js | 6 ++++-- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/core/src/config/index.js b/packages/core/src/config/index.js index c9e8024..b2b0051 100644 --- a/packages/core/src/config/index.js +++ b/packages/core/src/config/index.js @@ -393,6 +393,7 @@ const defaultConfig = { type: 'https', server: 'https://doh.360.cn/dns-query', cacheSize: 1000, + forSNI: true, }, rubyfish: { type: 'https', diff --git a/packages/mitmproxy/src/lib/dns/index.js b/packages/mitmproxy/src/lib/dns/index.js index ee3e40c..50d44ec 100644 --- a/packages/mitmproxy/src/lib/dns/index.js +++ b/packages/mitmproxy/src/lib/dns/index.js @@ -1,4 +1,5 @@ const matchUtil = require('../../utils/util.match') +const log = require('../../utils/util.log.server') const DNSOverPreSetIpList = require('./preset.js') const DNSOverHTTPS = require('./https.js') const DNSOverTLS = require('./tls.js') @@ -72,10 +73,19 @@ module.exports = { dnsMap[provider] = new DNSOverUDP(provider, conf.cacheSize, preSetIpList, server, port) } } + + if (conf.forSNI || conf.forSni) { + dnsMap.ForSNI = dnsMap[provider] + } } // 创建预设IP的DNS dnsMap.PreSet = new DNSOverPreSetIpList(preSetIpList) + if (dnsMap.ForSNI == null) { + dnsMap.ForSNI = dnsMap.PreSet + } + + log.info(`设置SNI默认使用的DNS为 '${dnsMap.ForSNI.dnsName}'(注:当某个域名配置了SNI但未配置DNS时,将默认使用该DNS)`) return dnsMap }, diff --git a/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js b/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js index b3c27f9..e70c352 100644 --- a/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js +++ b/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js @@ -116,9 +116,11 @@ module.exports = function createRequestHandler (createIntercepts, middlewares, e if (dnsConfig && dnsConfig.dnsMap) { let dns = DnsUtil.hasDnsLookup(dnsConfig, rOptions.hostname) if (!dns && rOptions.servername) { - dns = dnsConfig.dnsMap.quad9 + dns = dnsConfig.dnsMap.ForSNI if (dns) { - log.info(`域名 ${rOptions.hostname} 在dns中未配置,但使用了 sni: ${rOptions.servername}, 必须使用dns,现默认使用 'quad9' DNS.`) + log.info(`域名 ${rOptions.hostname} 在dns中未配置,但使用了 sni: ${rOptions.servername}, 必须使用dns,现默认使用 '${dns.dnsName}' DNS.`) + } else { + log.warn(`域名 ${rOptions.hostname} 在dns中未配置,但使用了 sni: ${rOptions.servername},且DNS服务管理中,也未指定SNI默认使用的DNS。`) } } if (dns) {