AWS

DNS 는 어떻게 동작하는가? :: 마이구미

mygumi 2020. 12. 20. 18:56
반응형
이 글은 DNS 가 무엇인지? 어떻게 동작하는 지를 중점으로 본다.
어떻게 도메인 주소(example.com)가 어떻게 실제 IP 주소를 가져오는 지를 알아본다.
AWS Route 53 서비스뿐만 아니라, 타사 서비스도 같은 흐름이기에 DNS 관련 이해가 필요하다면 도움이 될 것이다.

 

기본적으로 DNS 의 역할은 도메인 주소(example.com)를 IP 주소로 변환하는 역할을 한다.

사용자가 웹 브라우저에서 입력한 URL 을 DNS 서버를 통해 IP 주소를 가져와서 이를 통해 서버와 통신을 하게 된다.

이러한 흐름을 간략하게 그림으로 보면 다음과 같다.

 

 

웹 브라우저에서 URL 을 입력하면, DNS 서버에 도메인에 대한 실제 IP 주소를 요청하게 된다.

그리고 받아온 IP 주소를 통해 웹 서버에 요청을 할 수 있게 되는 것이다.

 

그리고 위 그림에서의 DNS 의 동작을 상세히 그림으로 나타내면 다음과 같다.

 

 

사용자가 도메인 주소를 입력하여 웹 서버에 요청하기까지의 시나리오는 위 순서대로 흘러가게 된다.

이 과정에서 Local DNS Server 가 중간에서 여러 서버와 통신하고 있는 모습이다.

간단하게 그림의 순서를 설명하면 다음과 같다.

 

  1. example.com 의 IP 주소 알아?
  2. example.com 의 IP 주소 알아?
  3. 몰라. 다른 서버 알려줄테니까 물어봐.
  4. example.com 의 IP 주소 알아?
  5. 몰라. 다른 서버 알려줄테니까 물어봐.
  6. example.com 의 IP 주소 알아?
  7. 응. IP 주소는 192.0.2.44 야.

 

우선 더 자세한 이해를 위해서 각 서버가 무엇을 나타내는지 알아보자.

Local DNS Server 는 무엇인가?

Local DNS 서버는 다양하게 존재한다.

보통 가정 집 기준으로 별도 설정을 변경하지 않았다면, 기본적으로 통신사에서 제공해주는 DNS 서버를 사용하고 있다.

KT, SK 브로드밴드, LGU+, 구글, IBM 등 존재하고 있다. (나무 위키 DNS 서버 목록 https://namu.wiki/w/DNS)

스크립트 명령어를 통해 DNS 서버 목록과 매칭해보면 현재 사용 중인 DNS 서버를 확인해볼 수 있다.

 

Window
$ nslookup

Mac 
$ scutil --dns | grep 'nameserver\[[0-9]*\]'

 

Root Nameserver, TLD Nameserver, Authoritative Nameserver 는 무엇인가?

루트 네임서버(Root Nameserver)

크게 전세계에 13개의 서버로 구성되어있다.

도메인을 IP 주소로 변환하는 첫 단계로써, 최상위 도메인(TLD)에 대한 네임서버를 반환한다.

 

TLD 네임서버(Top-Level-Domain Nameserver)

일반 최상위 도메인(com, net, org 등) 과 국가코드 최상위 도메인(kr, uk, fr 등) 을 포함하고 있다.

권한 있는 네임서버를 반환한다.

 

권한 있는 네임서버(Authoritative Nameserver)

실제로 DNS 리소스 레코드들을 관리하고 있는 서버이다.

마지막 단계로써, IP 주소를 반환한다.

* 리소스 레코드는 SOA, NS, A, CNAME 등으로 구성되어 있다.

 

  • SOA - DNS 서버 설정 정보(refresh, retry, expire 등)
  • NS - DNS 과정 중 네임서버가 다른 네임서버를 맵핑(TLD 네임서버에서 NS 타입의 네임서버를 반환)
  • A - 도메인을 IP 주소를 맵핑
  • CNAME - 도메인을 다른 도메인으로 맵핑

 

이 정보를 기반으로 다시 그림의 순서를 설명하면 다음과 같다.

 

  1. PC 에서 Local DNS 서버에게 example.com 의 IP 주소를 요청한다.
  2. Local DNS 서버는 도메인에 해당하는 IP 주소를 몰라 Root 네임서버에게 example.com 의 IP 주소를 요청한다.
  3. Root 네임서버는 IP 주소를 알지 못해 다른 네임서버(TLD)를 반환한다.
  4. Local DNS 서버는 TLD 네임서버에게 example.com 의 IP 주소를 요청한다.
  5. TLD 네임서버는 IP 주소를 알지 못해 대신 다른 DNS 네임 서버(Authoritative)를 반환한다.
  6. Local DNS 서버는 Authoritative 네임서버에게 example.com 의 IP 주소를 요청한다.
  7. 실제 관련 레코드를 관리하는 네임서버로써, IP 주소는 192.0.2.44 를 알려준다.
  8. Local DNS 서버는 PC 에게 IP 주소를 알려준다.
  9. PC 는 웹서버의 IP 주소로 요청한다.
  10. 웹 서버는 요청받은 응답을 PC 에게 내려준다.

 

결과적으로 도메인 주소를 IP 주소로 변환하기위해 Root -> TLD -> Authoritative 네임서버순으로 위임하고 있다고 보면 된다.

 

 

위 과정이 실행되면 Local DNS 서버에서는 기본적으로 {도메인-IP} 정보를 캐시하여 같은 요청에는 빠르게 처리할 수 있게 된다.

즉, 1번 과정인 PC 에서 Local DNS 서버에게 IP 주소 아니? 물어본다.

Local DNS 서버는 캐시된 정보를 활용해서 2 ~7번 과정이 필요없이, 바로 8번 과정을 처리하게된다.

 

이 과정을 스크립트 명령어를 실제 도메인을 통해서도 그대로 확인해볼 수 있다.

 

$ dig +trace tistory.com

 

다음 순으로 출력되는 것을 볼 수 있다.

 

  1. 13 개의 루트 서버 리스트(root-*)가 출력된다.
  2. TLD 서버 리스트(gtld-*)가 출력된다.
  3. NS type 인 권한 있는 네임서버 출력된다.
  4. A type 인 IP 주소를 가져오는 것을 볼 수 있다.

 

추후에 실제로 이를 활용하는 사례로 AWS Route 53 에 대해 다룰 것이다.

Route 53 에서 Hosted zones 이라는 항목을 볼 수 있다.

여기서 Hosted zone 이 권한 있는 네임서버(Authoritative Nameserver)라고 보면된다.

Hosted Zone 을 생성하면 다음과 같이 구성되어 있다.

 

 

잘못된 내용이 있다면, 댓글을 통해 알려주시면 감사하겠다.

반응형