我很难理解启用 let 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 支持。他们不知道这里出了什么问题和/或为什么会发生这种情况。
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
,所以当你再次询问时,这就是你得到的。这能把事情弄清楚吗?