네트워크

[네트워크] DNS

slimdog 2025. 4. 15. 22:30

 

DNS(Domain Name System)


DNS 사용 이유는 현대의 사회는 웹포털을 검색할 때 naver.com이라는 도메인 주소를 사용하여 접속합니다. 사실상 많은 IP주소들을 외우는 것은 불가능 하기 때문에 하나의 별칭을 사용한 웹 IT기술로서 자리매김 하였고 웹 애플리케이션 환경에 필수 기술이기도 합니다.

DNS의 구성요소

1. 도메인 네임 스페이스 (Domain Name Space)


DNS는 전세계적인 거대한 분산 시스템으로 도메인 네임 스페이스는 이러한 DNS가 저장 관리하는 계층적 구조를 의미합니다. 실생활에서 우리는 해외에서 서비스하는 Youtube.com이라는 도메인도 IP를 입력하지 않고 DNS를 사용하여 접속 가능한 이유 입니다.

 

2. 네임 서버 (Name Server)
도메인 네임 스페이스의 트리 구조 에 대한 정보가 필요하며, 이러한 정보를 가지고 있는 서버를 네임 서버라고 합니다. 리졸버(Resolver)로부터 요청 받은 도메인 이름에 대한 IP 정보를 다시 리졸버로 전달해주는 역할을 수행합니다.

cmd>nslookup naver.com 

서버: kns.kornet.net → nslookup을 DNS쿼리를 통해 가져온 네임서버

Address: 168.126.63.1 → nslookup을 DNS쿼리를 통해 가져온 네임서버

권한 없는 응답:

이름: naver.com

Addresses: 223.130.192.247

223.130.200.219

223.130.192.248

223.130.200.236

 

💡 리졸버 (Resolve) DNS 클라이언트의 요청을 네임 서버로 전달하고 네임 서버로부터 정보(도메인 이름과 IP 주소)를 받아 클라이언트에게 제공하는 기능을 수행합니다.

 

💡 마스터네임서버 해당 도메인을 관리하는 주 네임 서버로 Zone 파일을 관리합니다.

💡 Slave Name Server

마스터 네임 서버 의 고장 등의 이유로 동작하지 못하는 경우 이를 대신하여 네임 서버 역할을 수행하는 서버이고 주기적으로 마스터 네임 서버로부터 Zone Transfer를 통해 자신의 정보를 갱신하여 전체 네임 서버의 정보가 일관성 있게 유지 및 관리합니다.

 

결국 ZonFile에 우리가 접속하는 naver에 IP와 Domain명이 정의 되어있고 이런 ZoneFile을 읽어 DNS서비스를 제공하는 것입니다.

 

3. 용도에 따른 DNS의 두가지 서버

 

 

Authoritative DNS 서버

관리 / 위임받은 도메인을 가지고 있는 네임서버를 말하며 특정 도메인에 대한 정보를 관리 하면서 해당 도메인 질의에 대한 응답만 수행합니다.

Recursive DNS 서버

관리/위임받은 도메인 없이 모든 질의에 대해서 응답하며, ISP 업체에서 제공하는 DNS서버에 해당합니다. Local DNS Cache에 정보를 담고 있고 질의하는 정보가 캐시에 존재할 경우 바로 사용자에게 정보를 전달해 주고 모르는 경우 Authoritative DNS 서버에 질의를 수행합니다.

위 두가지 서버에 대해서는 확실히 짚고 넘어 가야하는 것이 DNS의 계층적 구조의 이해 때문에 이해가 필요합니다.

DNS의 쿼리는 2가지의 쿼리로 나뉩니다. 

재귀적(Recursive) 질의

- 질의된 도메인에 대해 응답하거나, 아니면 이 작업을 할 수 있는 다른 DNS 서버에 클라이언트를 연결 시켜 주는 작업입니다.
- 자신이 관리하지 않는 알 수 없는 질의에 대해 응답 가능한 네임서버 목록을 전달합니다.
- 클라이언트는 다수의 DNS 서버들에게 같은 질의를 반복할 수 있습니다.

 

 

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

- 재귀적 질의와 반복적 질의는 DNS 질의 메시지에 헤더 플래그 정보에 의해 결정됩니다.

- DNS 질의 메시지 헤더의 RD(Recursive Desired) 플래그가 1로 세팅된 경우, 재귀적 질의(Recursive Query)로 반면 이 플래그가 0인 경우, 반복적 질의(Interactive Query) 수행합니다.

 

 

 

전반적인 DNS의 질의 과정은 아래와 같습니다.

 

주의 깊게 봐야할 부분은 아래와 같이 DNS쿼리에 대해 효율적으로 대응하기 위해 Cache를 사용하여 효율적인 트래픽 관리와 응답 속도 개선 등을 수행하기 떄문에 대부분의 DNS는 캐시 서버에서 IP가 변환되어 반환됩니다.

 

 

4. DNS의 리소스 레코드

 

SOA (Start Of Authority)

도메인의 시작점, 즉 도메인에 대한 선언을 하는 부분입니다. SOA 부분에서 도메인의 네임서버, 관리자의 메일, 도메인에 대한 타이머 관련한 설정들을 지정해 줄 수 있습니다. SOA가 없다면 다른 레코드는 등록할 수 없습니다.

NS (Name Server)

도메인에 대한 네임서버를 지정해 줄 수 있습니다. DNS를 호스팅 받는 입장이라면 이 레코드에 대해 설정해 줄 것이 없지만, 자체 DNS를 이용하는 입장이라면 꼭 이 레코드를 등록해야만 해당 네임서버를 이용하실 수 있습니다.

A, AAAA

가장 단순하며 가장 많이 쓰이는 레코드입니다. 도메인에 대해서 ip를 지정해 줄 수 있습니다. A의 경우 ipv4, AAAA는 ipv6에 대해 지정을 해줍니다.

CNAME(Canonical NAME)

별칭(alias)을 지정해주는 레코드입니다. A 레코드와 비슷한 성격을 띄고 있으나, CNAME의 경우, 도메인에 대한 ip를 넣어주는 것이 아닌 도메인에 대해 다른 도메인의 ip 값을 받아 오도록 해주는 것입니다. 예를 들어, abc.abc라는 도메인의 ip 가 123일 때 a.abc.abc라는 도메인을 cname으로 abc.abc. 라는 값을 줄 경우 abc.abc의 ip 주소로 가도록 하는 차이가 있습니다. 하지만 두 도메인은 엄연히 다른 도메인으로 취급됩니다. 즉, apache의 vhost 설정 시 cname 으로 등록된 도메인과 a 레코드로 등록된 도메인이 다른 페이지를 띄울 수 있도록 설정이 가능합니다.

MX (Mail eXchanger)

해당 도메인의 메일 서버를 지정해 줄 수 있습니다. 꼭 해당 도메인의 이름을 사용할 필요는 없습니다. MX 레코드의 경우 우선순위(Priority)를 지정하여 여러 메일 서버를 간의 분산이 가능합니다. 우선순위 값이 적을수록 높은 우선순위를 갖게 됩니다.

TXT (TeXT)

도메인 이름을 텍스트 문자열에 매치하는데 사용하는 레코드입니다. 위의 레코드들과 다르게 ” “로 내부에 텍스트 열을 넣는 형태의 레코드 입니다. 보통 SPF(Sender Policy Framework) 레코드를 등록하거나 그 외 메일 관련 설정을 위해 많이 사용됩니다.

SRV (SeRVice)

특정 서비스에 대한 특정 도메인을 연결해주기 위한 레코드입니다. 레코드 앞에 서비스와 프로토콜을 밑줄(_)과 함께 명시 해놓습니다. 이를 통해 해당 서비스의 경우 지정된 레코드의 값으로 보내게 됩니다.

PTR (PoinTeR)

역방향 질의(ip > domain)를 위한 레코드 입니다. 보통 메일 서비스 이용 시 혹은 다른 서비스들에서 해당 ip가 사용중인 도메인이 맞는 지 확인하기 위해 이용되며, 호스팅을 받는 입장이라면, 해당 ip를 소유하고 있는 호스팅 업체 측에 등록을 요청해야 합니다. 역방향 질의의 경우 일반 도메인과 다른 ip 대역에 대한 다른 zone 파일에 등록이 필요합니다

 

💡 인버스도메인(Inverse Domain)?
IP주소를 도메인 이름으로 변환하기 위해 네임서버에 설정하는 특수 도메인으로 PTR 레코드(PoinTer Record)를 사용하여 지정합니다. 인버스도메인을 네임서버에 등록해 놓으면 IP주소에 대응하는 도메인 이름(kr, com 등의 최상위 도메인을 포함한 도메인 이름)을 조회할 수 있습니다.

 

 

5. Zone File 생성하기 

⚙ Master Zonefile 생성 (/etc/named.conf)

zone “test” IN {  // 관리 도메인 지정

type master;

file “test.com.zoone”;

allow-transfer {192.168.2.53;}; // Zone 전송을 특정 IP로 제한

   }

 

 

Slave Zonefile 생성 (/etc/named.conf)

zone “test” IN { //관리 도메인 지정

type slave;

masters { 192.168.1.53;};

allow-transfer {none;};

   }

 

DNS는 웹 애플리케이션에서 기본이 되는 개념입니다. 향후 쿠버네티스 같은 컨테이너 오케스트레이션에서도 DNS서버를
효율적으로 다루기 위한 여러 방안들이 존재하여 꼭 선행되어야 할 개념입니다.

 

 

'네트워크' 카테고리의 다른 글

[네트워크] SSL/TLS  (0) 2025.04.16
[네트워크] 계층형 아키텍처  (0) 2025.04.15
[네트워크] 표준 아키텍처  (0) 2025.04.15
[네트워크] NAT  (0) 2025.04.14
[네트워크] DHCP  (0) 2025.04.09