PowerDNS를 사용할 때 이상한 문제가 발생했습니다. 나에게 설명된 초기 문제는 다운된 도메인에 HTTP 요청을 할 수 있지만 staging.corp
후속 요청은 DNS 오류로 인해 실패한다는 것입니다.
문제를 발견한 것 같지만 왜 이런 일이 발생하는지, 이것이 유효한 동작인지 또는 PowerDNS 담당자에게 버그를 신고해야 하는지 이해할 수 없습니다.
업스트림 DNS 서버는 유효한 A 레코드를 반환하지만 NXDOMAIN에 대해서는 AAAA 레코드를 반환합니다. 처음 요청이 이루어지면 유효한 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가 있습니까? 지금까지 나는 아무것도 찾지 못했습니다. "이것이 깨졌는데 이것이 이유입니다"라는 문서를 지적할 수 있었으면 좋겠습니다.
- AAAA 쿼리를 제거하도록 PowerDNS 변경
이 작업을 수행하는 방법에 대한 문서를 찾을 수 없습니다. 이는 시스템 수준이어야 하며 제가 제공한 컬 명령은 단지 예일 뿐이며 DNS 쿼리는 어디에서나 올 수 있습니다.
답변1
NXDOMAIN은 해당 이름(및 그 아래의 모든 이름)이 존재하지 않음을 의미합니다. 따라서 PowerDNS는 정상적으로 작동하고 있으나, 권한 있는 DNS 서버에 문제가 있습니다.