如果已定义子主机名,则 DNS 主机名不再解析

如果已定义子主机名,则 DNS 主机名不再解析

我无法理解启用 lets encrypt 时对子域名的 DNS 名称解析产生的特定影响。

我的问题背景:

我有一个域名(basjes.nl),并且我已将该域中的所有主机名设置为解析为同一个 IP 地址。

在我的 DNS 提供商(Transip)的 UI 中,我看到如下内容:

@                      A      x.x.x.x
*                      CNAME  @

现在我可以这样做来获取指定的 IP 地址。

dig blurp.basjes.nl

最近我部署了ACME-DNS 工具并设置适当的 DNS 条目(即将 auth.basjes.nl 委托给我自己的 ACME-DNS 服务器)以允许 Lets Encrypt 通过 DNS 验证我拥有指定的主机名。

对于这个特定的主机名,我想要一个“全名”HTTPS 证书(即不是通配符),所以我添加了如下内容:

_acme-challenge.blurp  CNAME  something.auth.basjes.nl.

添加此条目后,我发现这样做dig blurp.basjes.nl不再有效。奇怪的是,我没有收到错误(所以没有 NXDOMAIN),我要么什么都没有得到,要么只是

;; AUTHORITY SECTION:
basjes.nl.      300 IN  SOA ns0.transip.net. hostmaster.transip.nl. 2018041107 14400 1800 2419200 300

所以现在我有这样的事情:

@                      A      x.x.x.x
*                      CNAME  @
_acme-challenge.blurp  CNAME  something.auth.basjes.nl.

我发现如果我为该主机名添加一个明确的 DNS 记录,那么它突然又可以工作了:

@                      A      x.x.x.x
*                      CNAME  @
blurp                  CNAME  @
_acme-challenge.blurp  CNAME  something.auth.basjes.nl.

我想了解的效果:

  • 为什么询问普通 DNS 服务器时它不再解析?

    ‘*’记录仍然存在!

    dig blurp.basjes.nl @1.1.1.1

  • 为什么直接询问 Transip 的 SOA DNS 服务器时它会解析?

    dig blurp.basjes.nl @ns0.transip.net

  • 为什么添加明确记录时它会解决?

    这是我目前使用的一种解决方法,以使它能够为我工作。

PS:在发布此问题之前,我已经联系过 Transip 支持人员。他们不知道这里出了什么问题,也不知道为什么会发生这种情况。

答案1

DNS 是分层的。当你添加 name 时_acme-challenge.blurp.basjes.nl,这意味着blurp.basjes.nl也被隐式地添加了。这里可能令人惊讶的是名称可以存在而无任何内容。以前,当你dig询问blurp.basjes.nl时,你会得到一个完全正确和准确的答案:该名称存在,但不包含任何记录。这种情况,即名称的存在仅仅是因为 DNS 树中它下面有其他名称,称为空的非终结符。如果你想了解更多,可以谷歌一下该术语。

这是您令人困惑的行为的第一部分。第二部分是:当且仅当所要求的名称不存在时,通配符记录才用于生成答案。因此,首先您请求blurp.basjes.nl并获得了由通配符生成的答案。然后您添加了_acme-challenge.blurp.basjes.nl。当您之后再次询问时,该名称blurp.basjes.nl确实存在(如上所述),因此未使用通配符。但由于blurp.basjes.nl其中没有记录,您得到的只是一个空的响应。之后您添加了一条CNAME记录blurp.basjes.nl,所以当您再次询问时,这就是您得到的返回结果。

这样事情就清楚了吗?

相关内容