【问题标题】:DNS cname resolving always results in errorDNS cname 解析总是导致错误
【发布时间】:2022-01-07 19:37:14
【问题描述】:
$ node
> const dns = require('dns');
> dns.resolveMx('nodejs.org', (err, value) => { 
    if(err) { 
        console.log(err); 
        return; 
    } 
    console.log(value); 
})
> [
  { 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 }
]
> dns.resolveCname('nodejs.org', (err, value) => { 
    if(err) { 
        console.log(err); 
        return; 
    } 
    console.log(value); 
})
> 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 实例中对此进行了测试。我得到相同的结果。我在 EC2 实例中检查并打开了 DNS 端口。我仍然收到错误。

有人能解释一下吗?

【问题讨论】:

  • 因为那些域没有设置 CNAME?
  • 可能是,nodejs.org 不是。我还使用添加了 CNAME 记录的域进行了检查。我得到了同样的回应。
  • DNS NODATA 并不完全是一个错误,无论如何它是一个伪错误。它只是意味着您查询的名称存在(否则您会收到 NXDOMAIN 错误)但您想要的该名称的记录类型不存在。因此“没有数据”。根据 DNS 规则,您不能在顶点使用 CNAME

标签: node.js dns


【解决方案1】:

我对@9​​87654321@ API 的理解不正确。 看来,解析发生在给定的主机级别。

如果我使用nodejs.org 进行Cname 解析,它总是会给出ENODATA 错误。但是,如果我使用docs.nodejs.org 进行Cname 解析,它会给出[ 'nodejs.org' ]

因此,如果给定的主机名没有任何关联的 CNAME,dns.resolveCname 总是给出ENODATA

【讨论】:

  • "如果我使用 nodejs.org 进行 Cname 解析,它总是给出 ENODATA 错误。"对于任何区域,您都不能在顶点拥有 CNAME 记录。这是每个标准 DNS 设计。
  • @PatrickMevzek,你想写你的 cmets 作为答案吗?我会接受的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多