[Server] DNS와 네임서버 이해 및 구축

조찬영·2024년 3월 14일
0

1.DNS(Domain Name System)

1.1 DNS 는 어떤 역할을 수행하나요?

만약 우리가 웹 사이트에 접속을 요청할 때 도메인이 아닌 IP로 접속 요청한다면 어떻게 될까요?

몇 개 정도라면 기억하고 집적 타이핑할 수 있겠지만 이미 존재하는 웹 서버만해도 그 수가 셀 수 없이 많고 방대한데요.
이러한 불편함을 해소하기 위한 것이 바로 DNS 가 되겠습니다.

위 이미지는 이와 같은 DNS 의 작동을 간략히 표현한 이미지입니다.

DNS 는 도메인에 대한 IP 주소를 저장하고 있다가 특정 도메인 요청시 매핑되는 IP를 클라이언트에 반환하는 역할을 수행하는 것을 알 수 있습니다.

1.2 DNS는 트리 구조이다.

하지만 DNS 는 어떻게 수많은 도메인들을 저장할 수 있고 관리할 수 있는지 궁금했습니다.
다음은 DNS 구조에 대한 이미지입니다.

이미지 설명

위 부분에서 핵심적인 부분은 DNS(Domain Name System)는 트리구조를 가지고 있는 시스템이라는 것입니다.
모든 도메인은 Root라는 최상위 계층 도메인에 속해있으며
각각의 레벨 계층은 특정 도메인을 소유하고 있는 네임 서버(Name Server)가 존재하고 있습니다.

즉, Root(.) 네임 서버는 최상위 레벨 도메인(TLD)인 com,org등의 네임 서버와 국가 도메인인 kr,us 등의 국가 도메인 네임 서버를 관리하는 것이고,

네임서버 COM 은 그 밑의 레벨 계층인 제 2 레벨 도메인 (SLD) 에 위치한 Naver,Google..등의 네임서버만 관리하는 것입니다.

www.naver.com 웹 서버 요청에 대해서
위에서 살펴본 트리 구조 형태로 도메인을 탐색하는 것을 알 수 있습니다.

1.3 DNS 동작 순서

하지만 모든 요청이 다이렉트로 Root 네임 서버로 가지 않습니다.

각 PC는 지정된 로컬 네임 서버가 있는데
도메인에 대한 쿼리 요청을 지정된 로컬 네임서버가 먼저 처리를 하게 됩니다.

로컬 네임 서버는 여러 기업에서 제공하고 있으며
Google,Cloudflare 국내에는 KT,LG,SK 등이 있습니다.

이 부분에 대해서 더 궁금하신 분들은
ISP(InternetServiceProvider), Public DNS 의 차이를 알아보셔도 좋을 것 같습니다.

위의 이미지는 클라이언트의 요청 쿼리에 대한 전반적인 DNS 동작 순서이며 정리한다면 이렇습니다.

  1. Host PC 는 도메인 주소의 IP가 로컬 캐시에 저장되어 있는지 확인합니다.
  2. 저장되어있지 않다면 지정된 로컬 DNS 서버에 요청을 보내고 로컬 DNS는 캐시 DB에 해당 도메인에 대한 IP가 있는지 탐색합니다.
  3. 지정된 IP가 없다면 Root NS 에 요청을 보내게 됩니다.

  4. Root NS 는 요청된 도메인에 대한 TLD 정보를 DNS 서버에 응답합니다.
  5. TLD 네임 서버와 매치되는 네임 서버에 도메인에 정보를 요청합니다.
  6. TLD 네임 서버는 자신이 소유한 네임 서버중 요청과 매치되는 네임 서버 정보를 DNS 서버에게 응답합니다.
  7. DNS 는 응답받은 정보를 토대로 그 하위 레벨 계층인 서브 도메인 네임 서버에 요청을 합니다.
  8. 서브 도메인 네임서버는 요청된 도메인에 대한 정보를 DNS에게 응답합니다.

  9. DNS 는 응답받은 도메인에 대한 정보를 캐시에 저장하고 Host PC 가 요청한 도메인에 대한 IP를 응답합니다.
  10. Host PC 는 DNS로 부터 받은 IP 주소로 웹 서버에 접속할 수 있습니다.

(위에서 살펴본 트리구조를 살펴본다면 수월하게 이해할 수 있습니다.)


1.4 캐싱 전용 네임 서버

만약 조금 더 빠른 쿼리에 대한 응답을 원한다면 캐시 전용 네임 서버를 고려할 수 있습니다.

자주 사용되어지는 도메인에 대해서는 DNS Server에 요청할 필요없이 사설 네트워크 레벨안에서 이를 해결하는 것입니다.
거리상 훨씬 가깝기에 더 빠르고 효율적인 응답속도를 기대해 볼 수 있습니다.


2. 캐싱 전용 네임 서버 구축

2.1 필요 패키지 설치

이제 리눅스 OS에서 캐싱 전용 네임 서버를 구축하기 위해 필요한 패키지들을 설치해보겠습니다.

(현재 저는 VMware 가상 머신에서 Rocky 9 버전으로 진행하고 있으며 명령어는 버전별로 상이할 수 있습니다.)


패키지 설치

이미지 설명
  • 네임 서버와 관련된 패키지들을 설치합니다.

2.2 네임 서버 환경 설정

2.2.1 named.conf 파일 편집

이미지 설명
  • 캐싱 전용 네임 서버의 설정 파일인 named.conf 파일을 편집합니다.

2.2.2 named.conf 설정 변경

각 행 별로 기존에 설정 된 값을 아랫 값과 같이 수정합니다.

이미지 설명 이미지 설명
이미지 설명 이미지 설명
이미지 설명 이미지 설명
이미지 설명 이미지 설명
  • 사설 네트워크 대역의 모든 프로그램이 네임 서버를 사용할 수 있도록 설정을 변경해주었습니다.

2.2.3 서비스(데몬) 시작

  • 서비스(데몬) 재시작
이미지 설명
  • 상시 가동 (서비스가 알아서 부팅되도록)
이미지 설명
  • 네임 서버 상태 확인
이미지 설명

2.2.4 방화벽 허용

  • DNS 방화벽 허용
    이미지 설명

DNS 서비스 방화벽을 허용합니다.


2.2.5 네임 서버 동작 테스트

$ nslookup
$ server [테스트 할 네임 서버 IP]
$ 조회할 도메인 

위 명령어를 순차적으로 입력하였을때
도메인에 대한 IP주소가 나오는지 테스트합니다.

이미지 설명

테스트가 되었다면 사설 네트워크 대역에 다른 서버에서도
nslookup을 통한 테스트가 정상적으로 동작되는지 테스트합니다.


2.3 resolve.conf 파일 설정 변경

resolve.conf 파일은 리눅스에서 사용되는 DNS 설정 파일입니다.
해당 파일을 통해서 직접 DNS 를 설정할 수 있습니다.

설정하고 싶은 클라이언트 서버에 접속하여 resolve.conf파일을 수정합니다.

이제 웹 서버에 쿼리 요청을 보낼 때 새로 설정 된 캐싱 전용 네임 서버로 사용하게됩니다.


3. 마스터 네임 서버 구축

3.1 마스터 네임 서버란?

만약 서비스를 만들고 도메인을 생성했다면
외부 클라이언트에서 해당 도메인 URL 요청시 IP를 반환할 수 있어야합니다.

즉, 네임 서버가 도메인과 IP 를 매핑시켜주는 역할이라면
마스터 네임 서버는 도메인과 상응하는 IP를 직접 저장하고 반환하는 네임 서버입니다.

3.2 마스터 네임 서버 설정

먼저 네임 서버에 접속을 하고 vi /etc/named.confnamed.conf 파일을 편집합니다.

(named.conf 는 네임 서버 서비스가 시작될 때 제일 먼저 읽게되는 파일입니다.)

named.conf 파일 설정

이미지 설명
  • Options 의 directory는 도메인에 대한 상세 설정 파일 (도메인.db) 의 경로입니다.
이미지 설명
  • type 은 master,slave로 나뉘는데 마스터 네임 서버는 master 타입을 가지고 있습니다.
  • file은 등록한 도메인에 대한 상세 정보가 담긴 파일의 파일명입니다.
  • allow-update는 2차 네임 서버에 대한 설정이며 none 은 생략을 의미합니다.

이제 도메인에 대한 상세 설정을 하기 위해 named.conf의 Options 디렉토리의 경로 /var/named 로 Change Directory하고 해당 경로에 name.conf 의 file 에 설정한 이름으로 파일을 생성합니다. (.db 파일)

/var/named 경로

이미지 설명

.db 파일 설정

이미지 설명

.db 파일은 포워드존 파일 로서 다음과 같은 문법을 사용합니다.

  • TTL
    • Time To Live 의 약자로 다른 네임 서버가 해당 소트에 대한 정보를 요청했을때 해당 IP주소를 캐시에 저장할 수 있는 시간이다.
  • @
    • named.conf 에서 설정된 도메인 명
  • SOA
    • zone에 대한 필수적인 정보를 가지고 있는 레코드
  • IN
    • Internet을 의미하는 클래스
  • NS
    - Name Server 의 약자로 지정된 네임 서버를 의미
  • A
    • 해당 호스트에 상승하는 IP를 IPv4 형식으로 나타냄

(저는 웹 서버와 네임 서버를 테스트 편의상 동일하게 설정하였습니다.)


이후 다른 클라이언트 서버에서 접속을 시도하였고 정상적으로 접속된 것을 확인할 수 있었습니다.



마무리

이로서 DNS 와 네임 서버를 이해해보고 간단하게 구축해보았습니다.
위 내용을 정리하면서 느낀 DNS와 네임 서버 관련 가장 중요한 내용은 트리 구조로 클라이언트의 요청을 처리하는 부분이였던 것 같습니다.

제한된 리소스에서 클라이언트의 요청을 보다 쉽고 빠르게 처리하기 위한 최적의 경로를 고민하는게 역시 중요해보입니다

서버가 확장되고 많아질수록 (클라이언트의 요청은 늘 동일하지만 응답하는 서버는 늘 다를 수 있는 환경)
DNS 와 네임 서버의 역할은 그에 따라 더 커지고 중요해질 것 같습니다:)

profile
보안/응용 소프트웨어 개발자

0개의 댓글