의식여행

DNS(Domain Name System) 이해하기 본문

IT(리눅스&보안&개발)/리눅스-CentOS

DNS(Domain Name System) 이해하기

의식여행중 2018. 1. 17. 13:56

안녕하세요, Woogi93 입니다.

이번 포스팅은 IT 분야에서 종사하시는 분들이라면 반드시? (알면 좋은??) Domain Name System에 대한 전반적인 내용들을 다두도록 하겠습니다. 주제 자체가 굉장히 딱딱하기 때문에 전체적으로 가볍게 읽어보시길 추천 드립니다.


1. DNS 기본 개념

1.1 도메인 네임

인터넷 사용에 있어, 사람이 기억하기 어려운 인터넷 IP 주소대신에 문자로 구성된 이름을 사용할 수 있도록 하는 일종의 명칭(namin) 체계.

1.2 도메인 네임 시스템(DNS)

DNS라고 하면 네임서버를 지칭하는 것으로 이해하고 사용하고 있지만, 도메인 네임서버는 도메인 네임시스템을 구성하고 있는 일부 요소.

도메인 네임 시스템은 초기 인터넷에서 호스트 네임별 IP 주소 정보를 시스템의 HOSTS.TXT 파일로 관리하던 것을 보다 체계적으로 관리할 수 있도록 하기 위해 일종의 데이터베이스 시스템으로써 개발되었다.

도메인 네임 시스템은 각 사이트에서 자신의 도메인 데이터 영역을 자체 관리하고, 분산 관리하의 모든 도메인들이 단일한 전체 도메인 체계에 통합될 수 있는 구조로 설계된 분산구조 데이터베이스 시스템입니다.

도메인 네임 시스템은 세 가지 요소로 구성되어 있다.

도메인 네임 공간(Domain Name Space), 리소스 레코드(Resource Record)

-확보한 도메인 영역에서 도메인 네임 생성 (ex. www.fortune.nate.com)

-도메인 네임 공간은 도메인 네임을 중복 사용되지 않도록 구성 (트리구조)

-리소스 레코드는 메인 네임에 설정한 데이터를 미리 정의된 레코드 타입 설정

-도메인 네임을 키(KEY)로 하여 필요한 데이터를 설정하고 사전에 약속된 데이터 타입과 포맷 설정

1. 호스트(A) 리소스 레코드 : 도메인 이름을 사용하는 IP 주소로 매핑
2. 별칭(CNAME) 리로스 레코드 : 별칭, 다른 도메인으로 매핑

네임서버(Name Server)

도메인의 데이터를 보유하고, 외부 인터넷으로부터 도메인 네임과 그 네임에 대한 데이터 질의를 수신했을 때, 보유한 데이터를 검색하여 조회하고 있는 데이터로 응답하는 역할을 담당

리졸버(Resolver)

도메인 네임의 데이터 조회기능을 수행하는 S/W 라이브러리 형태의 루틴을 가리킨다.
쉽게 도메인 네임과 조회대상 레코드 타입을 입력받아 인터넷 상에서 해당 도메인이 설정되어있는 네임서버를 자동으로 추적 탐색하여 원하는 데이터를 응답받아 최종 결과를 응용 어플리케이션으로 되돌려 주는 기능을 담당한다. (존 파일 데이터는 하나의 시스템이 아닌 인터넷 각 네임서버에 흩어져 산재하고 있다.)

-


1.3 DNS 질의 유형

1. 재귀적 질의(Recursive Query)

-상대 네임서버에게 자신을 대신하여 원하는 도메인의 데이터를 인터넷에서 조회하여 응댑하달라는 의미
-네임서버는 캐시 데이터 영역에서 질의된 대상 데이터를 조회 --> 데이터가 없는 경우, 리졸러 루틴을 가동시켜 인터넷 루트 네임서버로부터 질의절차를 순차적으로 수행하여 질의대상 데이터를 파악해 나간 후 최종 데이터를 파악한 경우 응답 처리

2. 반복적 질의(Interactive Query)

-루트 네임서버로부터 도메인의 트리형태 계층구조를 따라 순차적으로 반복하여 진행하는 질의(위임된 네임서버 정보를 따라)

* 재귀적 질의와 반복적 질의는 DNS 질의 메시지에 헤더 플래그 정보에 의해 결정됩니다.
   DNS 질의 메시지 헤더의 RD(Recursive Desired) 플래그가 1로 세팅된 경우, 재귀적 질의(Recursive Query)입니다.
   반면 이 플래그가 0인 경우, 반복적 질의(Interactive Query)가 됩니다.


1.4.1 DNS 질의응답 절차(반복적 질의)

1) 사용자 - 네임서버 DNS 질의 메시지 송출(RD1, 0일 경우 해당 데이터가 없다는 응답으로 처리)

2) 루트 네임서버로부터 질의 시작(캐시 영역이 비더 있다는 가정)

* 루트 네임서버 및 이하 최종 도메인까지의 네임서버들은 기본적으로 authoritative 네임서버
(도메인 존 데이터만 자신의 데이터로 보유하여 이 데이터만 사용하여 응답 처리)

* dig +norecurse (도메인) 사용하면 네임서버 반복적 질의(Interactive Query) 질의 모사 점검 가능

3) 루트 네임서버는 질의된 도메인 네임을 분석하여 이 도메인 네임이 속하고 있는 위임된 하위 도메인 존의 네임서버 정보를 authority 섹션과 additional 섹션에 설정하여 응답합니다. (Answer 섹션은 질의된 데이터가 없으므로 빈 응답)

4-6) 루트 네임서버로 부터 얻은 도메인 IP 주소를 사용하여 동일한 DNS 질의 메시지를 송출

7) my-domain.re.kr 존의 네임서버는 자신에게 설정된 존의 데이터 중 요청된 데이터를 검색하여 그 결과 데이터로 응답

8) 네임서버는 응답받은 데이터를 캐시에 저장처리



1.3 DNS Flag

-Authoritative data : 해당 도메인 존 파일 관리 권한을 가진 데이터 

-AA(Authoritative Answer) : 자신이 보유하고 있는 도메인 존 파일의 경우 1, 아닐 경우 0

-RA(Recursive Available) : 응답하는 네임서버가 리커시브 기능을 갖는 네임서버인 경우 1,

-AUTHORITY SECTION : 해당 도메인 네임서버 정보

-ANSWER SECTION : 질의한 도메인 정보(결과)

* 도메인 설정 상태 점검

-dig에서 출력되는 응답 메시지 헤더의 플래그 값 체크가 필요

도메인의 네임서버를 지정하여 직접 질의를 했을 때, 그 응답 메시지 헤더의 AA 플래그 값이 0이고, RA 플래그 값이 1이라면,
이 네임서버는 도메인 존을 가지지 않고 리커시브 네임서버 역할을 하여 응답하고 있는 것을 의미합니다.









Comments