PowerDNS 缓存 NXDOMAIN 的 AAAA 记录,但存在有效的 A 记录

PowerDNS 缓存 NXDOMAIN 的 AAAA 记录,但存在有效的 A 记录

我在使用 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,它会再次针对一个请求起作用。

我可以看到几个可以修复它的选项:

  1. 让上游 DNS 服务器在没有 NXDOMAIN 的情况下响应

如果上游 DNS 服务器行为不正确,是否有任何 RFC 描述此行为?到目前为止我还没有找到任何东西。我希望能够指出一些文档说:“这已损坏,这就是原因”。

  1. 更改 PowerDNS 以删除 AAAA 查询

我无法找到任何有关如何执行此操作的文档。这必须是在系统级别,我提供的curl 命令只是一个示例,DNS 查询可以来自任何地方。

答案1

NXDOMAIN 表示该名称(及其下面的任何名称)不存在。因此,PowerDNS 运行正常,而权威 DNS 服务器存在问题。

另请参阅https://www.rfc-editor.org/rfc/rfc8020.html

相关内容