본문 바로가기

Dev/Dev:: Linux

[Day009] Linux 9일차 - DNS 서버 구축

● DNS 서버 구축


  - DNS 서버 : HostName(ComputerName+Domain)을 ip주소로 변환하는 서버

    => 외부 DNS 서버 : 도메인을 이용하여 도메인DB(.도메인)의 정보를 활용해 도메인에 대한

                       내부 DNS 서버명과 ip 주소를 응답해 주는 서버

       ex) ocj1778.com   =>  ns.ocj1778.com : 172.16.5.100


    => 내부 DNS 서버 : 도메인 그룹에 등록된 ComputerName에 대한 ip 주소를 응답해 주는 서버

       ex) www.ocj1778.com    =>   www : 172.16.5.99



  - DNS 서버 구축 방법

    1. 도메인 구입 후 . 도메인에 도메인에 대한 정보(내부 DNS서버명과 ip주소)를 등록

       ex) ocj1778.com   =>  ns.ocj1778.com : 172.16.5.100

            ocj1778.co.kr  =>  ns.ocj1778.com : 172.16.5.100


    2. DNS 서버 프로그램 설치

       ]# rpm -qa | grep bind     => 설치 유무 확인

       ]# yum -y install bind     => yum 명령을 이용해 bind 설치 

       ]# rpm -qa | grep bind

       bind-9.3.4-10.P1.el5       => bind 프로그램




    3. DNS 서버 환경설정 => zone(영역)을 생성

      1) forward zone(순방향 영역) : 도메인(호스트명)을 ip 주소로 변환하는 정보를 가지고 있는 영역

         => 도메인의 갯수만큼 생성

        

   2) reverse zone(역방향 영역) : ip 주소를 도메인(호스트명)으로 변환하는 정보를 가지고 있는 영역

         => 1개만 생성(생략 가능)

      ]# vi /etc/named.conf    =>  zone를 만들어 주는 환경설정 파일 

options {         => 서버옵션 지정영역

    directory "디렉토리명"; => zone 파일이 저장되어야될 디렉토리

      };  



      zone "정보" IN {                   => 영역 지정

      type {hint|master|slave};   => zone의 형태 지정

             masters { 1차DNS주소; };    => master(1차 DNS서버의 ip주소) : 2차 DNS 서버 설정(type이 salve인 경우)만 사용  

             file "파일명";              => zone에서 사용할 파일 : zone file

             allow-update { key; };      => 2차 DNS에서 1차 DNS 참조시 인증하기 위한 key 값

      };

      ....


        => 정보 : 도메인 - forward zone

                  ip주소 - reverse zone                      


        => type : hint - zone 파일을 다운로드 받는 zone인 경우

                     master = zone파일을 직접 생성하는 zone인 경우(1차 DNS 서버)

                     slave = zone파일을 1차 DNS의 zone파일을 복사하는 zone인 경우(2차 DNS 서버)


        => zone 파일 : zone의 상세정보를 저장하고 있는 파일

             zone에서 설정할 값이 같은 경우 같은 zone파일을 사용해도 된다.

 

    ex) ]# vi /etc/named.conf

         options {

directory "/var/named";

         }; 


         zone "." IN {        => forward zond : .도메인

       type hint;

                file "named.ca";     => zone 파일 : . 도메인의 ip주소 정보가 저장된 파일

         };         


         zone "ocj1778.com" IN {    =>  forward zond : ocj1778.com 도메인

type master;

file "ocj1778.com.zone";

allow-update { none; };

};

 

         zone "ocj1778.co.kr" IN {    =>  forward zond : ocj1778.co.kr 도메인

type master;

file "ocj1778.co.kr.zone";

allow-update { none; };

};


         zone "5.16.172.in-addr.arpa" IN {   => reverse zone : 172.16.5 네트워크 그룹 

type master;

file "ocj1778.rev";

allow-update { none; };

         };






    4. zone 파일 생성    =>  /var/named  디렉토리에서 생성

       : zone 파일은 레코드 단위로 데이타를 표현


     1) .도메인에 대한 zone 파일  

         named.ca 파일은 다운로드  =>  wget 명령(URL 자원 다운로드 명령) 활용

          : 외부 DNS 서버 구축


        ]# wget ftp://ftp.internic.net/domain/named.root 

        ]# mv named.root /var/named/named.ca    => 파일 이동 후 파일명 변경  






     2) reverse zone 파일  => ocj1778.rev

       ※ zone 파일 맨 처음은 TTL 시간을 작성해 준다.

         형식) $TTL  시간(초)  =>  zone 파일의 정보를 클라이언트가 기억하도록 요청하는 시간

       SOA 레코드 => 모든 zone 파일의 가장 먼저 선언되는 레코드

=> 도메인에 대한 권한이 있음을 알리는 레코드 및 2차 DNS가 1차 DNS를 참조하기 위한 시간 설정


        형식)  도메인      IN    SOA    내부DNS서버명  도메인관리자이메일주소  (

시리얼번호  

참조시간

재참조시간

포기시간

정보삭제시간 )  


           => 도메인 대신 @를 사용해도 된다.

           => 도메인 마지막에는 반드시 .를 붙인다.  

               ex) ns.ocj1778.com.


           => 도메인 관리자 이메일에는 @를 사용할 수 없다  

               ex) ocj.ocj1778.com   => @ 대신 .을 사용


          => 시리얼번호 :  2차 DNS 서버가 1차 DNS 서버의 Zone파일을 참조할 경우  1차 DNS 서버의 

                            Zone 파일의 변경 유무를 확인하는 값 - 일반적으로 날짜 및 시간정보를 활용

              참조시간 : 2차 DNS서버가 1차 DNS 서버를 반복적으로 참조하는 시간

              재참조시간 : 2차 DNS서버가 1차 DNS 서버를 참조하기 위해 요청에 대해 응답이 없는 경우                                 다시 요청하기 위한 시간

              포기시간 : 2차 DNS서버가 1차 DNS 서버를 참조할 경우 반복적인 요청에 응답이 계속 없을                             경우 포기하는 시간 => 서버 중지

              정보삭제시간 : 1차 DNS서버의 정보를 2차 DNS 서버 cache에 저장하는 시간


NS 레코드  => 모든 zone 파일에 선언되며 SOA 레코드 아래 선언 

           =>  도메인을 관리하기 위한 내부 DNS서버명 지정

         형식)  도메인    IN     NS     내부DNS서버명

               => 도메인은 SOA 레코드에서 @를 사용한 경우 생략 가능

               => NS 레코드는 여러 개 선언 가능(1차 DNS 서버는 여러 개 선언)


 PTR 레코드  =>  reverse zone에만 존재하는 레코드

               => ip 주소는 호스트명으로 변경하는 정보를 가진 레코드

         형식) ip주소 IN     PTR     호스트명


       ex) ]# cd /var/named

           ]# vi ocj1778.rev 

           $TTL 86400

           @       IN      SOA     ns.ocj1778.com. ocj.ocj1778.com.   (                   

  2013091314

                           28800

                           14400

                           3600000

                           86400   )


                   IN      NS      ns.ocj1778.com.

           100     IN      PTR     ocj1778.com.

 






     3) forward zone 파일  => ocj1778.com.zone  또는 ocj1778.co.kr.zone

  ※ forward zone파일은 reverse zone 파일과 동일하게 TTL, SOA 레코드 및 ns 레코드로 시작된다. 

        MX 레코드  => 일반적으로  forward zone 파일에 선언한다. 


      => 도메인을 이용한 메일 서버명을 지정(메일서버를 구출할 경우 반드시 선언해야 되는 레코드)

         형식)  도메인   IN      MX   숫자    메일서버명


        ※ 숫자 : 메일 주서버 및 메일 보조서버들을 구분하는 값

           => 값이 적은 것이 메일 주서버


           주서버 :  메일을 받아 계정에게 전달

           보조서버 : 주서버가 고장날 것을 대비하여 만든 서버

                      주서버가 고장난 경우 


        A 레코드  => forward zone 파일에만 설정

                  => 호스트명을 ip주소로 변경하기 위한 정보를 저장한 레코드


         형식)  호스트명    IN      A     ip주소     

       CNAME 레코드  =>  기존 호스트명에 대한 alias명을 지정


         형식)  호스트명    IN     CNAME    기준호스트명 


      ex) ]# vi ocj1778.com.zone 

          $TTL 86400

          @          IN          SOA     ns.ocj1778.com. ocj.ocj1778.com.   (

                              2013091314

                              28800

                              14400

                              3600000

                              86400   )


                      IN      NS      ns.ocj1778.com.


                      IN      MX      5       mail.ocj1778.com.


                      IN      A       172.16.5.100

          www     IN      A       172.16.5.100

          cafe      IN      A       172.16.5.100

          blob      IN      A       172.16.5.100

          www2    IN     CNAME   www

          ns        IN      A       172.16.5.100

          mail      IN      A       172.16.5.100

          ftp        IN      A       172.16.5.100

          mysql   IN      A       172.16.5.100





          ]# vi ocj1778.co.kr.zone

          $TTL 86400

          @           IN      SOA     ns.ocj1778.com. ocj.ocj1778.com.   (

                              2013091314

                              28800

                              14400

                              3600000

                              86400   )


                       IN      NS      ns.ocj1778.co.kr.


                       IN      A       172.16.5.100

          www      IN      A       172.16.5.100

          ns         IN      A       172.16.5.100








    5. DNS 서버 프로그램을 실행 =>  named 이용하여 관리

      ]# service named start     =>  실행



      ]# ps -xa | grep named     =>  실행 여부 확인

  

      ]# chkconfig --level 2345 named on   => 부팅시 자동 실행되도록 변경

      ]# chkconfig --list | grep named    

      named           0:해제  1:해제  2:활성  3:활성  4:활성  5:활성  6:해제




    6. DNS 서버에 대한 요청 응답 확인

      ]# nslookup www.ocj1778.com    =>  요청

        => ip주소로 응답  


      ※ 도메인에 대한 .도메인 등록이 되어 있지 않기 때문에 응답이 없다.

         (잘못된 응답이 발생할 수도 있다.)



         ]# vi /etc/resolv.conf

         nameserver  210.181.1.24 

                          ------------

                           └ 172.16.5.100으로 변경 => 현재 서버의 ip주소로 변경 


         ]# nslookup www.ocj1778.com

         Server:         172.16.5.100

         Address:        172.16.5.100#53


         Name:   www.ocj1778.com

         Address: 172.16.5.100


      ※ 응답이 없을 경우 /etc/named.conf 또는 zone 파일에 오류가 발생된 경우

          =>  변경 후 named 재실행