-
DNS 는 어떻게 동작하는가? :: 마이구미AWS 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 가 중간에서 여러 서버와 통신하고 있는 모습이다.
간단하게 그림의 순서를 설명하면 다음과 같다.
- example.com 의 IP 주소 알아?
- example.com 의 IP 주소 알아?
- 몰라. 다른 서버 알려줄테니까 물어봐.
- example.com 의 IP 주소 알아?
- 몰라. 다른 서버 알려줄테니까 물어봐.
- example.com 의 IP 주소 알아?
- 응. 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 - 도메인을 다른 도메인으로 맵핑
이 정보를 기반으로 다시 그림의 순서를 설명하면 다음과 같다.
- PC 에서 Local DNS 서버에게 example.com 의 IP 주소를 요청한다.
- Local DNS 서버는 도메인에 해당하는 IP 주소를 몰라 Root 네임서버에게 example.com 의 IP 주소를 요청한다.
- Root 네임서버는 IP 주소를 알지 못해 다른 네임서버(TLD)를 반환한다.
- Local DNS 서버는 TLD 네임서버에게 example.com 의 IP 주소를 요청한다.
- TLD 네임서버는 IP 주소를 알지 못해 대신 다른 DNS 네임 서버(Authoritative)를 반환한다.
- Local DNS 서버는 Authoritative 네임서버에게 example.com 의 IP 주소를 요청한다.
- 실제 관련 레코드를 관리하는 네임서버로써, IP 주소는 192.0.2.44 를 알려준다.
- Local DNS 서버는 PC 에게 IP 주소를 알려준다.
- PC 는 웹서버의 IP 주소로 요청한다.
- 웹 서버는 요청받은 응답을 PC 에게 내려준다.
결과적으로 도메인 주소를 IP 주소로 변환하기위해 Root -> TLD -> Authoritative 네임서버순으로 위임하고 있다고 보면 된다.
위 과정이 실행되면 Local DNS 서버에서는 기본적으로 {도메인-IP} 정보를 캐시하여 같은 요청에는 빠르게 처리할 수 있게 된다.
즉, 1번 과정인 PC 에서 Local DNS 서버에게 IP 주소 아니? 물어본다.
Local DNS 서버는 캐시된 정보를 활용해서 2 ~7번 과정이 필요없이, 바로 8번 과정을 처리하게된다.
이 과정을 스크립트 명령어를 실제 도메인을 통해서도 그대로 확인해볼 수 있다.
$ dig +trace tistory.com
다음 순으로 출력되는 것을 볼 수 있다.
- 13 개의 루트 서버 리스트(root-*)가 출력된다.
- TLD 서버 리스트(gtld-*)가 출력된다.
- NS type 인 권한 있는 네임서버 출력된다.
- A type 인 IP 주소를 가져오는 것을 볼 수 있다.
추후에 실제로 이를 활용하는 사례로 AWS Route 53 에 대해 다룰 것이다.
Route 53 에서 Hosted zones 이라는 항목을 볼 수 있다.
여기서 Hosted zone 이 권한 있는 네임서버(Authoritative Nameserver)라고 보면된다.
Hosted Zone 을 생성하면 다음과 같이 구성되어 있다.
잘못된 내용이 있다면, 댓글을 통해 알려주시면 감사하겠다.
반응형'AWS' 카테고리의 다른 글
Nginx proxy_pass 설정 이슈 :: 마이구미 (2) 2023.11.25 ELK + Kafka 로그 시스템 알아보기 (1) :: 마이구미 (0) 2021.08.19 AWS SES 를 활용해서 이메일 보내기 :: 마이구미 (0) 2020.10.11 S3 pre-signed URL 한번만 사용하기 :: 마이구미 (3) 2020.09.27 Elastic Beanstalk + Jenkins + Docker 로 배포하기 :: 마이구미 (0) 2020.09.03