본문 바로가기

IT 이야기

DNS 작동원리 및 레코드 종류

 

- DNS 란?

  : DNS는 도메인네임과 IP를 매칭해서, 도메인네임으로 쿼리했을때 IP로변환해서 네트워크통신할수있게해주는 시스템

  : well-known port는 53 (TCP/UDP)

  : 동작원리

      - PC가 www.naver.com을 입력 시, LAN 네트워크의 local DNS에게 쿼리

      - Local DNS에게 www.naver.com 의 IP 정보가 없다면, 인터넷상의 Root DNS에게 문의 (root dns정보는 local dns서버에 미리 설정이되어있어야한다. Root DNS는 전세계에 13대가 구축되어 있다. 미국에 10대, 일본/네덜란드/노르웨이에 각 1대씩이며, 우리나라의 경우 Root DNS 서버가 존재하지는 않지만 Root DNS 서버에 대한 미러 서버를 3대 운용하고 있다고 한다)

      - Root DNS 서버 는 "www.naver.com 의 IP 주소" 를 찾을 수 없어 Local DNS 서버에게 "www.naver.com 의 IP 주소 찾을 수 없음. 다른 DNS 서버에게 물어봐" 라고 응답을 한다. 이 다른 DNS 서버는 com 도메인 을 관리하는 TLD(Top Level Domain) DNS 서버이다. Local DNS 서버 com 도메인을 관리하는 DNS 서버에 다시 www.naver.com에 대한 IP 주소를 요청한다.

      - com 도메인을 관리하는 DNS 서버에도 해당 정보가 없으면, Local DNS 서버에게 "www.naver.com 의 IP 주소 찾을 수 없음. 다른 DNS 서버에게 물어봐" 라고 응답을 합니다. 이 다른 DNS 서버는 naver.com 도메인을 관리하는 DNS 서버 이다.

      - Local DNS 서버 naver.com DNS 서버에게 다시 "www.naver.com 의 IP 주소" 를 요청한다.

      - naver.com DNS 서버 에는 "www.naver.com 의 IP 주소" 가 있다. 그래서 Local DNS 서버에게 "www.naver.com에 대한 IP 주소는 222.122.195.6" 라는 응답을 한다.

      - 이를 수신한 Local DNS는 www.naver.com 의 IP 주소를 캐싱을 하고 이후 다른 요청이 있을시 응답할 수 있도록 IP 주소 정보를 단말(PC)에 전달해 줍니다

* Local DNS 서버가 여러 DNS 서버에 차례대로 (Root DNS 서버 -> com DNS 서버 -> naver.com DNS 서버) 요청하여 그 답을 찾는 과정을 Recursive Query 라고 부른다

 

루트 네임서버(Root Nameserver)

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

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

 

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

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

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

 

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

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

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

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

 

 

- 명령어 : nslookup –type=NS naver.com

  : type=NS의 의미는?

      - nslookup 명령어는 옵션 -type를 통하여 질의의 종류를 설정 할 수 있다. 따라서 '-type=NS'는 NS가 Name Server이며 이를 이용하여 질의 자체를 Name Server에 해당하는 응답으로 받을 수 있다. 실제 결과 화면으로 보면 naver에 해당되는 ns서버들만 출력 되는 것을 확인 할 수 있다.

  : Non-authoritative answer의 의미는?

      - Non-authoritative answer(권한 없는 응답)는 권한 서버에서 클라이언트 질의에 대한 응답이 오지 않았음을 나타낸다. 두 번째 레벨 도메인의 서버는 자체 DNS 서버를 관리하는 세 번째 레벨 위임 서버의 주소를 관리하게 된다. 이때 위임을 받은 DNS 서버는 Authority name server라 하며 이 서버에 의해 관리되는 node들의 집합을 DNS Zone이라 한다. 위의 결과를 분석해 보면 naver.com에 관하여 DNS 서버의 계층구조에 따라 최상위 레벨 도메인, 두 번째 레벨 도메인을 거쳐 naver zone을 관장하는 서버로부터 질의응답이 오는 것이 아니라 내PC에 설정 되어 있는 기본 DNS 서버중 하나인 “dns.opendns.com (208.67.222.222)”의 캐시로부터 응답을 받은 것이다. DNS서버 캐싱(caching)을 통하여 클라이언트의 질의에 대한 빠른 응답으로 신속하게 질의 처리를 하기 위해서이다.

 

- 리소스 레코드

  : A레코드 - 도메인에 대한 IP주소와 매핑 (AAAA 혹은 Quad-A 레코드는 IPv6주소를 알려줌)

  : MX레코드 - Mail eXchange레코드로, 기본적으로 메일을 주고받을 수 있도록 해주는 서비스. 예를들어 myid@meson.kr이란 이메일주소로 메일을 송/수신 할 수 있는 이유는 meson.kr이라는 도메인이 메일을 주고 받을 수 있는 실체적 서버가 누구인지 밝혀주고 있기때문. 

      - nslookup -querytype=mx google.com

  : CNAME (Canonical Name) - 도메인을 다른 도메인으로 매핑 (도메인 이름의 별칭)

      - nslookup -type=cname google.com

  : NS (Name Server) - NS레코드는 주어진 호스트에 대한 공식적인 이름 서버를 알려줌 (DNS과정 중 네임서버가 다른네임서버를 맵핑. TLD 네임서버에서 NS 타입의 네임서버를 반환)

      - nslookup -type=NS google.com

  : PTR (Reverse-lookup Pointer records) - PTR 레코드는 IP주소를 기반으로 도메인이름을 찾는데 사용.

      - ping -a 8.8.8.8 

 

  : SOA(Start Of Authority, 권한시작 레코드) - DNS 서버 설정정보 (refresh, retry, expire등) 변경사항을 기록.

  : SRV (SeRVice) - 서비스 위치 레코드. 비슷한 TCP/IP 서비스를 제공하는 다수의 서버위치정보를 제공

 

- A 레코드와 CNAME 차이

  : A 레코드는 IP 주소를 빠르게 찾을 수 있다. 반면에 CNAME은 IP 주소를 찾는데 한 단계가 더 늘어난다. 

  : 위의 이미지를 보면 blog.example.com에 접속한다고 했을때, example.com을 찾고 여기에 연결된 IP주소를 한번 더 찾아야한다. 만약 example.com도 정식 도메인이 아니라 CNAME레코드였다면 도메인을 찾는 과정은 또 늘어날 것이다. 반대로 IP주소 변경이 많은 사이트라면 A레코드로 매핑했을때 매번 IP주소를 변경해줘야한다. 대신 CNAME을 지정하면 IP주소가 바뀔때마다 정식 도메인 IP주소만 바꾸면된다.

  : 불법사이트가 사이트 도메인을 여러개 만들고 정식 도메인에 대해 CNAME지정한다고 해보자. IP주소가 차단되어도 정식도메인에 대한 A레코드의 IP주소만 바꿔주면 다른 도메인에 대해서도 적용되므로 IP차단 우회가 쉽다.

 

<Reference>

- https://www.delmaster.net/69 

- https://velog.io/@doomchit_3/Internet-DNS-%EC%9E%91%EB%8F%99%EC%9B%90%EB%A6%AC-IMBETPY

- https://mygumi.tistory.com/384

- https://roseline.oopy.io/dev/how-does-dns-work

- https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=gskjhyoo&logNo=220229837984

 

 

 

 

'IT 이야기' 카테고리의 다른 글

Linux commands (Security related)  (0) 2022.03.06
VXLAN 무엇인가  (0) 2021.12.28
HTTP - SSL 인증서  (0) 2021.12.20
GNS3와 GNS3 VM 설치하기  (0) 2021.12.03
Must-Have Tools for Network Engineers  (0) 2021.11.29