我遇到这样一种情况:我有一个子域名的 A 记录(我们称之为 sub1.example.org),但由于以下错误,我无法获取 LetsEncrypt 证书:
SERVFAIL looking up CAA for sub1.example.org - the domain's nameservers may be malfunctioning
此 A 记录与我托管服务提供商的任何其他有效 A 记录一样。它不包含任何特殊字符或类似的恶作剧。
当我执行时,dig sub1.example.org
我收到包含以下内容的响应:
; <<>> DiG 9.18.6 <<>> sub1.example.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1656
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;sub1.example.org. IN A
;; ANSWER SECTION:
sub1.example.org. 3600 IN A 123.123.123.123
;; Query time: 39 msec
;; SERVER: 8.8.8.8#53(8.8.8.8) (UDP)
;; WHEN: Sun Sep 25 05:41:36 CEST 2022
;; MSG SIZE rcvd: 68
文本status: NOERROR
让我相信查询或响应中没有错误。到目前为止一切顺利。然而,当我执行此操作时,nslookup sub1.example.org
我得到了以下信息:
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: sub1.example.org
Address: 123.123.123.123
** server can't find sub1.example.org: SERVFAIL
我已将此问题通知了我的 DNS 托管提供商,但他们表示,他们这边一切正常。他们向我发送了屏幕截图,显示使用完全相同的 DNS 服务器运行完全相同的命令并没有在他们这边引发错误。我查看了一些在线 nslookup 工具,它们也运行正常(或不显示 SERVFAIL 错误)。我该怎么办?
我已尝试在以下 DNS 服务器上执行 nslookup:
- 1.1.1.1
- 8.8.8.8
- 8.8.4.4
- 9.9.9.9
以上所有情况均会引发 SERVFAIL 错误。
我在本地机器(荷兰家用电脑上运行的 Ubuntu 22.04 WSL)和 VPS(德国 VPS 上运行的 Arch Linux)上都尝试过。我自己的电脑和 VPS 都出现同样的错误。
我再次通知了我的 DNS 托管提供商,但他们告诉我这个问题只存在于我这边。
[编辑 1] Dig +trace 输出:
; <<>> DiG 9.18.1-1ubuntu1.1-Ubuntu <<>> +trace sub1.example.org
;; global options: +cmd
. 10223 IN NS c.root-servers.net.
. 10223 IN NS l.root-servers.net.
. 10223 IN NS g.root-servers.net.
. 10223 IN NS h.root-servers.net.
. 10223 IN NS b.root-servers.net.
. 10223 IN NS d.root-servers.net.
. 10223 IN NS j.root-servers.net.
. 10223 IN NS e.root-servers.net.
. 10223 IN NS m.root-servers.net.
. 10223 IN NS f.root-servers.net.
. 10223 IN NS a.root-servers.net.
. 10223 IN NS k.root-servers.net.
. 10223 IN NS i.root-servers.net.
. 10223 IN RRSIG NS 8 0 518400 20221008040000 20220925030000 20826 . KYH9d3k6QX5Pg7F5BYEPzUINa9sZdet1fbniXxBmsagZVZiDC6uEJrtw GvHZncSGcaPsksAJ/IhD6LYkwbE58nxoPxou+MZckn+fWOEQaWdlLMW9 l5kq70FJiJ6tnRW8B/5VebRT1GnS+F8OF2WmkXoSmfnipAfPZP+vxKLW 7NWk+7BlT/K9o/F6a5aeoFXjojx9JsXWnHshoouXeLDP9imbXmHVvZap y2edPOU7WkOVDAoIxQUTT4fLxB0LtPzT2BzHhgZmN+rRQ9L0g8SmqJxK qgHHUakVlV8BXNQFRkyCTXxM9zpxY5iD2w7JYEI+TrXSd7ABPEeajcGo u3VgzQ==
;; Received 525 bytes from 8.8.8.8#53(8.8.8.8) in 10 ms
info. 172800 IN NS a2.info.afilias-nst.info.
info. 172800 IN NS d0.info.afilias-nst.org.
info. 172800 IN NS b2.info.afilias-nst.org.
info. 172800 IN NS c0.info.afilias-nst.info.
info. 172800 IN NS a0.info.afilias-nst.info.
info. 172800 IN NS b0.info.afilias-nst.org.
info. 86400 IN DS 5104 8 2 1AF7548A8D3E2950C20303757DF9390C26CFA39E26C8B6A8F6C8B1E7 2DD8F744
info. 86400 IN RRSIG DS 8 1 86400 20221009040000 20220926030000 20826 . NLEzXygGkC9f8mxW7vk+pkNbAQLgKXFJNFmoPgYTMz4cs20sQL4SJV9y 8TF5HtaKMoW1IdL2u8NKOQN9dkeC/JqT5GpN0BQxpJfWUTm7t/x/DdKT 1WFYkqLuKZY/Jg1y+DIJ/gVObOD+QMDFZse4vnWO1apIKShkS5fqB9fs mS1SDZTGEOhxN8xgf12nJxPsz2ZVfOehiZew/mYjs6PcUqMz8RgmMB8v oj7KsQSeupZ29FEC5+Qkz8ax36pBNUOQB6s47sg3jld8Hp6r8aI8aACK KRg2xDYR39ZFczUA68z8bH2eJPCX/sf33A/bjkdo9V/o4B59qTP3rtIN 2rwNSg==
;; Received 826 bytes from 192.33.4.12#53(c.root-servers.net) in 20 ms
@harrymc,希望这有帮助,我不太确定我在看什么。
答案1
不同之处在于,“dig”针对单一类型(默认情况下 IPv4 地址记录为“A”)进行一次 DNS 查询,而“host”和“nslookup”二查询,一次针对“A”记录,一次针对“AAAA”记录以显示 IPv4 和 IPv6 地址。如果仔细查看其输出,您会看到第一个查询成功,但第二查询(“AAAA”记录)是失败的查询。
(LetsEncrypt 发行服务器对“CAA” “发行政策”记录进行了不同的查询。)
比较:
dig sub1.example.org A ; query IPv4 address
dig sub1.example.org AAAA ; query IPv6 address
dig sub1.example.org CAA ; query PKI issuance policy
nslookup sub1.example.org ; query both IPv4 and IPv6
nslookup -debug sub1.example.org ; ...and show the raw requests
nslookup -q=A sub1.example.org ; query IPv4 address
nslookup -q=AAAA sub1.example.org ; query IPv6 address
nslookup -q=CAA sub1.example.org ; query PKI issuance policy (Linux only<1>)
<1> Beware that Windows nslookup.exe will not recognize 'CAA' as a valid type,
so trying to use -q=CAA will achieve nothing on Windows.
请注意,您应该首先针对权威性该域的名称服务器,因为它们是实际生成回复的服务器——尚未针对公共解析器,后者仅中继这些回复。如果您不确定哪些服务器对您的域具有权威性,请执行“NS”查询。
(第二个要测试的是公共解析器,除非该域的每个权威名称服务器都会返回正确的答案。
总的来说,听起来您域名的权威服务器正在错误处理没有数据的记录类型的查询。
通常情况下,当 DNS 中存在某个名称,但没有该特定类型的记录时,权威服务器仍必须返回成功回复 - 只不过回复中没有任何内容(零条记录)作为“答案”。即使服务器没有支持正在查询的特定记录类型。
但是,如果解析器报告 SERVFAIL,则意味着您的权威服务器根本没有回复,或者回复了错误代码——这两种做法都不正确。
几乎重复的线程,但情况略有不同(其中类似的问题仅在发布者内部可见,但在 LetsEncrypt 的服务器外部不可见):