Server

[WEB/Server] DNS 2탄 - DNS서버 종류, DNS쿼리, DNS레코드

somuxsomu 2024. 1. 3. 10:56

DNS 2탄 

 

 

DNS -  Domain Name System (도메인 네임 시스템)

DNS 서버 종류, DNS 쿼리, DNS 레코드 개념

 

 

 

DNS(Domain Name System, 도메인 네임 시스템)는 IP 네트워크에서 사용하는 시스템이다.

우리가 인터넷을 편리하게 쓸 수 있게 해주는 것으로,

영문/한글 주소로 이루어진 도메인을 IP 네트워크에서 찾아갈 수 있는 IP 주소로 변환해준다.

 

즉, 도메인을 IP주소로 변환 시켜주는 시스템이다.

 


➡️사용자들은 jobkorea.co.kr 또는 goole.com 과 같은 도메인 이름을 통해 웹 주소에 접근 하려고 할 때,

웹 브라우저 DNS 서버에 대해 DNS 조회를 수행하여 호스트 이름을 제공한다.

그리고 DNS서버는 호스트 이름을 가져와서 웹 브라우저가 연결할 수 있는 IP주소로 해석해 준다.

 


 

DNS 서버 종류

 

1. DNS Resolver (DNS 확인자)

DNS 쿼리의 첫 단계이며, 클라이언트와 DNS 네임서버 사이의 중개자 역할을 하고 있다.

쿼리에 응답하고 다른 DNS 서버에 주소를 요청하거나 캐시된 데이터(IP 주소)를 가지고 있는 서버이다.

 

DNS Resolver는 ISP의 안전한 네트워크에서 운용된다.

많은 클라이언트들의 DNS 쿼리를 받아 빠르게 결과를 전송해야 하므로 성능과 보안 모두 중요하다.

 

구글이나 Cloudeflare 같은 클라우드 기반 회사들도 자체적인 DNS Resolver를 운영하고 있다.

구글의 OpenDNS(8.8.8.8), Cloudflare의 1.1.1.1 서비스가 여기에 해당된다.

 

도메인의 구조에 따라 반복적인 질의(쿼리)를 하며 결과를 찾아내기 때문에

Recursive Resolver(재귀 확인자) 혹은 DNS Recursor 라고도 부른다.

 

ISP(인터넷 서비스 제공업자)

개인이나 기업체에게 인터넷 접속 서비스, 웹사이트 구축 및 웹호스팅 서비스 등을 제공하는 회사를 말한다.

대표적으로 한국에서는 KTSK브로드밴드LG U+ 등이 있다.

 

2. Root Name Server (루트 네임서버)

TLD 네임서버 IP들을 저장해두고 안내하는 역할을 하고 있다.

 

ICANN(Internet Corporation for Assigned Names and Numbers, 국제 인터넷 주소 관리 기구)에서 관리한다.

 

루트 네임서버는 13개가 있는데, 루트 네임서버 시스템에 13대의 컴퓨터만 있다는 의미가 아니고,

13가지 유형의 루트 네임서버가 있지만 전 세계에 각각의 사본이 다를 수 있으며, AnyCast 라우팅을 사용하여 빠른 응답을 제공 한다.

 

3. TLD ( Top Level Domain Name Server, 최상위 도메인 네임서버 )

URL의 마지막 점(dot)뒤에 오는 도메인 이름에 대한 정보를 관리한다.

 

예를들어, ‘com’으로 끝나는 모든 웹 사이트의 정보를 가지고 있다.

Authoritative 네임서버 주소를 저장해두고 안내하는 역할을 한다.

 

ICANN의 지사인 IANA(Internet Assigned Numbers Authority)가 관리하고

gTLD(일반 최상위 도메인)과 ccTLD(국가 코드 최상위 도메인)으로 구분된다.

 

4. Authoritative Name Server (권한 있는 네임서버 )

실제 도메인과 IP주소의 관계가 기록/저장/변경되는 서버이다.

 

메일 서버 IP 주소 또는 웹 사이트의 IP 주소를 DNS 쿼리에 대한 답변을 제공한다.

도메인 등록 업체 또는 호스팅 업체가 관리한다.

 


 

재귀 확인자(Recursive Resolver)와 권한 있는 서버(Authoritative Server)의차이점

 

두 개념 모두 DNS 인프라에 필수적인 서버를 나타내지만,

각각 다른 역할을 수행하며 DNS 쿼리 파이프라인 내부의 다른 위치에 있다.

 

 

 Recursive Resolver는 DNS 쿼리의 시작 부분에 있고

Authoritative Name Server는 끝 부분에 있다.


🔸 Recursive DNS Resolver (재귀 DNS 확인자)

출처 : https://www.cloudflare.com/learning/dns/what-is-dns/

 

 

Recursive Resolver는 클라이언트의 재귀 요청에 응답하고 DNS 레코드를 찾는데 시간이 걸린다.

요청한 레코드에 대해, Authoritative DNS Name Server에 도달할 때까지

(또는 레코드를 찾을 수 없는 경우 시간이 초과되거나 오류를 반환할 때까지) 일련의 요청을 함으로써 이를 수행한다.
Recursive Resolver가 클라이언트에 응답하는데 필요한 레코드를 찾기 위해 항상 여러 요청을 해야 하는 것은 아니다. 

캐싱은 DNS 조회 초기에 요청한 리소스 레코드를 제공하여 필요한 요청을 단락 시키는 데 도움이 되는 데이터 지속성 프로세스이다.

 

 

🔸 Authoritative DNS Server (권한 있는 DNS 서버)

출처 : https://www.cloudflare.com/learning/dns/what-is-dns/

 

Authoritative Name Server는 실제로 DNS 리소스 레코드를 보유하고 책임지는 서버이다.

이 서버는 쿼리된 리소스 레코드로 응답하는 DNS 조회의 맨 아래(끝)에 있는 서버로,

궁극적으로 웹 브라우저가 웹사이트 또는 다른 웹 리소스에 액세스하는데 필요한 IP 주소에 도달하도록 요청할 수 있게 해준다.
Authoritative Name Server는 특정 DNS 레코드의 최종 소스이므로

다른 소스를 쿼리 할 필요 없이 자체 데이터에서 쿼리를 충족할 수 있다.

 

 

 

출처 : https://www.cloudflare.com/learning/dns/what-is-dns/

 

www.example.com 또는 blog.example.com과 같은 서브 도메인이 있을 때

Authoritative Name Server 요청 후 CNAME 레코드가 클라이언트에게 반환이 된다.

 

클라이언트는 www.example.com 을 ‘example.com’ 에 대한 별칭임을 인식 하고,

다시 ‘example.com’에 대한 새 DNS 쿼리를 실행한다.

 


 

DNS 조회의 8단계

출처 : https://www.cloudflare.com/learning/dns/what-is-dns/

 


👉🏽 웹 브라우저에 주소창에 ‘example.com'을 입력



DNS Query

Query (질의) : 데이터 요청

 

일반적인 DNS 조회에서는 재귀 쿼리와 반복 쿼리가 있는데,

이러한 쿼리 조합을 사용하면 DNS 조회할 때 최적화된 프로세스가 되어 이동 거리를 줄일 수 있다.

 

 

🔸 재귀 쿼리 (Recursive query)

 

Recursive (재귀) : 원래의 자리로 되돌아 가거나 되돌아 오는

 

재귀 하여 실제 도메인 네임을 가지고 있는 서버까지 쿼리가 이동하여 IP 주소를 얻는 방법이다.

이 방법은 Root server에 너무 큰 부담을 준다는 단점이 있다.

Local DNS 서버가 여러 DNS서버를 차례대로 물어봐서 답을 찾는 과정이다.

 

🔸 반복 쿼리 (Iterative query)

 

 

자신이 관리하지 않는 쿼리 요청이 있을 경우 쿼리에 응답 가능한 Name Server를 응답한다.

최종 IP 주소를 받을 때까지 요청 & 응답을 계속해서 Local DNS 서버가 반복하는 방법이다.

Local DNS 서버가 다른 DNS 서버에게 쿼리를 보내어 답을 찾는 과정이다.

 

 

💡 실제 DNS server의 동작 방식은 

재귀 쿼리(Recursive query)와 반복 쿼리(Iterative query)를 함께 사용하여, 효율성을 높인다.

 


 

브라우저 DNS 캐싱

 

웹 브라우저는 기본적으로 정해진 시간 동안 DNS 레코드를 캐시하도록 설계되어있다.

DNS 캐싱이 웹 브라우저와 가까울수록 캐시를 확인하고

IP 주소에 대한 올바른 요청을 하기 위해 처리해야 할 단계가 적어진다.

DNS 레코드를 요청할 때 브라우저 캐시에서 처음으로 요청한 레코드를 확인하는 것이다.


👉🏽 Chrome에서는 chrome://net-internals/#dns에서 DNS 캐시의 상태를 볼 수 있다.

 

브라우저가 cache를 찾는 과정

 

💡 왜 이 많은 캐시가 필요한가?

캐시는 네트워크 트래픽을 규제하고 데이터 전송 시간을 향상 시키는 데 필수적이다.


내가 구매한 도메인의 네임서버를 지정해주면 해당 네임서버에서 갖고 있는 DNS의 레코드를 통해

사용자가 찾는 도메인을 IP로 변경하여 통신을 하도록 도와준다.

원하는 서버와의 정확한 통신을 위해서는 도메인에 대해서 정확한 레코드 값을 지정함으로써

내가 원하는 서버와 통신이 되도록 만들어야 한다.


DNS에는 Resource Record(RR)가 저장되어 있고 name, value, type, TTL 로 구성되어 있다.

 

 👉🏽 TTL ? time-to-live를 나타내며, DNS서버가 해당 레코드를 새로 고치는 빈도를 나타낸다.

 

 

SOA (Start Of Authority) 도메인의 시작점, 도메인에 대한 선언을 하는 부분 SOA가 없다면 다른 레코드는 등록할 수 없다.
A (Host Record) 정규화된 도메인 이름/호스트명을 IPv4(예:192.0.2.1)에 연결한다. 가장 기본이 되는 레코드, 대부분의 서버는 A랑 연동이 되어있다.
AAAA (IPv6 DNS Record) A의 확장형이며, IPv6(예:2001:0db8:85a3:0000:0000:8a2e:0370:7334) 주소를 기준으로 하는 레코드 이다. 
CNAME (Aliad Record) 실제 호스트명(A레코드)과 연결되는 별칭, 별칭을 정의해주는 레코드이다.
MX (Mail Exchange Record) 메일서버(사서함)에 도달할 수 있는 라이팅 정보(메일서버)를 제공한다.
SRV (Service Resource)  서버 위치 레코드(서비스와 연결되어 있는 레코드) 특정 서비스에 대한 특정 도메인을 연결해주기 위한 레코드이다. 
NS (Name Server) 네임 서버 레코드, DNS서버의 목록을 가지고 있다. 
TXT  관리자가 레코드에 텍스트 메모를 저장 할 수 있는 레코드이다/

 


 

DNS 레코드 

 

DNS 설정에서 자주 언급되는 A레코드, CNAME레코드, NS레코드에 대해서 자세히 알아보자

 

🔸 A 레코드

"A"는 "주소"를 나타내며, DNS 레코드 의 가장 기본적인 유형이다. 

지정된 도메인 의 IP 주소를 나타내며, IPv4 주소만 보유한다.

 

 

👉🏼 예를 들어, cloudflare.com의 DNS 레코드를 가져오면 A 레코드는 현재 104.17.210.9의 IP 주소를 반환한다.
참고) https://www.cloudflare.com/learning/dns/dns-records/dns-a-record/

 

http://example.com/   레코드 유형 TTL
@ A 192.0.2.1 14400

 

"@" 기호는 이것이 루트 도메인에 대한 레코드임을 나타내고 "14400" 값은 초 단위로 나열된 TTL(수명)이다. 

A 레코드의 기본 TTL은 14,400초이다.

즉, A 레코드가 업데이트되면 적용되는 데 240분(14,400초)이 걸린다.


A 레코드의 가장 일반적인 용도는 IP 주소 조회이다.

도메인 이름(예: example.com)을 IPv4 주소와 일치 시킨다. 

이를 통해 사용자가 실제 IP 주소를 기억하고 입력하지 않고, 웹사이트를 로드 할 수 있다. 

사용자의 웹 브라우저는 DNS Resolver 에게 쿼리를 보내 자동으로 이 작업을 수행한다.

 

🔸 CNAME 레코드

CNAME 레코드(Canonical Name Record)는 하나의 도메인 네임을 다른 이름(별칭)으로 매핑시키는 레코드이다.

예를 들면, example.com 도메인을 blog.example.com 처럼 서브 도메인을 매핑시킬 때 사용한다.

 

CNAME 레코드 사용 시 이점은 하나의 IP 주소로부터 여러 개의 서비스를 실행할 때 관리하기 편해진다.

IP 변경이 이뤄지더라도 A 레코드 하나만 변경하면 되기 때문이다.

CNAME 레코드는 IP 주소가 아닌 도메인을 가르켜야 한다.

 

http://blog.example.com  레코드 유형 값  TTL
@ CNAME example.com의 별칭 32600

 

위의 표를 보면 blog.example.com이 example.com을 가리키는 것을 볼 수 있다.
방금 위에서 설명 했던 A 레코드를 기반으로 한다고 가정 하면, blog.example.com는 IP 주소 192.0.2.1로 해석 된다.

 

A 레코드, CNAME 레코드 차이

Name  Type  Value
blog.example.com CNAME example.com
www.example.com CNAME example.com
example.com A 128.0.4.80

 

위의 표를 보면,

A 레코드를 찾으면 해당하는 IP주소를 바로 찾을 수 있지만 CNAME 레코드는 A 레코드를 먼저 찾은 뒤 IP주소를 찾을 수 있다.

만약, CNAME이 가리키는 VALUE가 A 레코드 가 아닌 또 다른 CNAME 레코드 라면 도메인을 찾는 과정은 계속해서 늘어나게 된다.

IP주소가 변경될 경우 A 레코드의 값을 모두 바꿔줘야 한다.

하지만 CNAME을 지정하면 IP 주소가 바뀔 때 정식 도메인의 IP 주소만 바꾸면 된다.

 

🔸 NS 레코드

NS는 '네임서버(Name Server)'를 의미하며

NS레코드는 어떤 DNS가 해당 도메인의 Authoritative Name Server(실제 DNS 레코드를 갖고 있는 서버)인지 지시한다.

기본적으로 NS 레코드는 해당 도메인의 IP 주소를 찾기 위해 가야 할 곳을 알려준다.

NS 레코드가 적절히 구성되어 있지 않다면 사용자는 웹 사이트나 애플리케이션을 로딩 할 수 없다.


A 레코드, MX 레코드, CNAME 레코드 등 특정 도메인에 관한 모든 DNS 레코드를 저장하는 서버이다.

 

http://example.com  레코드 유형  값  TTL
@ NS http://ns1.exampleserver.com/ 21600

 

대다수 도메인들이 안정성을 높이기 위해 다수의 네임서버에 의존한다.

이렇게 하면, 네임서버 하나가 중단되거나 사용할 수 없게 되어도 DNS 쿼리는 다른 네임서버를 이용할 수 있다.

 

대부분, 기본 네임서버가 하나 있고 이 기본 서버의 DNS 레코드를 그대로 복사한 내용을 갖고 있는 보조 네임서버가 다수 존재한다.

기본 네임서버를 수정하면 보조 서버도 같이 수정이 된다.