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

6분 분량
0

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

해결 방법

DNS 개요

DNS는 기억하기 쉬운 이름(예: www.example.com)을 192.0.2.1과 같은 숫자 IP 주소로 변환하여 사용자를 인터넷 애플리케이션으로 라우팅합니다. 이 프로세스를 “DNS 확인”이라고 합니다. 신뢰할 수 있는 이름 서버는 하나의 IP 주소 또는 여러 IP 주소와 대조하여 도메인 이름을 확인한 후 DNS 확인자의 체인을 통해 클라이언트(예: 웹 사이트 보기를 요청하는 사용자의 컴퓨터)에 해당 IP 주소를 전달합니다. 그러면 클라이언트는 해당 IP 주소를 사용하여 웹 사이트가 호스팅되는 서버에 연결합니다. DNS가 제대로 작동하지 않으면 DNS 서버가 도메인 이름을 확인할 수 없습니다. 따라서 DNS 서버는 웹 사이트가 호스팅되는 서버의 IP 주소를 클라이언트에 제공할 수 없습니다. 즉, 이러한 웹 사이트는 인터넷에서 액세스할 수 없습니다.

자세한 내용은 DNS란 무엇입니까?를 참조하세요.

부분적, 일시적 또는 간헐적 DNS 장애 시나리오

경우에 따라 클라이언트에 단기간 또는 간헐적으로 DNS 장애가 발생할 수 있습니다. 다음은 부분 DNS 장애를 유발할 수 있는 일반적인 시나리오입니다.

시나리오 1: 등록 기관에서 잘못 구성된 이름 서버

등록 기관에서 하나 이상의 이름 서버가 잘못 구성된 경우가 있습니다. “whois” 조회는 도메인 등록 기관에 구성된 이름 서버를 제공합니다. 이 경우 DNS 확인 중에 등록된 이름 서버가 응답하지 않거나 예기치 않은 정보로 응답하면 로컬 확인자가 SERVFAIL 메시지를 반환합니다. 그러나 경우에 따라 로컬 확인자가 다른 이름 서버로 요청을 시도하여 결과를 반환할 수 있습니다.

또한 로컬 확인자는 TTL 시간 동안 잘못된 이름 서버를 캐시할 수 있으며 잘못 구성된 이름 서버로 다음 쿼리를 보낼 수 있습니다.

시나리오 2: 호스팅 영역에서 변경된 이름 서버

부분적인 DNS 장애의 또 다른 이유는 도메인에 대한 NS 레코드가 호스팅 영역에서 잘못 구성된 경우입니다. 이 경우 기존 이름 서버가 업데이트되었거나 일부 추가 이름 서버가 NS 레코드 값에 추가된 것입니다.

이 경우 확인자가 잘못된 이름 서버를 사용하여 도메인을 확인하려고 하면 일부 클라이언트에서 부분적인 DNS 장애가 발생할 수 있습니다.

시나리오 3: 클라이언트의 DNS 확인자가 도메인을 확인할 수 없음

클라이언트가 Linux의 resolv.conf와 같은 확인자 구성 파일에 사용자 지정 또는 잘못된 확인자를 설정하는 경우가 있습니다. 이 경우 Amazon Virtual Private Cloud(Amazon VPC)의 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 도메인을 확인하려면 EC2 인스턴스는 resolv.conf에 정의된 이름 서버를 사용합니다.

시나리오 4: DNS 쿼리를 제한하는 Amazon 제공 DNS 서버

Amazon에서 제공하는 DNS 서버는 탄력적 네트워크 인터페이스(ENI)당 초당 1,024개 패킷 제한을 적용합니다. Amazon에서 제공하는 DNS 서버는 이 한도를 초과하는 트래픽을 거부합니다. DNS 제한으로 인해 DNS 시간 초과가 간헐적으로 발생합니다. 인스턴스에서 캐싱을 설정하거나 애플리케이션의 DNS 재시도 타이머를 늘려 이 문제를 해결할 수 있습니다.

시나리오 5: 도메인 URL이 인터넷에서 확인되지만 EC2 인스턴스에서는 확인되지 않음

다음을 수행한 경우 도메인에 대한 DNS 쿼리는 항상 프라이빗 호스팅 영역에서 확인됩니다.

도메인에 대해 쿼리된 레코드가 프라이빗 호스팅 영역에 없으면 DNS 쿼리가 실패하고 퍼블릭 도메인으로 전달되지 않습니다. DNS 레코드는 퍼블릭 도메인 영역에 있으므로 인터넷에서 확인됩니다.

Linux 기반 운영 체제에서 DNS 장애 문제 해결

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.

이러한 4개의 서버 중 어느 것이든 www.amazon.com 호스트 이름에 대한 질문에 정식으로 응답할 수 있습니다. dig 명령을 사용하여 특정 이름 서버를 직접 타겟팅합니다. 지정된 도메인의 모든 신뢰할 수 있는 이름 서버가 올바르게 응답하는지 확인합니다.

다음은 신뢰할 수 있는 이름 서버(ns-1019.awsdns-63.net) 중 하나로 전달된 www.amazon.com에 대한 쿼리의 출력 예입니다. 서버 응답은 www.amazon.com을 54.239.25.192에서 사용할 수 있음을 나타냅니다.

$ 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 기반 운영 체제에서 DNS 장애 문제 해결

다음 예와 같이 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

AWS 공식
AWS 공식업데이트됨 2년 전