我目前有以下 DNS 设置。
域名:domain.tld 示例 IPv4:1.2.3.4 示例 IPv6:fe80::1
Host Type Destination
* A 1.2.3.4
* AAAA fe80::1
此设置完全符合预期。如果我打开任何软件并输入 noteexisting.domain.tld,我会得到有效的解析 1.2.3.4
现在来谈谈问题:如果我现在简单地为 Let's Encrypt DNS 验证添加一个 TXT 记录,其中包含以下内容:
Host Type Destination
_acme-challenge.notexisting TXT XrcC2WczNeJNvhNfbLFjE0iawzIZTlR6BEmD4OxF-pw
TTL 失效后,我再次查询区域,得到以下结果:
noteexisting.domain.tld 仅返回 SOA 和 TXT。我认为这很奇怪,因为如果我向区域添加另一个子域,DNS 将在 DNS 验证期间失败。我该如何防止这种情况发生?
我使用 Bind 和 PowerDNS 软件进行了测试并得到了相同的结果。
答案1
考虑到通配符的工作方式,这听起来像是预期的行为。
通配符仅适用于树的分支不存在。添加后,分支的记录_acme-challenge.notexisting
仍然notexisting
存在,即通配符不再适用于该分支。
您想要的是添加相关记录,而notexisting
不是依赖该通配符。(也许通配符一开始就不是正确的解决方案?)
如果此处的用例涉及动态添加新子域,BIND 和 PowerDNS 都支持动态更新 (RFC2136),或者 PowerDNS 还具有 REST API。因此,两者都应该能够以编程方式添加记录。