Route 53에서 DNSSEC 구성 문제를 식별하고 해결하려면 어떻게 해야 하나요?

5분 분량
0

DNSSEC 구성 오류 때문에, Amazon Route 53에서 DNSSEC(예: 8.8.8.8 또는 1.1.1.1)를 지원하는 확인자의 DNS 확인에 잘못된 SERVFAIL 응답이 반환됩니다.

해결 방법

1단계: DNSSEC 구성 때문에 DNS 확인 오류가 발생하는지 확인

1.    dig 명령을 실행하여 Google DNS 확인자, 8.8.8.8을 통한 쿼리를 강제 실행합니다. Google DNS 확인자는 DNSSEC를 지원하며 DNSSEC가 잘못 구성된 경우 SERVFAIL 응답을 반환합니다. 다음 예시 명령에서 dnssec.example.live는 사용하는 도메인으로 바꿉니다.

$ dig dnssec.example.live @8.8.8.8

이전 명령의 출력에는 SERVFAIL 응답이 표시됩니다.

;  <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2  <<>> dnssec.example.live @8.8.8.8
;; global options: +cmd
;; Got answer:
;; -->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 30778
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;dnssec.example.live.    IN    A

;; Query time: 24 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Thu Apr 21 18:13:57 UTC 2022
;; MSG SIZE  rcvd: 52

2.    cd 플래그를 설정하고 dig 명령을 다시 실행합니다. cd 플래그는 DNSSEC를 확인하지 않고 쿼리를 확인합니다. 다음 예시 명령에서 dnssec.example.live는 사용하는 도메인으로 바꿉니다.

$ dig dnssec.example.live @8.8.8.8 +cd

다음 출력 예시에서는 잘못된 DNSSEC 구성 때문에 SERVFAIL 응답이 발생했음을 보여줍니다.

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> dnssec.example.live @8.8.8.8 +cd

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30235
;; flags: qr rd ra cd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;dnssec.example.live.    IN    A

;; ANSWER SECTION:
dnssec.example.live. 300    IN    A    10.10.10.10

;; Query time: 28 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Thu Apr 21 18:15:51 UTC 2022
;; MSG SIZE  rcvd: 68

2단계: 상위 영역에 생성된 DS 레코드 식별

참고: 등록기관이 TLD에 대한 DS 레코드를 추가합니다. 따라서 도메인 'example.com'의 상위 영역은 '.com' 영역입니다. 이 예에서 'dnssec.example.live'의 상위 영역은 'example.live'입니다.

1.    dig +trace 명령을 실행하여 상위 영역의 전체 위임 및 이름 서버를 확인합니다.

dig +trace dnssec.example.live

>>truncated for convenience

example.live.    3600    IN    NS    ns-xxx.awsdns-xx.net.
example.live.    3600    IN    NS    ns-xxxx.awsdns-xx.org.
example.live.    3600    IN    NS    ns-xxxx.awsdns-xx.co.uk.
example.live.    3600    IN    NS    ns-xxx.awsdns-xx.com.
example.live.    3600    IN    DS    28927 13 2 133329D78FFCD003D39BAB9386FC18A49807584CD42042B3F53E1293 8F63C5A7
example.live.    3600    IN    RRSIG    DS 8 2 3600 20220508154435 20220417144435 32325 live. HzdzyWb8+8G1vbzMWR/7usqN5GihWpuToRKnWv3NSXPnzzYaAFrkuYlU pX8izzvnXk/uyiCOcMShQPKfybgviNkm+yfyTwm3rOso8amJDz0Jz8ml lz7jhgH0k04gLbbT7i8Ez8k8qPLB9MVb1jtVz7rjl6k4Y4m38aHUMy0D lxk=
;; Received 404 bytes from 65.22.22.1#53(v0n2.nic.live) in 1 ms

dnssec.example.live. 10    IN    NS    ns-xxxx.awsdns-xx.org.
dnssec.example.live. 10    IN    NS    ns-xxx.awsdns-xx.com.
dnssec.example.live. 10    IN    NS    ns-xxxx.awsdns-xx.co.uk.
dnssec.example.live. 10    IN    NS    ns-xxx.awsdns-xx.net.
dnssec.example.live. 300    IN    DS    41670 13 2 DE085966266F92FA81BBE2829AD9CD8C2C7FC8109D748F49B5A99D2F A1893581
dnssec.example.live. 300    IN    RRSIG    DS 13 3 300 20220421192820 20220421172320 53547 example.live. xdwGnGasWO2sbZQoAfYdZK2bAMcpYOjMR+mg2ilt00XDIwrPc/Qac1k2 Lc2NpAcFpgb3KbhzFxpd3Z7qXjPsvw==
;; Received 352 bytes from 205.251.197.102#53(ns-xxxx.awsdns-xx.org) in 6 ms

dnssec.example.live. 300    IN    A    1.1.1.1
dnssec.example.live. 300    IN    RRSIG    A 13 3 300 20220421192821 20220421172321 51615 dnssec.example.live. sMzXesnw+7pSHK2Mlkossyjml8sK7RhgKyu50J/P3/TEeChPzia8EfDb nbv3fFDxXQcbqPH+M+6KlQ7JrAmBig==
;; Received 187 bytes from 205.251.192.150#53(ns-xxx.awsdns-xx.com) in 14 ms

2.    상위 영역에서 DS 레코드를 확인하려면 상위 영역의 이름 서버(이 예에서는 example.live)를 통해 다음 쿼리를 실행합니다.

`$ dig DS dnssec.example.live @ns-xxx.awsdns-xx.net. +short `
41670 13 2 DE085966266F92FA81BBE2829AD9CD8C2C7FC8109D748F49B5A99D2F A1893581

부모 영역에서 DS 레코드를 구성합니다. 그런 다음 DS 레코드를 하위 영역의 공개 KSK 해시 값과 비교하여 DS 레코드가 정확한지 확인합니다.

3단계: 호스팅 영역에 대해 DNSSEC 서명이 활성화되었는지 확인

다음 명령을 실행하여 호스팅 영역에 대해 DNSSEC 서명이 활성화되었는지 확인합니다.

$ dig DNSKEY dnssec.example.live @ns-xxxx.awsdns-xx.org +noall +answer +multiline

다음 출력은 DNSSEC 서명이 활성화되어 있음을 보여주고 해당 영역에 있는 공개 키를 나열합니다.

`; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> DNSKEY dnssec.example.live @ns-xxxx.awsdns-xx.org +noall +answer +multiline`  
`;; global options: +cmd`  
`dnssec.example.live. 3600 IN DNSKEY    256 3 13 (`  
`                4xMqBH+v21Ria6T00Oq08fY8S3FxA9XFp34uDQm0dBpk`  
`                l6MwBNLZxpwpzS35yunxEYKwHkoPnMtu1bckRFauJg==`  
`                ) ; ZSK; alg = ECDSAP256SHA256 ; key id = 51615`  
`dnssec.example.live. 3600 IN DNSKEY    257 3 13 (`  
`                pvoQ+Q2TvJKRuxdv8yuJhLkJhdrYUf/ZA2REWUTAXsfS`  
`                laK0MFDzCurSXXjlQxQoVGauDe5CwGufXl40fVzt/w==`  
`                ) ; KSK; alg = ECDSAP256SHA256 ; key id = 41670`

명령이 응답을 생성하지 않으면 호스팅 영역에서 DNSSEC 서명이 활성화되지 않은 것입니다. DNSSEC가 활성화되지 않은 경우 등록기관에서 DS 레코드를 제거합니다.

4단계: 상위 영역에 생성된 올바른 DS 레코드가 무엇인지 확인

1.    다음 명령을 실행하여 bind와 bind-ultis를 설치합니다.

$ sudo yum install bind bind-utils -y

2.    다음 명령을 실행하여 상위 영역에 생성된 올바른 DS 레코드를 가져옵니다.

$ dig DNSKEY dnssec.example.live @ns-xxxx.awsdns-xx.org. | dnssec-dsfromkey -2 -f - dnssec.example.live

dnssec.example.live. IN DS 41670 13 2 DE085966266F92FA81BBE2829AD9CD8C2C7FC8109D748F49B5A99D2FA1893580

5단계: 4단계에서 얻은 DS 레코드를 2단계에서 얻은 DS 레코드와 일치시킴

상위 영역에 생성된 DS 레코드가 4단계에서 가져온 DS 레코드와 일치하는지 확인합니다.

2단계부터:

41670 13 2 DE085966266F92FA81BBE2829AD9CD8C2C7FC8109D748F49B5A99D2F A1893581 << Incorrect string

4단계부터:

41670 13 2 DE085966266F92FA81BBE2829AD9CD8C2C7FC8109D748F49B5A99D2FA1893580

앞의 예시의 경우 상위 영역(2단계부터)에 구성된 DS 레코드의 해시 값이 올바르지 않습니다. 이러한 불일치로 인해 DNS 확인 문제가 발생합니다.

문제를 해결하려면 등록기관 끝(상위 영역)에서 올바른 DS 레코드 값을 생성합니다. Route 53에 등록된 도메인의 경우 get-dnssec 명령을 사용하여 도메인 대한 공개 키를 추가하기 위한 올바른 정보를 얻습니다.

참고: AWS Command Line Interface(AWS CLI)를 실행할 때 오류가 발생하면 최신 버전의 AWS CLI를 실행하고 있는지 확인합니다.

$ aws --region us-east-1 route53 get-dnssec --hosted-zone-id $hostedzone_id
AWS 공식
AWS 공식업데이트됨 일 년 전