chore: teo dns 测试成功

v2
xiaojunnuo 2025-11-13 01:11:04 +08:00
parent d7c381e05d
commit d56567c9de
4 changed files with 28 additions and 23 deletions

View File

@ -492,7 +492,7 @@ class AcmeClient {
throw new Error('Unable to verify ACME challenge, URL not found'); throw new Error('Unable to verify ACME challenge, URL not found');
} }
const {challenges} = createChallengeFn({logger:this.opts.logger}); const {challenges} = createChallengeFn({logger:this.logger});
const verify = challenges const verify = challenges
if (typeof verify[challenge.type] === 'undefined') { if (typeof verify[challenge.type] === 'undefined') {
@ -510,7 +510,12 @@ class AcmeClient {
}; };
this.log('Waiting for ACME challenge verification等待ACME检查验证'); this.log('Waiting for ACME challenge verification等待ACME检查验证');
return util.retry(verifyFn, this.backoffOpts);
const log = (...args)=>{
this.logger.info(...args)
}
return util.retry(verifyFn, this.backoffOpts,log);
} }
/** /**

View File

@ -48,7 +48,7 @@ class Backoff {
* @returns {Promise} * @returns {Promise}
*/ */
async function retryPromise(fn, attempts, backoff) { async function retryPromise(fn, attempts, backoff, logger = log) {
let aborted = false; let aborted = false;
try { try {
@ -60,12 +60,12 @@ async function retryPromise(fn, attempts, backoff) {
throw e; throw e;
} }
log(`Promise rejected: ${e.message}`); logger(`Promise rejected: ${e.message}`);
const duration = backoff.duration(); const duration = backoff.duration();
log(`Promise rejected attempt #${backoff.attempts}, ${duration}ms 后重试: ${e.message}`); logger(`Promise rejected attempt #${backoff.attempts}, ${duration}ms 后重试: ${e.message}`);
await new Promise((resolve) => { setTimeout(resolve, duration); }); await new Promise((resolve) => { setTimeout(resolve, duration); });
return retryPromise(fn, attempts, backoff); return retryPromise(fn, attempts, backoff, logger);
} }
} }
@ -80,9 +80,9 @@ async function retryPromise(fn, attempts, backoff) {
* @returns {Promise} * @returns {Promise}
*/ */
function retry(fn, { attempts = 5, min = 5000, max = 30000 } = {}) { function retry(fn, { attempts = 5, min = 5000, max = 30000 } = {}, logger = log) {
const backoff = new Backoff({ min, max }); const backoff = new Backoff({ min, max });
return retryPromise(fn, attempts, backoff); return retryPromise(fn, attempts, backoff, logger);
} }
/** /**
@ -216,21 +216,21 @@ function formatResponseError(resp) {
* @returns {Promise<string>} Root domain name * @returns {Promise<string>} Root domain name
*/ */
async function resolveDomainBySoaRecord(recordName) { async function resolveDomainBySoaRecord(recordName, logger = log) {
try { try {
await dns.resolveSoa(recordName); await dns.resolveSoa(recordName);
log(`找到${recordName}的SOA记录`); logger(`找到${recordName}的SOA记录`);
return recordName; return recordName;
} }
catch (e) { catch (e) {
log(`找不到${recordName}的SOA记录,继续往主域名查找`); logger(`找不到${recordName}的SOA记录,继续往主域名查找`);
const parentRecordName = recordName.split('.').slice(1).join('.'); const parentRecordName = recordName.split('.').slice(1).join('.');
if (!parentRecordName.includes('.')) { if (!parentRecordName.includes('.')) {
throw new Error('SOA record查找失败'); throw new Error('SOA record查找失败');
} }
return resolveDomainBySoaRecord(parentRecordName); return resolveDomainBySoaRecord(parentRecordName,logger);
} }
} }
@ -241,18 +241,18 @@ async function resolveDomainBySoaRecord(recordName) {
* @returns {Promise<dns.Resolver>} DNS resolver * @returns {Promise<dns.Resolver>} DNS resolver
*/ */
async function getAuthoritativeDnsResolver(recordName) { async function getAuthoritativeDnsResolver(recordName, logger = log) {
log(`获取域名${recordName}的权威NS服务器: `); logger(`获取域名${recordName}的权威NS服务器: `);
const resolver = new dns.Resolver(); const resolver = new dns.Resolver();
try { try {
/* Resolve root domain by SOA */ /* Resolve root domain by SOA */
const domain = await resolveDomainBySoaRecord(recordName); const domain = await resolveDomainBySoaRecord(recordNam,logger);
/* Resolve authoritative NS addresses */ /* Resolve authoritative NS addresses */
log(`获取到权威NS服务器name: ${domain}`); logger(`获取到权威NS服务器name: ${domain}`);
const nsRecords = await dns.resolveNs(domain); const nsRecords = await dns.resolveNs(domain);
log(`域名权威NS服务器${nsRecords}`); logger(`域名权威NS服务器${nsRecords}`);
const nsAddrArray = await Promise.all(nsRecords.map(async (r) => dns.resolve4(r))); const nsAddrArray = await Promise.all(nsRecords.map(async (r) => dns.resolve4(r)));
const nsAddresses = [].concat(...nsAddrArray).filter((a) => a); const nsAddresses = [].concat(...nsAddrArray).filter((a) => a);
@ -261,16 +261,16 @@ async function getAuthoritativeDnsResolver(recordName) {
} }
/* Authoritative NS success */ /* Authoritative NS success */
log(`Found ${nsAddresses.length} authoritative NS addresses for domain: ${domain}`); logger(`Found ${nsAddresses.length} authoritative NS addresses for domain: ${domain}`);
resolver.setServers(nsAddresses); resolver.setServers(nsAddresses);
} }
catch (e) { catch (e) {
log(`Authoritative NS lookup error获取权威NS服务器地址失败: ${e.message}`); logger(`Authoritative NS lookup error获取权威NS服务器地址失败: ${e.message}`);
} }
/* Return resolver */ /* Return resolver */
const addresses = resolver.getServers(); const addresses = resolver.getServers();
log(`DNS resolver addresses域名的权威NS服务器地址: ${addresses.join(', ')}`); logger(`DNS resolver addresses域名的权威NS服务器地址: ${addresses.join(', ')}`);
return resolver; return resolver;
} }

View File

@ -144,7 +144,7 @@ async function walkDnsChallengeRecord(recordName, resolver = dns,deep = 0) {
try{ try{
/* Authoritative DNS resolver */ /* Authoritative DNS resolver */
log(`从域名权威服务器获取TXT解析记录`); log(`从域名权威服务器获取TXT解析记录`);
const authoritativeResolver = await util.getAuthoritativeDnsResolver(recordName); const authoritativeResolver = await util.getAuthoritativeDnsResolver(recordName,log);
const res = await walkDnsChallengeRecord(recordName, authoritativeResolver,deep); const res = await walkDnsChallengeRecord(recordName, authoritativeResolver,deep);
if (res && res.length > 0) { if (res && res.length > 0) {
for (const item of res) { for (const item of res) {
@ -182,7 +182,6 @@ async function verifyDnsChallenge(authz, challenge, keyAuthorization, prefix = '
log(`DNS查询成功, 找到 ${recordValues.length} 条TXT记录${recordValues}`); log(`DNS查询成功, 找到 ${recordValues.length} 条TXT记录${recordValues}`);
if (!recordValues.length || !recordValues.includes(keyAuthorization)) { if (!recordValues.length || !recordValues.includes(keyAuthorization)) {
const err = `没有找到需要的DNS TXT记录: ${recordName},期望:${keyAuthorization},结果:${recordValues}` const err = `没有找到需要的DNS TXT记录: ${recordName},期望:${keyAuthorization},结果:${recordValues}`
log(err);
throw new Error(err); throw new Error(err);
} }

View File

@ -60,7 +60,8 @@ export class TencentEoDnsProvider extends AbstractDnsProvider {
"ZoneId": zoneId, "ZoneId": zoneId,
"Name": fullRecord, "Name": fullRecord,
"Type": type, "Type": type,
"Content": value "Content": value,
"TTL": 60,
}; };
try { try {