我在使用 PowerDNS 时遇到了一个奇怪的问题。向我描述的最初问题是,可以向 下的域发出一个 HTTP 请求staging.corp
,但此后的任何请求都会因 DNS 错误而失败。
我想我已经发现了这个问题,但我不明白为什么会发生这种情况,以及它是否是有效的行为,或者我是否应该向 PowerDNS 人员提交错误。
上游 DNS 服务器返回有效的 A 记录,但返回 AAAA 记录的 NXDOMAIN。似乎第一次发出请求时,返回了有效的 A 记录,但随后 NXDOMAIN 被缓存,任何新请求都会立即返回 NXDOMAIN。
第 1 步:确认 DNS 正在运行
root:~# grep -v ^# /etc/powerdns/recursor.conf | grep -v ^$
etc-hosts-file=/etc/powerdns/hosts
export-etc-hosts=on
forward-zones-file=/etc/powerdns/recursor-forward-zones
local-port=53
quiet=yes
setgid=pdns
setuid=pdns
root:~# cat /etc/powerdns/recursor-forward-zones
+staging.corp=10.100.251.99
+.=8.8.8.8
root:~# dig m.emu.staging.corp
; <<>> DiG 9.11.3-1ubuntu1.18-Ubuntu <<>> m.emu.staging.corp
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39857
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;m.emu.staging.corp. IN A
;; ANSWER SECTION:
m.emu.staging.corp. 6 IN A 10.200.145.22
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Mar 31 09:45:47 PDT 2023
;; MSG SIZE rcvd: 67
第 2 步:提出请求
root:~# curl https://m.emu.staging.corp
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title></title>
<meta HTTP-EQUIV="REFRESH" content="0; url=https://mobile.emu.staging.corp">
</head>
<body>
</body>
</html>
步骤3:再次检查DNS,记下NX域
root:~# dig m.emu.staging.corp
; <<>> DiG 9.11.3-1ubuntu1.18-Ubuntu <<>> m.emu.staging.corp
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 15030
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;m.emu.staging.corp. IN A
;; AUTHORITY SECTION:
staging.corp. 165 IN SOA ns.corp. dns-admin.corp. 2022052303 10800 7200 2419200 3600
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Mar 31 09:46:03 PDT 2023
;; MSG SIZE rcvd: 127
上游 DNS 服务器正在响应有效的 A 记录:
root:~# dig @10.100.251.99 m.emu.staging.corp a
; <<>> DiG 9.11.3-1ubuntu1.18-Ubuntu <<>> @10.100.251.99 m.emu.staging.corp a
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55158
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;m.emu.staging.corp. IN A
;; ANSWER SECTION:
m.emu.staging.corp. 10 IN A 10.200.145.22
;; Query time: 46 msec
;; SERVER: 10.100.251.99#53(10.100.251.99)
;; WHEN: Fri Mar 31 09:46:44 PDT 2023
;; MSG SIZE rcvd: 56
但 NXDOMAIN 对于AAAA:
root:~# dig @10.100.251.99 m.emu.staging.corp aaaa
; <<>> DiG 9.11.3-1ubuntu1.18-Ubuntu <<>> @10.100.251.99 m.emu.staging.corp aaaa
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 10062
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;m.emu.staging.corp. IN AAAA
;; AUTHORITY SECTION:
staging.corp. 1800 IN SOA ns.corp. dns-admin.corp 2022052303 10800 7200 2419200 3600
;; Query time: 109 msec
;; SERVER: 10.100.251.99#53(10.100.251.99)
;; WHEN: Fri Mar 31 09:46:48 PDT 2023
;; MSG SIZE rcvd: 127
如果我重新启动 pdns-recursor,它会再次针对一个请求起作用。
我可以看到几个可以修复它的选项:
- 让上游 DNS 服务器在没有 NXDOMAIN 的情况下响应
如果上游 DNS 服务器行为不正确,是否有任何 RFC 描述此行为?到目前为止我还没有找到任何东西。我希望能够指出一些文档说:“这已损坏,这就是原因”。
- 更改 PowerDNS 以删除 AAAA 查询
我无法找到任何有关如何执行此操作的文档。这必须是在系统级别,我提供的curl 命令只是一个示例,DNS 查询可以来自任何地方。
答案1
NXDOMAIN 表示该名称(及其下面的任何名称)不存在。因此,PowerDNS 运行正常,而权威 DNS 服务器存在问题。