DNS 질의 과정 - DNS jil-ui gwajeong

DNS 란 무엇인가?

도메인 이름 시스템(DNS)은 사람이 편하게 해당 서버에 요청할 수 있게 해주는 시스템이다.

즉 클라이언트는 직접 ip 주소로 요청하는것이 아니라 보기편한 문자로 요청할 수 있게 해준다.

12.123.123.22 보다는 www.naver.com 으로 요청보내는게 쉽자나! (물론 12.123.123.22는 실제 네이버 주소가 아니다)

DNS, 네임서버, DNS 서버 뭐가 다른데?

DNS 는 시스템이고, www.naver.com 이 요청되면 실제 서버 ip 주소로 요청되게끔 해야겠지, 이렇게 실제 서버를 찾아주는 애가 네임서버 다. 네임서버 , DNS 서버, 도메인 네임서버 모두 다 같고, 사람들마다 그냥 다르게 부른다.

브라우저에서 도메인이름으로 요청했을 때 과정

큰 틀은 매우 심플하게 다음 순서로 진행이 된다.

  1. 브라우저가 www.naver.com 을 요청한다.
  2. 네임서버에 www.naver.com 에 해당하는 실제 서버주소 를 찾아서 브라우저에서 전달한다.
  3. 브라우저는 전달받은 실제 서버 ip 주소로 요청한다.

네임서버는 어떻게 서버주소를 찾을까? (feat.hosts file)

네임서버는 왜 생긴걸까?

  • 인터넷 초기에는 hostname 을 서버 ip를 저장한 파일을 저장하여 사용했는데,
  • SNI-NIC 이라는 곳에 hosts.txt 파일을 다운받아 저장하였다.
  • 문제점...
    • 서버가 ip 주소를 바꾸면? 바로바로 업데이트를 해줄까?
  • 이래서 hostname 을 바로 ip로 변환해 주는 네임버서가 생겼다

www.naver.com 요청은 어떻게 네임서버로 전달될까?

  • www.naver.com 을 요청 받으면 바로 외부 네임서버로 전달되지 않는다.
    • 바로 네트워크를 타는 것보다, 더 빨리 찾을 수 있으면 좋잖아.
  • 먼저 로컬에서 찾는다.
    • hosts.txt → DNS 캐시 테이블 → 로컬 DNS서버
  • 로컬 DNS 서버까지 가서 찾았는데 없으면 외부네트워크 DNS 서버로 요청한다.

hosts.txt

  • Windows에서는 C:\Windows\System32\drivers\etc 디렉토리에 위치하고 있다.
  • 운영체제는 먼저 hosts.txt 파일에서 검색한다.

DNS 캐시 테이블

  • hosts.txt 에 없으면 DNS 캐시 테이블에서 검색한다.
  • DNS 캐시테이블은 명령프롬프트 창에서 ipconfig /displaydns 명령어를 입력해서 볼 수 있다.

DNS 질의 과정 - DNS jil-ui gwajeong

로컬 DNS 서버

  • DNS 캐시 테이블에도 없으면 로컬 DNS 서버로 질의요청을 한다.
  • 로컬 DNS 서버란 인터넷을 제공하는 회사가 운영하는 DNS 서버를 뜻한다.
  • 명령프롬프트 창에서 nslookup 명령어를 입력하여 확인할 수 있다.
  • 운영체제는 로컬 DNS 서버로 부터 도메인 네임의 IP 주소를 응답 받으면 DNS 캐시 테이블에 반영한다.
  • 로컬 DNS 서버는 네임서버들과 단계적으로 응답을 주고 받으며 ip주소를 찾으면, 브라우저에게 ip주소를 알려준다.

네임서버는 어떻게 동작하고, 어떻게 구성되어 있을까?

도메인 네임에 집중해보자 (com, net, co.kr, ...)

  • naver.com, google.com, daum.net
  • 도메인 네임이 각각 무엇을 의미할까?
    DNS 질의 과정 - DNS jil-ui gwajeong

    - 도메인 네임은 계층적으로 구성이 되어야 한다.
    - 도메인 네임은 전 세계적으로 고유하게 존재해야 한다.
    - 그래서 도메인 네임은 가격이 있다💲

도메인 구성

  • 효율적으로 관리하기 위해 나누어서 관리한다.
  • www.naver.com 이 들어오면 Root 네임서버com 영역을 호스트하는 네임서버(TLD) 를 찾아 넘긴다.
  • com 네임서버는 naver.com 영역을 호스팅하는 네임서버를 찾는다.

DNS 질의 과정 - DNS jil-ui gwajeong

참조 : https://peemangit.tistory.com/52

Root DNS

  • 전 세계에는 13대의 Root DNS가 구축되어 있다.
  • 미국에 10, 일본/네덜란드/노르웨이에 각각 1대씩

TLD(Top Level Domain)

  • 도메인 등록기관(Registry)이 관리하는 서버이다.
    • 도메인판매업체(ex. 가비아)가 도메인을 등록을 요청하는 곳이 도메인 등록기관이고,
    • 도메인이 등록될 때 도메인 등록기관은 해당 도메인판매업체와 도메인을 등록한다.
    • 가비아로부터 구매한 sera.com 이라면, TLD 는 로컬DNS 서버의 요청을 가비아의 네임서버로 보낸다.
  • 실제 도메인과 IP 주소를 맵핑하여 저장되는 서버이다.
  • 도메인 판매업체가 관리하기도 하고, 자체적으로 DNS 서버를 구축한 서버도 여기에 속한다.
  • 실제 IP 주소를 찾으면 IP 주소를 로컬DNS서버에 전달한다.

참조

https://wizardzines.com/comics/life-of-a-dns-query/
https://peemangit.tistory.com/52

생각해 보자.

  • Azure DNS 와 AWS Route 53은 어떻게 다를까?
  • DNS 를 악용한 해킹은?
    • DNS 반사공격
    • DNS 캐시 중독
    • DNS 리소스 소진 공격
  • 반복적 질의와 재귀적질의 의 차이는?
    • 그러게.. 왜 로컬DNS 귀찮게 RootDNS 랑 통신하고, 다음은 TLD랑 통신하고, 다음은 Authoritative DNS 랑 통신하지. 그냥 RootDNS → TLD → Authoritative DNS 순차적으로 알아내서 바로 로컬 DNS 한테 넘기면 되잖아
    • Authoritative DNS 가 로컬DNS 주소를 알려면 주고받는 데이터로 로컬DNS 주소를 넘겨줘야해서 그런가.. 대체 이유가 뭘까
  • 로컬DNS 와 호스트가 주고받는 메세지는 어떻게 되어있을까

지금까지 DNS 에 대해 알고 있던 것
브라우저에 naver.com 쓰고 엔터치면 DNS 에서 naver.com의 ip 주소를 알려줄꺼고 거기로 가면 되지. (끝)
리액트 프로젝트를 하다가 그 유명한 CORS 문제를 겪었다. 임시방편으로 hosts 파일을 수정하면 CORS 문제를 피해서 개발할 수 있다길래 알아보다가(결국 이 방법은 배포된 url 주소가 없어서 실패했지만) DNS 쿼리의 처리 과정에 대해 조금 더 자세히 이해하게 됐다.

DNS 쿼리 처리 과정

 1.  브라우저에 naver.com 을 입력하면

 2.  컴퓨터의 hosts 파일에 naver.com 의 ip 주소 정보가 있는지 확인한다.

hosts 파일

: ip 주소와 hostname 을 매칭시켜놓은 텍스트 파일이며, 해당 컴퓨터 안에선 이 파일이 우선권을 갖는다.

mac os 기준 hosts 파일의 위치는 /etc/hosts 이다.

DNS 질의 과정 - DNS jil-ui gwajeong
/etc/hosts 파일
  • hosts 파일 작성 규칙

- 각 항목은 한 줄(line)로 작성

- IP 주소 (최소 한 칸 이상의 간격) 호스트 이름

- 호스트 이름 부분에 'IP 주소' 를 등록할 수는 없다.

- 같은 ip 주소에 대해 여러개의 호스트 이름을 등록할 수 있다.

  • /etc/hosts 파일 변경 후 아래 명령어로 캐시를 갱신하면 바로 적용된다.
$ dscacheutil -flushcache

3.  hosts 파일에 정보가 없으면, 컴퓨터에 있는 local DNS cache에 ip 주소가 있는지 확인한다.

Local DNS Server 는 ip를 찾기 위해 가장 먼저 찾게 되는 곳이다.

  • Local DNS 서버에 내가 찾는 도메인의 ip 주소가 캐싱되어 있다면 여기서 끝.
  • Local DNS 서버에 ip 주소가 없다면, Root DNS 서버에 물어본다.

/etc/resolv.conf 파일에서 내 컴퓨터의 Local DNS 서버가 뭔지 확인할 수 있다.

이용하는 ISP가 제공하는 DNS 주소를 볼 수 있는데, 아래 결과는 SK 인터넷의 DNS 서버(nameserver 라고도 함) 주소이다.

통신사에서 제공하는 DNS 말고도 여러 Public DNS 들이 있고(google, cloudflare 등), 쉽게 변경할 수 있다. 

DNS 질의 과정 - DNS jil-ui gwajeong
/etc/resolv.conf 파일

4. hosts 파일에서도, DNS cache 에서도 ip 주소를 알아낼 수 없다면, DNS 서버에 물어봐야 한다.

그런데 어떤 DNS 서버에게 물어볼까 ?

DNS 쿼리를 보내고 응답을 받는 과정을 알려면, 도메인의 구조를 먼저 알아야한다. 

도메인의 구조는 아래와 같다. 

DNS 질의 과정 - DNS jil-ui gwajeong
DNS 질의 과정 - DNS jil-ui gwajeong

어떤 DNS 서버에 도메인네임에 대한 쿼리를 날렸을 때, 한 번에 ip 주소를 돌려줄 수 있는 네임서버는 없다.

각각의 레벨을 담당하는 네임서버가 있으며, 각 서버는 바로 하위 레벨 도메인에 대한 네임서버 주소 밖에 알지 못한다.

Root Server 는 Top-Level 의 정보 밖에 모르고, Top-Level 서버는 Second-Level 의 정보 밖에 모른다.

따라서, DNS 요청이 들어올 경우 Root 부터 시작해서 단계적으로 ip 주소를 찾아가게 된다.

DNS 질의 과정 - DNS jil-ui gwajeong

이렇게 여러 네임서버를 거쳐 ip 주소를 찾는 과정을 Recursive Query 라고 한다.


nslookup 명령어

nslookup 특정 호스트에 대한 정보를 알아낼 수 있는 명령어.

Non-authoritative answer 의 의미

DNS 쿼리의 응답으로 ip 주소를 무사히 받으면, Local DNS Sever 는 해당 주소를 캐시에 저장한다. 다음에 또 naver.com 에 대한 요청이 들어오면 캐시에 있는 정보를 그냥 주면 되니까.

Recursive query 를 거쳐 얻은 ip 주소는 Authoritative DNS Server 에서 받은 정보인 데에 비해, 아래 nslookup naver.com 명령의 결과는 Local DNS Server 에 캐싱된 정보라는 의미에서 Non-authoritative answer 라고 나오는 것이다.

DNS 질의 과정 - DNS jil-ui gwajeong

Authoritative nameserver 가 어딘지 알고 싶다면, 아래 처럼 확인할 수 있다.

DNS 질의 과정 - DNS jil-ui gwajeong

그리고 그 정보를 이용해 아래와 같이 다시 조회해보면 Non-authoritative 라는 문구가 사라졌다!

DNS 질의 과정 - DNS jil-ui gwajeong

참고링크

www.itgeared.com/articles/1354-domain-name-system-dns-tutorial-overview/

How DNS Works | ITGeared.com

DNS stands for Domain Name System. DNS is used for name resolution on a TCP/IP network. Before you can understand what DNS is and where it came from, you have to first understand how name resolution occurred before DNS was developed. When the Internet was

www.itgeared.com

DNS 질의 과정 - DNS jil-ui gwajeong

opentutorials.org/course/3276/20303

도메인 이름의 구조 - 생활코딩

수업소개 이 수업에서는 도메인 이름의 구조에 대해서 알아봅니다.  강의 수업내용 스크린 샷

opentutorials.org

DNS 질의 과정 - DNS jil-ui gwajeong

+) 더 알아볼것

dig 명령어, A record, CNAME, route 53, Round Robin DNS 알아보기