Cloud Wave

DNS가 단순 도메인이 아니였다고? DNS란? (feat. Rocky Linux)

eunmiee 2023. 12. 28. 00:30

안녕하세요!

이번주는 클라우드 웨이브 2주차가 시작되었는데요!

지난주에는 네트워크를 일주일만에 도장깨기였는데, 이번주에는 Linux를 부수고 있는 중이랍니다...

 

 

오늘의 포스팅은 DNS에 대해서 가져와봤는데요!

저는 이 수업을 듣기 전까지 DNS는 단순히 IP를 외울 순 없으니 이름을 붙여서 사용하기 편리하도록 만든 것이다!정도로 생각했는데, 오늘 수업을 들으면서 정말 이해가 전~~혀 되지 않더라고요..

 

그래서 저의 기억을 되돌리며 컴네의 추억을 회상하면서 오늘의 포스팅을 적어나가봅니다.

 

그럼 시작하겠습니다!


preview


우선 여러분들이 주로 사용하시는 예시로 한번 살펴볼게요.

 

브라우저에 www.naver.com을 검색한다고 가정해봅시다. 

 

여러분은 해당 도메인 주소를 입력하고 Enter를 치면 바로 응답페이지가 넘어오게 되죠!

 

그렇다면 여기서 질문!

 

우리가 네이버 서버에 접속을 하기 위해서는 당연히 해당 서버의 IP를 알아야만 합니다.

우린 그것은 www.naver.com이라는 도메인 주소로 바로 접속할 수 있었는데 이게 어떻게 가능했던걸까?

도메인 주소는 어떻게 IP를 알아낼 수 있었던 걸까?

 

이게 가능했던 것은 DNS 때문인데요!!

도메인 주소에 대한 IP를 저장하는 저장소가 필요하겠죠?

 

그 역할을 해주는 것이 바로 DNS 입니다.

 

오늘은 이 주제에 대해 함께 알아보고자 합니다.

 

DNS(Domain Name System)란?


  • 도메인 이름과 IP 주소에 대한 정보를 관리하는 시스템
  • 도메인 정보들을 저장 및 조회할 수 있다.
  • 인터넷 사용자는 IP주소를 몰라도 된다.

 

여기서 잠깐!!
www.naver.com에서
naver.com : domain을 의미
www : Host name을 의미

우리가 사용하고 있는 www.naver.com은 사실
www.naver.com.
의 형태라는 것을 알고계셨나요?

뒤에 있는 .이 생략이 되어있었던 것 뿐, 사실 우리가 사용하고 있는 도메인 주소는 이렇게 이루어져 있습니다.

 

DNS Server


Domain Name System의 약자 DNS는 인터넷의 전화번호부이다. 사용자가 'naver.com' 또는 'google.com'과 같은 도메인 이름을 웹 브라우저에 입력하는 경우 DNS는 해당 사이트의 올바른 IP 주소를 찾는 역할을 한다.

-> Name Server라고도 부른다!

 

DNS Server에 IP를 저장하여 관리하고 있다고 했는데 그러면 우리가 날리는 모든 도메인에 대한 요청을 하나의 서버에서 관리하는걸까?

NO!! 당.연.히 그러면 서버가 과부화가 오겠죠…

그렇기 때문에 DNS는 트래픽과 데이터 분산을 위해 서버를 분리하는게 좋겠죠?

즉, DNS Server는 트래픽과 데이터 분산을 위해 계층적으로 서버를 분리하여 관리합니다.

 

트래픽과 데이터의 분산을 위해 여러 서버로 계층을 나누어 분리를 한 형태는 다음과 같습니다.

 

아래 그림을 트리로 생각했을 때, 각 해당하는 노드부분이 모두 서버라고 생각하면 됩니다.

 

Root NS

  • DNS 서버의 최상위 네임서버
  • Root는 .에 해당하는 영역으로 Local NS에서 .을 통해 요청을 보내면 TLD NS에 대한 응답을 받을 수 있다.
  • etc. www.naver.com. 도메인 요청이 있다고 했을 때, 맨 오른쪽의 .을 기준으로 요청을 보낸다.
  • Root NS에서는 .에 해당하는 값(com)을 넘겨주게 된다.

TLD NS

  • Top Level Domain Name Server의 약자
  • 도메인 등록 기관이 관리하는 서버로 Authoritative DNS 서버의 주소를 저장하고 안내하는 역할을 한다.
  • Root NS에서 받은 응답으로 .com으로 요청을 하여 Sub Domain NS에 대한 응답을 받아 온다.
  • etc. Root NS에서 받은 com값을 가지고 요청을 보내게 되면, naver.com에 해당하는 TLD NS값을 받아올 수 있다.

Sub Domain NS

  • TLD Level 밑에 해당하는 NS의 하위 레벨을 통틀어 의미
  • 실제 개인 도메인과 IP 주소의 관계가 기록(저장, 변경)되는 서버
  • 주로 가비아, Route53에서 실제 IP주소를 가지고 도메인을 판매하는 업체를 대표적으로 볼 수 있다.
  • TLD NS에서 받은 응답으로 naver.com으로 요청을 보내면, 그에 대한 응답을 받아 온다.
  • etc. naver.com으로 Sub Domain NS에 요청했을 때, www.naver.com이라는 값을 받아올 수 있다.

DNS Resolver

  • 사용자의 컴퓨터나 네트워크에 위치한 DNS 클라이언트
  • 사용자가 도메인을 입력하면, 해당 도메인의 이름을 IP주소로 변환하기 위해 DNS 서버에 질의하는 역할을 진행
    • 즉, 클라이언트와 DNS 사이에서 IP를 찾기 위해 존재한다고 생각하면 된다.
  • 대표적으로 해당 DNS Resolver, local Name Server라고도 하는데 이는 통신사에서 관리한다.
    • kt, SKT 등

 

권한이 있는 DNS Server vs 권한이 없는 DNS Server


권한이 있는 DNS

  • 실제 DNS 서버 정보를 가지고 있는 Server
  • Root Server, TLD Server, Sub Domain Server가 해당

권한이 없는 DNS

  • DNS 정보를 가지고 있지 않는 Server
  • local Server 해당 = DNS Resolver
DNS 등록
DNS를 등록하는 이유는 가장 큰 원인으로 찾아보자면, 해당 DNS를 등록하지 않으면 도메인으로 접속을 하는 것이 불가능하겠죠? 그리고 이를 사용하는 목적에 있어서는 국가에서 막아놓은 사이트에 접속하거나 특정 서비스를 빠르게 이용하기 위함입니다. 예를 들면 DNS 서버를 8.8.8.8로 등록해두면, 우리는 구글 DNS Server를 통해 유튜브와 같이 구글에서 제공하는 서비스를 빠르게 이용할 수 있게 되는 것이죠 😊
BUT! 다른 서비스들이 느려질 수 있으므로 유의해야합니다..ㅎㅎ

 

DNS 동작 과정


 

1 단계 : 브라우저 → DNS Resolver

  • 사용자가 웹 브라우저에 도메인을 입력하면, DNS Resolver에서는 우선 자신의 캐시에 해당하는 도메인의 IP 주소가 저장되어 있는지 확인합니다.
  • 캐시에 저장이 되어 있을 경우, 바로 브라우저로 해당 IP를 반환하게 되며, 없을 경우 DNS 서버에 요청합니다.

2 - 3 단계 : DNS Resolver ↔ DNS Server(Root NS)

  • 가장 먼저 Root NS에 요청을 합니다.
  • Root NS 는 전 세계에 13곳이 존재하고 있으며, 모든 도메인 이름에 대한 IP 주소를 가지고 있진 않습니다.
  • Root NS에서 요청을 날리면 TLD NS에 대한 응답을 받을 수 있습니다.
    • 해당 응답으로 받은 값은 TLD NS에 대한 정보이며 해당 정보는 다시 DNS Resolver에게 전달됩니다.

4 - 5 단계 : DNS Resolver ↔ DNS Server(TLD NS)

  • Root NS에서 응답 받은 값으로 TLD NS에 질의를 요청합니다.
  • TLD NS는 요청 받은 해당 도메인 값을 DNS Resolver에게 반환합니다.

6-7 단계 : DNS Resolver ↔ DNS Server(Sub Domain NS)

  • 마지막으로 TLD NS에서 받은 도메인 값으로 서브 도메인 네임 서버에 질의를 요청합니다.
    • 예를 들어, wldmsal.com이라는 도메인 값으로 질의를 했을 때 Sub Domain NS에는 다음과 같이 매핑이 되어 있다고 볼 수 있습니다.가비아의 경우, 여기서 CNAME 타입으로 도메인이 매핑되어 있는 경우가 있는데 이는 별칭을 사용하여 IP를 매핑하는 방식이다.
      도메인  타입 값 / 위치
      wldmsal.com A 43.200.2.100
      www.wldmsal.com CNAME wldmsal.com
      • 그렇게 되면, 가장 먼저 wldmsal.com에 해당하는 값으로 www.wldmsal.com이라는 CNAME 타입의 값을 찾게 되고, 내부에서 CNAME에 대한 요청을 통해 A타입인 IP 값을 찾을 수 있게 됩니다.
  • Sub Domain NS에서 받은 응답은 다시 DNS Resolver로 반환하게 됩니다.

8-10 단계 : DNS Resolver → 브라우저 → Server

  • 최종적으로 받게 된 IP값으로 브라우저에 검색을 하여 서버에 접속할 수 있게 됩니다.

 

대략적으로 DNS 동작 원리에 대해 이해가 되셨을까요??

 

아까 전에 A타입? CNAME?이라는 개념이 나왔는데 이것이 과연 무엇을 의미하는 걸까요?

다함께 알아봅시다.

CNAME과 A타입


A타입

  • 단순히 도메인 주소를 IP로 매핑을 해두는 것을 의미합니다.
  • 즉, 가장 단순한 방법이죠!

CNAME

  • 도메인 주소가 아닌 별칭으로써 별칭과 도메인 주소를 매핑하는 것을 의미합니다.
  • 표로 그리면 다음과 같이 표현이 가능하죠!
도메인 타입 값 / 위치
www.wldmsal.com CNAME wldmsal.com

 

A타입으로도 똑같이 표현하면 다음과 같습니다.

도메인 타입 값 / 위치
wldmsal.com A 43.200.2.100
www.wldmsal.com A 43.200.2.100

엥? 그러면 그냥 A타입으로 모두 사용하면 되는거 아닌가요?

왜 굳이 CNAME을 사용하는 것이죠?

  • 그건 바로 계속해서 IP가 바뀌는 환경에서 필요하기 때문인데요. 다들 AWS를 써보셨다면 IP가 계속해서 유동적으로 변하는 것을 확인하실 수 있을 겁니다.
  • 유동적으로 변하는 IP에 대해 AWS에서는 아주 이상한 도메인을 하나 주죠?
  • 이 DNS를 CNAME으로 두어 도메인을 등록해두면 IP가 변동되더라도 한번만 바꿔주면 되는 것이죠.

 

DNS Server 실습 (feat. Rocky Linux)


  • 리눅스 환경에서 DNS Server를 등록하고 연결해봅시다!
  • 실습 환경 : Rocky Linux
  • 따로 도메인을 구입하지 않고 가상의 도메인으로 만들어 내부에서 통신하는 방식으로 실습을 진행하겠습니다.

프로그램 설치

cd /var/named
vi cloudwave.zone
sudo dnf install bind

sudo vi /etc/named.conf

  • 라우팅 현재 Rocky 서버 주소로 등록한 뒤, 모든 호스트에 대한 DNS 쿼리를 허용한다는 것을 의미
  • 어떠한 호스트에서든지 이 DNS 존에 대한 쿼리를 수행할 수 있음
.은 www.naver.com.에 해당
.은 hint타입만 사용

 

DNS 서버에 zone(도메인) 등록하기

vi /etc/named.zones  // /etc/named.conf에서 이름 변경해야 사용가능


zone "cloudwave.com" IN {
				type master;
				file "cloudwave.zone"
};
cd /var/named
vi cloudwave.zone

 

 

$TTL 86400  // 캐싱 시간
@       IN SOA ns       admin (           // @ : 도메인(cloudwave.com),
																					   IN : IN 지시자 다음에 Resource Record(RR)이 나옴을 의미
                        20231227          // ns : ns.cloudwave.com.을 의미
                        1D                // admin : admin@cloudwave.com
                        1H                // 20231227 : Serial Number
                        1W                // 1D : 갱신 시간(refresh)
                        3H )              // 1H : 재요청 시간(retry)
        IN NS ns // (= ns.cloudwave.com.) // 1W : 정보 만료시간(exprie)
        IN MX 10 mail                     // 3H : 최소시간(minimum)
ns      IN A    192.168.159.135
mail    IN A    192.168.159.135
www     IN A    192.168.159.135
ftp     IN A    192.168.159.135

 

  • Resource Record(RR)
    • A(AAAA) : 호스트 이름에 할당되어 있는 IP주소를 지정함. AAAA는 IPv6주소에 대응.
    • NS : Name Server를 지정함.
    • MX : Mail eXchanger의 약자로 메일 서버를 의미함.
    • CNAME : Canonical NAME의 약자로 정규이름을 의미함. 별칭을 위해 사용됨.
    • PTR : Pointer의 약자로 IP주소로 호스트명을 변환하기 위해 사용됨.
    • SPF : 특정 도메인에서 이메일을 보낼 수 있도록 승인된 모든 서버를 열거.
    • TXT : 호스트나 기타 이름과 임의의 텍스트를 연계하는 기능을 제공.
    • SRV : 특정 서비스를 호스팅하는 컴퓨터를 식별하는 데 사용

 

 

자, 이렇게 DNS를 등록해줬을 때, CNAME 타입으로 등록된 값이 canonical name으로 저장되어 다시 내부에서 요청을 날려 IP값을 가져올 수 있습니다.

 

 

마무리


지금까지 DNS가 무엇인가?에 대해 알아보았습니다.

 

다들 유익하셨나요?

저의 글이 언젠가는 저 뿐만 아니라 다른 사람들에게도 한조각의 힘이 된다면 너무나도 뿌듯할거 같아요 ㅎㅅㅎ

아직은 많이 부족하지만 오늘도 긴 글 읽어주셔서 감사합니다.

 

그럼 다음 포스팅에서 만나요~