Разрешение DNS cname всегда приводит к ошибке

#node.js #dns

#node.js #dns

Вопрос:

 $ node gt; const dns = require('dns'); gt; dns.resolveMx('nodejs.org', (err, value) =gt; {   if(err) {   console.log(err);   return;   }   console.log(value);  }) gt; [  { exchange: 'aspmx2.googlemail.com', priority: 30 },  { exchange: 'aspmx3.googlemail.com', priority: 30 },  { exchange: 'aspmx.l.google.com', priority: 10 },  { exchange: 'alt1.aspmx.l.google.com', priority: 20 },  { exchange: 'alt2.aspmx.l.google.com', priority: 20 } ] gt; dns.resolveCname('nodejs.org', (err, value) =gt; {   if(err) {   console.log(err);   return;   }   console.log(value);  }) gt; Error: queryCname ENODATA nodejs.org  at QueryReqWrap.onresolve [as oncomplete] (node:dns:213:19)  at QueryReqWrap.callbackTrampoline (node:internal/async_hooks:130:17) {  errno: undefined,  code: 'ENODATA',  syscall: 'queryCname',  hostname: 'nodejs.org' }  

почему?

Другими словами, разрешение CNAME для данного хоста всегда приводит ENODATA к ошибке. Я протестировал это на своей машине и в экземпляре EC2. Я получаю те же результаты. Я проверил и открыл DNS-порты в экземпляре EC2. У меня все еще есть ошибка.

Может ли кто-нибудь пролить свет на это?

Комментарии:

1. Потому что у этих доменов нет набора CNAME?

2. Может быть, nodejs.org и нет. Я также проверил, используя домен, в который я добавил запись CNAME. Я получил тот же ответ.

3. DNS NODATA-это не совсем ошибка, и в любом случае это псевдо-ошибка. Это просто означает, что имя, которое вы запрашиваете, существует (в противном случае вы получили бы ошибку NXDOMAIN), но тип записи, который вы хотите для этого имени, не существует. Следовательно, «нет данных». И согласно правилам DNS, у вас не может быть CNAME at apex.

Ответ №1:

Мое понимание dns.resolveCname API было неверным. Похоже, что разрешение происходит на данном уровне хоста.

Если я использую nodejs.org разрешение Cname, оно всегда выдает ENODATA ошибку. Но, если я использую docs.nodejs.org для разрешения Cname, это дает [ 'nodejs.org' ] .

Поэтому, если с данным именем хоста не связано какое-либо имя CNAME, dns.resolveCname всегда выдает ENODATA .

Комментарии:

1. «Если я использую nodejs.org для разрешения Cname это всегда приводит к ошибке ENODATA». У вас не может быть записи CNAME в apex для любой зоны. Это соответствует стандартному дизайну DNS.

2. @PatrickMevzek, вы хотите написать свои комментарии в качестве ответа? Я приму это.