티스토리 뷰

출처 : aws.amazon.com/ko/premiumsupport/knowledge-center/partial-dns-failures/

 

부분적인 DNS 장애 이해 및 해결

DNS는 어떻게 작동하며 부분적 DNS 장애를 해결하는 방법은 무엇입니까? AWS 고객은 DNS(Domain Name System)를 통해 확인되는 도메인 이름을 사용하여 AWS 리소스에 연결합니다. RFC 1034에서 도입된 DNS는

aws.amazon.com

문제

DNS는 어떻게 작동하며 부분적 DNS 장애를 해결하는 방법은 무엇입니까?

간략한 설명

AWS 고객은 DNS(Domain Name System)를 통해 확인되는 도메인 이름을 사용하여 AWS 리소스에 연결합니다. RFC 1034에서 도입된 DNS는 “DNS 확인”이라는 프로세스를 통해 기억하기 쉬운 이름(예: www.example.com)을 192.0.2.1 같은 숫자 IP 주소로 변환하여 사용자를 인터넷 애플리케이션으로 라우팅하는 데 사용됩니다. 신뢰할 수 있는 이름 서버는 IP 주소와 대조하여 도메인 이름을 확인한 후 DNS 확인자의 체인을 통해 클라이언트(예: 웹 사이트 보기를 요청하는 사용자의 컴퓨터)에 해당 IP 주소를 전달합니다. 그러면 클라이언트가 해당 IP 주소를 사용하여 웹 사이트를 호스팅하는 서버에 연결하고, 서버는 클라이언트에 웹 사이트를 제공합니다. DNS가 정상적으로 작동하지 않으면 DNS 서버가 도메인 이름을 확인할 수 없으므로 클라이언트에 웹 사이트가 호스팅되는 서버의 IP 주소를 제공하지 못합니다. 즉, 인터넷에서 더 이상 해당 웹 사이트에 액세스할 수 없습니다. AWS는 Amazon Route 53과 타사 서비스 제공업체를 활용하여 AWS 도메인 이름이 항상 확인되도록 보장하는 데 각별히 주의를 기울이고 있습니다.

​해결 방법

DNS는 대규모 분산 계층형 데이터베이스입니다. 즉, 각 도메인마다 도메인의 리소스 레코드에 대한 질문에 답하는 일련의 신뢰할 수 있는 이름 서버가 필요합니다. 이 일련의 신뢰할 수 있는 이름 서버는 도메인 소유자가 제어하지만, 대부분의 도메인 소유자는 이 권한을 프록시에 위임하여 DNS 서비스를 제공합니다.

클라이언트가 도메인 이름의 IP 주소를 확인해야 할 때 클라이언트 시스템은 이 프로세스를 확인자에게 넘기고 확인자는 IP 주소를 찾아 클라이언트에 반환합니다. 이 프로세스는 다음과 같이 작동합니다.

  1. 루트 이름 서버의 목록이 사전 구성되어 있는 확인자는 해당 루트 이름 서버 중 하나를 무작위로 선택하여 TLD(최상위 도메인)의 신뢰할 수 있는 이름 서버 목록을 묻습니다.
  2. 해당 루트 이름 서버는 TLD의 신뢰할 수 있는 이름 서버와 그 IP 주소의 목록으로 응답합니다.
  3. 그러면 확인자는 2단계에서 반환된 이름 서버 중 하나를 무작위로 선택하여 도메인의 신뢰할 수 있는 이름 서버 목록을 묻습니다.
  4. TLD 서버는 도메인에 대해 신뢰할 수 있는 이름 서버 목록으로 응답합니다.
  5. 확인자는 이름 서버 하나를 무작위로 선택하여 그 신뢰할 수 있는 이름 서버에서 리소스 레코드의 IP 주소를 요청합니다.

DNS 제공업체는 여러 지리적 위치에서 서비스를 제공하며 대개 가용성을 높이기 위해 캐싱된 결과를 사용합니다. 캐싱된 결과를 사용하면 DNS 확인자를 사용할 때 일시적으로 발생하는 문제를 방지할 수 있지만 잘못된 결과가 캐싱될 경우 복구 시간이 길어질 수 있습니다(예: 음성 캐싱으로 인해). 당사는 외부 DNS 문제가 EC2 리전에서 AWS 도메인 이름의 DNS 확인에 영향을 미치지 않도록 보장하는 조치를 취하고 있습니다.

전형적인 DNS 장애 사례로, 신뢰할 수 있는 이름 서버가 하나 이상 응답하지 않는 경우를 들 수 있습니다. 다음과 같은 신뢰할 수 있는 이름 서버 목록(위임 세트라고도 함)이 있는 가상의 도메인이 있다고 가정해 보겠습니다.

  • ns-576.awsdns-08.net.
  • ns-1086.awsdns-07.org.
  • ns-1630.awsdns-11.co.uk.
  • ns-47.awsdns-05.com.
  • pdns1.ultradns.net.
  • pdns6.ultradns.co.uk.

이들 이름 서버 중 하나를 사용할 수 없는 경우 해당 이름 서버로 전달되는 DNS 쿼리에 응답하지 못합니다. 클라이언트가 응답을 수신하지 못하면 다른 신뢰할 수 있는 이름 서버를 사용해 요청을 시도할 수 있습니다. 신뢰할 수 있는 이름 서버가 응답하지 않거나 예상과 다른 정보로 응답하면 로컬 확인자가 SERVFAIL 메시지를 반환합니다.

Linux 유형의 운영 체제에서 DNS 장애를 해결하려면 dig 명령을 사용합니다. dig 명령은 호스트의 /etc/resolv.conf 파일에 구성된 클라이언트 DNS 서버에 대해 조회를 수행합니다.

$ dig www.amazon.com  <--해결법

 

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.49.amzn1 <<>> www.amazon.com

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13150

;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

 

;; QUESTION SECTION:

;www.amazon.com.    IN    A

 

;; ANSWER SECTION:

www.amazon.com.        41    IN    A    54.239.17.6

 

;; Query time: 1 msec

;; SERVER: 10.108.0.2#53(10.108.0.2)

;; WHEN: Fri Oct 21 21:43:11 2016

;; MSG SIZE rcvd: 48

앞의 예에서 응답 섹션을 보면 www.amazon.com의 HTTP 서버 IP 주소가 54.239.17.6인 것을 알 수 있습니다.

+trace 변수를 추가하면 dig 명령이 DNS 레코드의 재귀 조회도 수행할 수 있습니다.

$ dig +trace www.amazon.com  <-- 해결법

 

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.49.amzn1 <<>> +trace www.amazon.com

;; global options: +cmd

.        518400    IN    NS    J.ROOT-SERVERS.NET.

.        518400    IN    NS    K.ROOT-SERVERS.NET.

.        518400    IN    NS    L.ROOT-SERVERS.NET.

;; Received 508 bytes from 10.108.0.2#53(10.108.0.2) in 31 ms

 

com.        172800    IN    NS    a.gtld-servers.net.

com.        172800    IN    NS    b.gtld-servers.net.

com.        172800    IN    NS    c.gtld-servers.net.

;; Received 492 bytes from 193.0.14.129#53(193.0.14.129) in 93 ms

 

amazon.com.        172800    IN    NS    pdns1.ultradns.net.

amazon.com.        172800    IN    NS    pdns6.ultradns.co.uk.

;; Received 289 bytes from 192.33.14.30#53(192.33.14.30) in 201 ms

 

www.amazon.com.    900    IN    NS    ns-1019.awsdns-63.net.

www.amazon.com.    900    IN    NS    ns-1568.awsdns-04.co.uk.

www.amazon.com.    900    IN    NS    ns-277.awsdns-34.com.

;; Received 170 bytes from 204.74.108.1#53(204.74.108.1) in 87 ms

 

www.amazon.com.    60     IN    A    54.239.26.128

www.amazon.com.    1800   IN    NS   ns-1019.awsdns-63.net.

www.amazon.com.    1800   IN    NS   ns-1178.awsdns-19.org.

;; Received 186 bytes from 205.251.195.251#53(205.251.195.251) in 7 ms

이름 서버만 반환하는 쿼리를 수행할 수도 있습니다.

$ dig -t NS www.amazon.com

 

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.49.amzn1 <<>> -t NS www.amazon.com

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48631

;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0

 

;; QUESTION SECTION:

;www.amazon.com.        IN    NS

 

;; ANSWER SECTION:

www.amazon.com.        490    IN    NS    ns-1019.awsdns-63.net.

www.amazon.com.        490    IN    NS    ns-1178.awsdns-19.org.

www.amazon.com.        490    IN    NS    ns-1568.awsdns-04.co.uk.

www.amazon.com.        490    IN    NS    ns-277.awsdns-34.com.

 

;; Query time: 0 msec

;; SERVER: 10.108.0.2#53(10.108.0.2)

;; WHEN: Fri Oct 21 21:48:20 2016

;; MSG SIZE rcvd: 170

이 예에서 www.amazon.com에는 다음 4개의 신뢰할 수 있는 이름 서버가 있습니다.

  • ns-1019.awsdns-63.net.
  • ns-1178.awsdns-19.org.
  • ns-1568.awsdns-04.co.uk.
  • ns-277.awsdns-34.com.

이 서버들 중 하나라도 www.amazon.com 호스트 이름에 대한 질문에 신뢰성 있게 답할 수 있어야 합니다. dig 명령에서 특정 이름 서버를 직접 대상으로 지정하여 특정 도메인의 모든 신뢰할 수 있는 이름 서버가 올바르게 답하는지를 확인할 수 있습니다.

다음은 신뢰할 수 있는 이름 서버 중 하나(ns-1019.awsdns-63.net)로 전달된 www.amazon.com에 대한 쿼리의 출력입니다. 54.239.25.192에서 www.amazon.com에 접속 가능한 것으로 답하고 있습니다.

$ dig www.amazon.com @ns-1019.awsdns-63.net.

 

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.49.amzn1 <<>> www.amazon.com @ns-1019.awsdns-63.net.

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31712

;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 0

;; WARNING: recursion requested but not available

 

;; QUESTION SECTION:

;www.amazon.com.    IN    A

 

;; ANSWER SECTION:

www.amazon.com.        60    IN    A    54.239.25.192

 

;; AUTHORITY SECTION:

www.amazon.com.        1800    IN    NS    ns-1019.awsdns-63.net.

www.amazon.com.        1800    IN    NS    ns-1178.awsdns-19.org.

www.amazon.com.        1800    IN    NS    ns-1568.awsdns-04.co.uk.

 

;; Query time: 7 msec

;; SERVER: 205.251.195.251#53(205.251.195.251)

;; WHEN: Fri Oct 21 21:50:00 2016

;; MSG SIZE rcvd: 186

다음 코드 줄은 ns-576.awsdns-08.net이 amazon.com의 신뢰할 수 있는 이름 서버임을 보여 줍니다.

;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 0

aa 플래그는 이름 서버 ns-1019.awsdns-63.net이 리소스 레코드 www.amazon.com에 대해 신뢰할 수 있는 답을 제공했음을 나타냅니다.

Windows 기반 운영 체제에서는 nslookup 유틸리티를 사용합니다. 다음 예에서 보듯이 nslookup은 호스트 이름에 해당하는 IP 주소를 반환합니다.

C:\>nslookup www.amazon.com

Server:     ip-10-20-0-2.ec2.internal

Address:    10.20.0.2

 

Non-authoritative answer:

Name:       www.amazon.com

Address:    54.239.25.192

nslookup 유틸리티를 사용하여 호스트 이름에 대한 신뢰할 수 있는 이름 서버를 확인하려면 -type=NS 플래그를 사용합니다.

C:\>nslookup -type=NS www.amazon.com

Server:     ip-10-20-0-2.ec2.internal

Address:    10.20.0.2

 

Non-authoritative answer:

www.amazon.com    nameserver = ns-277.awsdns-34.com

www.amazon.com    nameserver = ns-1019.awsdns-63.net

www.amazon.com    nameserver = ns-1178.awsdns-19.org

www.amazon.com의 ns-277.awsdns-34.com이 www.amazon.com에 대한 요청에 올바르게 응답하는지 확인하려면 다음 구문을 사용합니다.

C:\>nslookup www.amazon.com ns-277.awsdns-34.com

Server:     UnKnown

Address:    205.251.193.21

 

Name:       www.amazon.com

Address:    54.239.25.200

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함