DNS는 어떻게 작동하며 부분적이거나 간헐적인 DNS 장애는 어떻게 해결하나요?

6분 분량
0

DNS는 어떻게 작동하며 부분적이거나 간헐적인 DNS 장애는 어떻게 해결하나요?

해결 방법

DNS 개요

DNS의 역할은 기억하기 쉬운 이름(예: www.example.com)을 192.0.2.1과 같은 숫자 IP 주소로 변환하여 사용자를 인터넷 애플리케이션으로 라우팅하는 것입니다. 이 프로세스를 “DNS 확인”이라고 합니다. 신뢰할 수 있는 이름 서버는 도메인 이름을 하나나 여러 개의 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: Amazon DNS 서버에서 DNS 쿼리를 제한함

Amazon에서 제공하는 DNS 서버는 탄력적 네트워크 인터페이스 하나별 초당 1024개의 패킷 제한을 적용합니다. 이 한도를 초과하면 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

위 예시의 응답 섹션에서 54.239.17.6이 www.amazon.com의 HTTP 서버 IP 주소임을 알 수 있습니다.

+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에는 신뢰할 수 있는 이름 서버로 다음 네 개가 있습니다.

  • 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 쿼리 예제 출력입니다. 서버 응답에 따르면 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