본문 바로가기

리눅스

리눅스 DNS 서버 - 개념과 구축 방법(CentOS)

DNS 서버

우리가 자주 사용하는 네이버, 구글, 다음 등의 HTTP나 FTP, SMTP 등 통신을 하기 위해서는 서버의 IP 주소를 알아야만 가능하다. IP 주소는 다들 알고 있듯이 32비트의 숫자로 이뤄지기 때문에 사용해야 될 사이트의 IP 주소를 일일이 외우거나 적어두기는 쉽지않다. 그래서 생겨난 것이 바로 DNS 서버이다. 

DNS 서버는 외우기 쉬운 문자로 된 주소(도메인)로 접속을 요청하면 DNS 서버가 해당 주소에 맞는 IP 주소를 알려주는 것이다. 사용자는 www.google.com의 도메인을 사용하여 구글에 접속하는 것으로 알고 있지만 사실은 해당 도메인 입력 시 pc에 등록된 DNS 서버에게 이 도메인으로 등록된 IP 주소를 받아와서 IP 주소를 사용하여 접속하는 것이다. 반대로 IP 주소를 가지고 도메인 주소를 알아낼 수도 있는데 이를 host aliasing이라고 한다.

DNS 서버는 7계층 protocol에 속하며 계층형구조로 구조화된 최초의 분산형 데이터베이스 서버이다. 계층형 구조로 이뤄진 이유는 서버에 장애 발생 시 인터넷 사용이 불가해지기 때문이다. 또한 전세계에서 사용하는 DNS 서버를 중앙집중식으로 구성하면 거리로 인한 속도 저하도 발생하게 되고, 엄청난 Traffic으로 인한 속도 저하도 발생 할 것이기 때문이다. 


DNS 서버의 계층구조

수많은 name server들이 계층형구조(트리구조)로 구조화되어 있다. 구조를 보면 다음과 같다.

최상의 DNS(root DNS) - Top 레벨 DNS들의 정보를 갖고있는 DNS 서버이다.

Top-레벨 DNS - 최상의 바로 밑에 있는 서버를 말한다.(사진에서 가운데)  .com, .org, .edu, .kr, .net 등등 도메인 주소 맨뒤에                         붙는 것이 소속된 Top-레벨 DNS가 어딘지 알려준다.

authoritative DNS(책임 DNS) - 관리하고 있는 도메인의 IP 주소를 갖고 있는 DNS 서버이다.(사진에서 맨아래)

cache DNS - 도메인이 없는 DNS 서버이다. root DNS에 접속해서 해당 도메인의 IP를 찾아주는 역할을 한다.


DNS 서버의 동작

사용자가 www.google.com에 접속하는 경우

1. 사용자의 local DNS 서버에게 www.google.com의 IP를 요청한다.

2. local DNS 서버가 root DNS 서버에게 'com' DNS 서버 IP를 요청한다. 

3. root DNS 서버는 요청 받은 'com' DNS 서버 IP를 local DNS에게 알려준다.

4. local DNS 서버는 root DNS 서버한테 받은 'com' DNS 서버에게 google.com 도메인을 관리하는 DNS 서버 IP를 요청한다.

5. 'com' DNS 서버는 local DNS 서버에게 google.com 도메인을 관리하는 DNS 서버 IP를 알려준다.

6. local DNS 서버는 google.com 도메인을 관리하는 DNS 서버에게 www.google.com의 접속 IP를 요청한다.

7. 응답 받은 www.google.com의 접속 IP를 사용자에게 알려준다.

8. 사용자의 pc는 local DNS에게 받은 IP를 사용하여 패킷을 만들어 www.google.com에 접속한다.


이러한 과정을 매번 걸치면 속도가 느려지기 때문에 local DNS 서버는 자신의 메모리에 설정된 기간 만큼 저장해두고 요청이 오면 위의 과정을 걸치지 않고 직접 IP를 재공해준다. 메모리가 가득찼을 경우 가장 오래된 순으로 삭제된다.

* local DNS 란 - 각 PC 마다 DNS 서버를 설정해두는데 내 PC가 등록한 DNS 서버를 local DNS서버라고 한다.                                                          이는 root DNS, 책임 DNS, cache DNS랑 상관없이 등록 가능하지만 일반적으로 cache DNS를 등록한다.

      local DNS 설정 화면. 보조 DNS는 local DNS에서 도메인에 해당하는 ip를 못 찾았을 시 사용된다. DHCP로 자동으로 받을 수도 있다.

*도메인 주소의 뜻? www.google.com을 예를 들면, 'com'은 'com'을 관리하는 Top-레벨 DNS서버 밑에 등록되었다는 것이다.                                          google은 google이란 도메인의 이름이며 이를 관리하는 책임 DNS 서버를 나타낸다.                                                                    www는 world wide web의 줄임말이면서 host 주소이다. 모두가 www를 사용하지만 무조건 www를 사용해야 되는                              것은 아니다! 임의로 지정 가능하며 host에 따라 접속 하는 웹페이지를 다르게 설정할 수 있다.

ex) www.naver.com으로 접속하면 네이버 기본 화면이 나오고 blog.naver.com을 입력하면 블로그 메인화면이 나오듯이.


실습 - DNS 서버 구축 방법 -- CentOS 사용

구축에 앞서 설정 파일들의 위치와 용도

/etc/resolv.conf - local DNS 주소를 설정한다. nameserver [DNS 서버 IP]를 입력하면 된다.

/etc/named.conf - 요청이 들어올때 제일 먼저 읽는 파일이다. zone파일들의 directory 설정, 도메인과 zone파일에 대한 연결                          설정을  할 수 있다.

/var/named/*.zone - 해당 도메인의 IP주소를 갖고 있는 파일이다.


DNS 서비스 실행 - service named start | stop | restart 


DNS 서버 설치

패키지 확인 - yum list bind (dns 서버 패키지 이름이 bind 이다)

패키지 설치 - yum install -y bind. x86_64 (패키지 이름은 다를 수도..)

설치된 패키지 재확인 후 chroot 가 설치되어있다면 지워주자!

yum erase bind-chroot. x86_64


zone 파일 만들기

cd /var/named

vi [파일명].zone

$TTL 86400

@ in SOA jw.ast013.org. root.jw.ast013.org. (

                        2018031423      ; serial

                        28800           ; Refresh

                        14400           ; Retry

                        3600000         ; Expire

                        86400 )         ; Minimum

; Name Server

        IN      NS      jw.ast013.org.

; host address

          IN      A       192.168.10.135

jw       IN      A       192.168.10.135

www    IN    A       192.168.10.135

;

*도메인 주소 맨 뒤에 . 이 붙어있는 것이 보일 것이다. 꼭 넣어줘야한다. 원래 접속할때도 마지막에 .을 붙혀야 하는데, 웹 어플리케이션에서 . 생략시 자동으로 입력해주기에 안쓰는 것 뿐이다.


zone 파일 해석

@ in SOA jw.ast013.org. - SOA // jw.ast.013.org에 대한 모든 정보가 여기 있다. 라는 의미이다.

root.jw.ast013.org. // 오류 발생시 여기로 메일을 보내라는 것이다. 원래는 root@주소를 쓰는 것이지만 첫 글자에 @썼기 때                              문에 @대신 .을 입력하는 것이다. 디폴트로 root를 가지고 있는 것이다.

serial  // 버전?을 의미한다. zone파일를 수정하면 serial도 같이 수정해야 한다. 임의의 숫자지만 보통 날짜로 한다.

; Name Server 

        IN      NS      jw.ast013.org. // 해당 서버의 이름을 지정한다. 보통 host는 NS를 사용한다고 한다. 임의 설정 가능하다.

;host address // [host] [IN] [A] [IP] 순으로 입력한다. 

        IN      A     192.168.10.135  // host 부분이 공백(생략)일 경우 연결할 ip 지정.                                                                                                     ex) google.com만 입력해도 www.google.com으로 접속되게 하는 것.

www  IN      A     192.168.10.135  // www.ast013.org로 요청이 오면 192.168.10.135로 연결한다.

jw      IN     A      192.168.10.133 // jw.ast013.org로 요청이 오면 192.168.10.133으로 연결한다.


* CNAME 설정 : www     IN      CNAME   jw.ast013.org. // 호스트 별로 접속할 IP가 같을 경우 host adress에 여러개 등록하지 않고                      CNAME을 사용하여 같은 IP로 접속하게 설정할 수도 있다.


named.conf 설정

cd /etc

vi named.conf

options {

        directory       "/var/named";

};

zone "." IN {

        type hint;

        file "named.ca";

};

zone "ast013.arg" {

        type master;

        file "ast013.zone";

};

zone "ast013-1.arg" {

        type master;

        file "ast013-1.zone";

};


named.conf 파일 해석
directory         "/var/named"; // /var/named 디렉토리에 있는 zone파일을 참조하라는 의미를 갖는다.

zone "." IN {                       // 서버 자신이 알고있는 도메인이 아니면(root DNS한테 물어봐야 하면)
              type hint;             // 타입 hint(root DNS로 갈경우에만 쓰는 타입.)
              file "named.ca";     // named.ca(root dns 정보들이 있다. 기본 재공) 파일을 참조하라는 의미를 갖는다.
};                                      // cache DNS는 이 부분까지만 있다.

zone 'ast013.org" {               // *.ast013.org에 대한 요청이 들어오면
             type master;          // 타입 master(서버 자신에게 등록된 도메인 주소일 경우 사용)
             file "ast013.zone";   // ast013.zone 파일을 참조하라는 의미를 갖는다.
};


하나의 DNS 서버에 여러개의 도메인을 관리하려면 zone [도메인] { } 부분을 여러개 추가하고, 매칭되는 zone파일을 만들어두면 된다. 

slave DNS(세컨더리 DNS)에 대한 설정은 다음 장에서... 

'리눅스' 카테고리의 다른 글

FTP 서버  (0) 2018.09.07
리눅스 DNS 서버 - slave DNS  (0) 2018.09.04
리눅스 문서 편집기 vi 명령어, 사용법  (0) 2018.08.24
리눅스 기초(기본) 명령어 모음  (0) 2018.08.23