DNS 서버 구성하기

Posted 2008. 11. 6. 16:50


1. IP 주소와 도메인
  인터넷에 연결된 수많은 서버와 클라이언트 컴퓨터는 각자 고유한 IP주소를 가지고 있는데 이 IP는
 오직 자기만의 주소이다. 주민등록번호가 다르듯이 IP주소도 똑같은 경우가 없다. IP는 숫자로 된
 배열로 되어있는데(IP에 대해서는 네트워크 책 참조), 많은 수의 갯수를 외우기는 상당히 어렵다.
 따라서, 알기 쉽게 등장한 것이 도메인 네임이다.


2. DNS서버에 대하여
 우리는 흔히 특정한 사이트에 접속하기 위해 도메인이름을 입력한다. 그러나 실제적으로 인터넷은
IP주소기반이기 때문에 해당사이트의 IP주소를 알아야 한다. 이 때 우리가 이용하는 것이 네임서버
이다. 네임서버는 특정한 클라이언트로부터 특정한 도메인에 대한 요청이 왔을 경우 Root 네임서버와
다른 네임서버로 부터 정보를 얻어 요청한 도메인에 대한 IP주소를 알려주는 역할을 한다. 또한 각각
의 도메인네임서버들은 2차도메인도 부여하고, 다른 서버로부터 오는 도메인에 대한 요청도 응답한다.


3. DNS서버의 종류와 역할
 (1) 설명: DNS서버는 크게 Primary서버, Secondary서버, Caching Only서버로 나뉜다. 자신의
          도메인을 가지기 위해서는 가장 기본이 되는 것이 Primary서버이고, Secondary서버 및
          Caching Only서버는 보조 및 백업 서버 혹은 속도를 빠르게 하기 위해서 필요한 서버이다.
          일반적으로 Secondary서버는 Primary 서버가 다운되었을 경우를 대비해 백업할 경우에
          사용하고,  Caching Only서버는 기간망간의 캐싱을 위해서 사용한다.
 (2) 종류와 역할
   1) Primary Name Server: 도메인 네임서버 사용시에 꼭 구축해야 하고, 보통 Master DNS라고
                          부른다.
   2) Secondary Name Server: 주 도메인서버인 Master DNS의 백업을 담당하고 Slave DNS라고
                            부른다. 반드시 구축할 필요는 없다.
   3) Caching Only Server: 서버에 기록된 정보가 요청이 올 경우에 응답해주는 서버이다. 즉 한번
                          요청한 정보를 서버에 기록해 두었다가 다시 동일한 요청이 왔을 때 직접
                          조회하지 않고 바로 응답하도록 해주는 서버이다.


4. 네임서버 구축의 개요
 (1) 개요: 네임 서버를 운영하기 위해서는 서버에서 도메인 네임 서비스를 수행하는 프로그램을 설
          치해야 한다. Red Hat은 BIND(Berkeley Internet Name Domain)이라는 DNS서버용
          소프트웨어(데몬)을 제공한다. 또한 이 네임서버의 데몬이름은 named이다.
 (2) RedHat Linux와 rpm 패키지
   RedHat Linux는 3개의 rpm패키지로 제공한다. DNS 서버관련 패키지는 bind 및 bind-utils이고,
  기본 환경설정파일 관련 패키지는 caching-nameserver로 제공이 된다.
 (3) bind관련 파일 및 디렉토리
   1) 주환경설정파일
     /etc/named.conf
      => named데몬이 작동할 때 처음으로 참조하는 파일로 환경설정과 밀접한 관련이 있다.
        이 파일에서는 도메인별 zone파일을 지정하는 역할을 주로 한다.
   2) 시스템 부팅시 자동 실행 스크립트 파일
     /etc/rc.d/init.d/named
      => named데몬을 실행시킴에 있어 최적화시킨 파일이다. 네임서버를 작동시키고 중단시킬 때
        사용한다. 보통 stop, start, restart, reload 등의 인자값을 사용하는데, DNS에서는
        restart하면 caching정보가 사라지므로, 보통 reload를 많이 사용한다.
   3) /var/named 디렉토리: 루트 도메인 서버에 대한 정보가 담긴 zone파일인 named.ca와
                          localhost에 대한 zone파일인 localhost.zone, reverse zone파일인
                          named.local 파일 등 도메인 설정을 위한 zone파일이 위치하는
                          디렉토리이다.
   4) localhost와 루트 네임서버 정보 데이터베이스파일
    ㄱ. /var/named/named.ca       : 루트(.) 네임서버에 대한 정보가 있는 데이터베이스 파일이다.
    ㄴ. /var/named/localhost.zone : 리눅스 시스템에 부여되는 호스트이름인 localhost에 대한
                                   zone파일로 일종의 sample파일이라고 보면 된다.
    ㄷ. /var/named/named.local    : localhost의 Reverse zone파일이다. Reverse zone파일 구성을
                                   위한 sample파일이라고 볼 수 있다.
 (4) DNS 설정하기
   1) 설명: DNS설정에서 핵심은 named.conf파일과 존파일이다. 이 두 가지의 파일을 설정하면 된다.
           존파일의 이름은 관리자가 임의로 부여하여 사용할 수 있다. named.conf 파일이
           DNS설정의 뼈대이고, 실제 서버의 내용은 존파일에 기록한다.
   2) 역할
    ㄱ. /etc/named.conf: 서버에서 사용하는 도메인별로 존파일을 지정한다. 리버스존파일의 선언도
                        해준다.
    ㄴ. zone파일: named.conf파일에서 지정한 경로에 파일을 정해진 포맷으로 만든다. 이 존파일의
                 역할은 2차도메인 부여 등 사용하는 도메인에 대해 주 설정을 담당한다.


5. /etc/named.conf파일
 (1) 파일의 구성과 특징
   1) 파일의 구성은 크게 주석문과 구문으로 구성되어 있다.
   2) 기본구문은 DNS서버 구동시 꼭 필요하므로 지우지 않도록 한다.
   3) 주석은 실제 내용의 설정과 관계없이 설명 등을 붙힐 때 사용한다. 주석은 C나 C++에서 사용하
     는 스타일과 같다.
      예) // => 한줄정도의 주석을 달 경우, 또는 '#'도 사용가능하다.
          /*  */  => 여러라인의 주석을 달 경우 사용한다.
   4) 각 설정은 세미콜론(;)으로 한다.
 (2) 기본설정
    // generated by named-bootconf.pl
    options {
            directory "/var/named";
            /*
             * If there is a firewall between you and nameservers you want
             * to talk to, you might need to uncomment the query-source
             * directive below.  Previous versions of BIND always asked
             * questions using port 53, but BIND 8.1 uses an unprivileged
             * port by default.
             */
            // query-source address * port 53;
    };

    //
    // a caching only nameserver config
    //
    controls {
        inet 127.0.0.1 allow { localhost; } keys { rndckey; };
    };
    zone "." IN {
            type hint;
            file "named.ca";
    };

    zone "localhost" IN {
            type master;
            file "localhost.zone";
            allow-update { none; };
    };

    zone "0.0.127.in-addr.arpa" IN {
            type master;
            file "named.local";
            allow-update { none; };
    };
    include "/etc/rndc.key";
 (3) Options
   1) 설명: 네임서버가 동작함에 있어 필요한 여러가지 설정을 하는 영역이다. 네임서버에 쓰이는
           존파일의 위치를 적는 directory 항목은 꼭 적어야 한다.
   2) 항목
    ㄱ. directory "/var/named";
         => 네임서버에서 데이터베이스 역할을 하는 존(zone)파일의 위치를 설정한다. 보통 기본값
           으로 /var/named 디렉토리가 지정된다.
    ㄴ. dump-file "/var/tmp/named_dump.db";
         => named는 정보가 갱신될 때 dump파일로 저장하는데 그 덤프파일이 생성될 위치와 파일명
           을 지정한다.
    ㄷ. statistics-file "/var/tmp/named.stats";
         => 네임서버의 통계를 낼 경우에 사용하는 옵션으로 메모리 통계 파일을 생성할 위치와
           파일명을 지정한다.
    ㄹ. forward (only|first);
         => 보통 forwarders 옵션과 함께 사용되며, only나 first 두 값 중 하나를 갖는다. only는
           자신에게 들어온 도메인 질의를 지정한 다른 서버로 넘기도록 하는 것으로 다른 서버가
           그에 대한 응답이 없을 경우 그 자신도 그 질의에 대해 응답하지 않을 경우에 설정한다.
           first는 타 서버에서 응답이 없을 때 자신이 응답하도록 할 때 설정한다.
    ㅂ. forwarders { 네임서버주소1; 네임서버주소2;....};
         => 도메인에 대한 질의를 다른 서버로 넘길 때 사용하는 옵션으로 복수 형태로
           지정가능하고 구분은 세미콜론(;)으로 한다.
    ㅅ. allow-query { 192.168.0/24; };
         => 네임서버에 질의할 수 있는 호스트를 지정한다. 위와 같이 지정하면 192.168.0.0 네트
           워크주소를 가진 호스트만이 질의할 수 있다.
    ㅇ. allow-transfer { 192.168.0/24; };
         => zone 파일의 내용을 복사할 대상에 제한을 걸 때 지정한다. 이 항목을 명기하지 않았을
          경우 기본적으로는 제한이 없다.
   3) 참고: ACL
    ㄱ. 설명: ACL이란 Access Control List의 약자로 여러 호스트를 하나의 명칭으로 지정하여
             사용하는 방법이다. allow-query나 allow-transfer 사용시 ACL을 이용하여 리스트를
             만든 후 사용가능하다.
    ㄴ. 사용예
        acl  "accesslist" { 192.168.0/24; 192.168.1.20; };
    ㄷ. 주의점: acl의 선언은 options {  }; 이전에 해야 한다.
   4) 사용예
     acl "member" { 210.96.52.100; 203.247.40/24; 211.58.96.100; };
     options {
             directory "/var/named";
             allow-transfer { 203.247.50/24; 203.247.51.30; };
             dump-file "/var/named/named_dump.db";
             statistics-file "/var/named/named.stat";
             forward only;
             forwarders { 203.247.32.31; };
             allow-query { 203.247.50/24; 203.247.51.33; member; };
     };
 (4) zone 구문
   1) 설명: 실제적으로 도메인을 관리하는 데이터베이스파일인 zone파일을 지정한다. 이 zone구문
           은 크게 master, slave, hint(캐쉬서버)의 세가지 타입이 있다. 위의 예에서 보면
           zone "."이라는 항목이 있다. "."는 가장 상위도메인을 나타낸다. (참고로 말하면 원칙적
           으로 도메인을 칠때는 맨뒤에 "."을 붙여야 한다. 예를 들면 다음과 같이 "www.linux.co.
           kr."해야 한다. 그러나, 보통은 생략해서 사용해도 된다.) 도메인을 찾을 때는 가장 상위
           도메인서버에서 차례대로 트리구조형태로 찾는다. 또한 참조하는 파일인 named.ca는 일종
           의 캐시파일로서 인터닉(Internic)에서 배포하는 파일이므로 그 부분은 수정해서는 안된
           다. Reverse zone파일도 설정할 수 있다. Reverse zone 파일이란 IP를 도메인으로 변경하
           기 위해서 필요한 존파일이다. 몰론 설정안해도 무방하다. 또한 zone "0.0.127.in-addr.
           arpa"는 로컬호스트에서의 Reverse 파일에 관한 부분으로 이 부분 역시 설정그대로 둔다.
   2) 기본설정형식
     zone "도메인이름" {
       type (master | slave | hint);
       file "존파일이름";
       allow-update { none; };
     };
   3) 항목설명
    ㄱ. 도메인이름
      a. 설명: 일반적으로 해당 도메인이름을 적는다. 그 외에 "."은 캐시서버를 의미하고,
              리버스존파일의 선언은 "0.0.127.in-addr.arpa" 형태로 한다.
      b. 설정예
        1. zone "linux.co.kr"
        2. zone "50.247.203.in-addr.arpa"
    ㄴ. type
      a. 설명: type은 1차 네임서버와 2차 네임서버의 종류를 구분할 때 사용한다. 값에는master,
             slave, hint가 오는 데 이것은 DNS서버의 종류중에서 primary, slave, cache only
             서버를 뜻한다.
      b. 설정예
        1. type master;
            => Primary Name Server를 뜻한다.
        2. type slave;
           masters { primary_Name_Server_IP주소; };
    ㄷ. file
      a. 설명: 사용하고자할 존파일의 이름을 적는다. 보통 "도메인명.zone"으로 설정하고 리버스
              존파일인 경우에는 "도메인명.rev"로 설정한다.
      b. 설정예
        1. file "mybestone.zone";
        2. file "mybestone.rev";
    ㄹ. allow-update
      a. 설명: bind 9버전부터 등장한 항목으로 이 지시자는 아래의 Key설정영역과 함께 작동한다.
              역할은 Primary Name Server의 zone정보가 Slave Name Server에 업데이트될 때 사용
              한다. 이 지시자는 Primary Name Server와 Slave Name Server간에 인증을 위한 공유가
              설정되어 있어야 하고, 만약 공유키를 지정하지 않고, IP주소로 Slave Name Server를
              지정하고자 한다면 Slave Name Server의 IP주소를 적으면 된다. 물론 Slave Name Ser
              ver를 운영하지 않는다면 필요없는 항목이다.
      b. 설정예
        1. allow-update { key 공유키; };
        2. allow-update { 192.168.0.100; };
   4) 설정예:  도메인이 linux.co.kr이고, IP주소가 192.168.0.2인 경우
    ㄱ. zone파일지정(linux.zone)
       zone "linux.co.kr" {
              type master;
              file "linux.zone";
       };
    ㄴ. 리버스 zone파일지정
       zone "0.168.192.in-addr.arpa" {
             type master;
             file "linux.rev";
       };
 (5) Key 설정 영역
   1) 설명: Bind 9 버전에 새롭게 추가된 보안 설정 영역으로 다른 서버에 존 설정관련 데이터들이
           전달될 때 서버 인증에 필요한 공유키를 설정하는 영역이다. 키 이름은 임의로 설정할 수
           있으나, 공유키 생성시에 지정한 키 이름과 같이 생성해야 한다. 역시 원격서버로 zone파
           일을 백업하지 않는다면 필요하지 않다.
   2) 기본구조
     key 키이름 {
           algorithm       알고리즘방식지정;
           secret          공유키값;
     };
      => bind 9에서는 HMAC-MD5알고리즘을 사용하고 공유키값은 dnssec-keygen이라는 것에 의해
        생성된다.
   3) 키생성
    ㄱ. 설명: Bind 9 에서는 RSA, DSA, HMAC-MD5 알고리즘중에서 HMAC-MD5만 지원한다. -a옵션으로
            알고리즘을 지정하고 -b 옵션으로 암호길이를 지정하면 된다. 최고 512bit로 지정할 수
            있다. -n HOST 뒤에 두 네임서버간의 공유키이름을 지정한다.
    ㄴ. 사용법
       dnssec-keygen -a hmac-md5 -b 128 -n HOST 키이름
    ㄷ. 사용예
       [root@www root]# dnssec-keygen -a hmac-md5 -b 128 -n HOST posein
       Kposein.+157+57372
       [root@www root]# ls K*
       Kposein.+157+57372.key  Kposein.+157+57372.private
        => 두 개의 키가 생성되는 데 두 키 가운데 하나를 선택하여 에디트하면 다음의 내용을 볼
          수 있다.
       [root@www root]# cat Kposein.+157+57372.key
       posein. IN KEY 512 3 157 6BPkem9J9/JOtfnWQ6Eahw==
        => 위의 내용을 편집해서 만들면 된다.
           key "posein" {
                 algorithm           "hmac-md";
                 secret              "6BPkem9J9/JOtfnWQ6Eahw==";
           };
 (6) controls 설정 영역
   1) 설명: 이 영역은 rndc 유틸리티에 의해서 네임서버에 명령을 전달하여 네임서버를 구동시킬 때
           사용되는 제어 채널을 설정하는 부분이다.
   2) 기본구조
     controls {
        inet 127.0.0.1 allow { localhost; } keys { rndckey; };
     };
   3) 사용법
     inet 아이피주소 포트 allow { 허가주소; } keys { 키이름; };
   4) 사용예
    ㄱ. inet 127.0.0.1 allow { localhost; } keys { rndckey; };
      => 아이피주소 다음에 포트를 지정하지 않을 경우 기본값인 953으로 지정된다. allow 다음에
        설정한 localhost에서만 가능하고 키이름은 rndckey를 가진 경우에만 가능하다.
    ㄴ. inet * allow { any; } keys { key_list; };
      => *는 포트를 사용하지 않음을 나타내고, key_list라는 키를 가진 모든 호스트에서 가능하다.
 (7) include "/etc/rndc.key" 설정 영역
    rndc라는 유틸리티의 접속을 위한 키설정부분이다. 이 내용은 /etc/rndc.key의 내용을 그대로
   가져와 control 영역의 키로 사용한다는 뜻이다.


6. 존(zone)파일
 (1) 개요: 존파일은 /etc/named.conf의 정의하에 /var/named에 위치한다. /etc/named.conf에 정의된
          zone파일인 'named.ca', 'localhost.zone', 'named.local'는 BIND설치시 기본적으로
          제공해 주는 파일로, DNS 서버의 주 역할인 Resolving을 할 수 있도록 해주고(named.ca),
          개별 도메인 설정을 위한 샘플 파일같은 역할을 해준다.(localhost.zone, named.local)
          도메인을 설정하기 위해서는 zone 파일을 사용자가 지정해줘야 하는데, 임의로 생성하면
          된다. 예를 들면 linux.zone과 linux.rev 형태로 지정할 수 있는데, linux.zone파일은
          기본적인 도메인을 위해 필요한 것이고, linux.rev파일은 IP를 도메인으로 바꿔주는 역할
          (보통 Reverse라고 표현)을 하는 존파일이다. 물론 이 리버스 파일은 설정 안해도
          상관없다.
 (2) 존파일의 역할: 사용하는 메인 도메인뿐만아니라, 2차 도메인을 관리하는 역할을 한다. 예를
                   들면 linux.co.kr이라는 도메인을 사용할 경우 2차도메인으로 game.linux.co.kr,
                   edu.linux.co.kr등을 사용할 수 있는데, 이러한 2차도메인의 지정을 담당하는
                   파일이다.
 (3) 존파일의 구성
   1) 구성: 존파일은 도메인에 대한 실제적인 DNS정보를 담는 파일이다. 이 파일은 크게 SOA record
           와 실제내용으로 나뉜다.
   2) 기본구조
     $TTL    86400
     @ IN SOA nameserver contact-email-address (
     serial_number  ; Serial
     refresh_number ; Refresh
     retry_number   ; Retry
     expire_number  ; Expire
     minium_number  ; Minimum
     )
     [도메인] [ttl] [class] [type] [rdata]
   3) 항목설명
    ㄱ. $TTL: Time To Live의 약자로 bind 9 버전에서부터는 첫줄에 무조건 적도록 되어있다. TTL
             은 다른 서버에서 자신의 정보를 가져갔을 경우 그 쪽 서버의 캐시에 해당 정보가 얼
             마나 머물지를 결정한다. 값은 0~2147483647까지 가능하며, 단위는 초단위로 보통
             86400(1일)을 설정한다.
    ㄴ. SOA record : SOA(Start of Authority) 레코드는 zone의 시작을 가리키는 데 사용한다. 설정
                    시에 주석이 필요하면 세미콜론(;)을 입력하고 뒤에 문자열을 적는다.
      a. 맨 앞의 '@'는 현재 도메인을 나타낸다. 처음은 이것으로 시작한다.
      b. nameserver는 네임서버의 호스트명과 도메인명을 기록한다.그리고 마지막은 꼭 루트도메인
        을 뜻하는 '.'을 찍는다. 그러나 호스트명만을 입력할 때는 '.'을 생략할 수 있다.
         예) 도메인이 'linux.co.kr'인 경우 다음의 두 경우는 같다.
            ns                     IN           A          203.xxx.xxx.xxx
            ns.linux.co.kr.        IN           A          203.xxx.xxx.xxx
      c. contact-email-address는 관리자의 e-mail주소를 적는다. 일반적인 표기법은 'root@domain.
        com'이라고 표기하지만, 여기서는 'root.domain.com.'이라고 표기한다. 이 부분도 뒤에 꼭 
        '.'를 붙인다.
      d. serial_number : 일련번호로서 만약 도메인 데이터베이스가 갱신되어지면 숫자가 더 크도록
                        수정한다. 일반적으로 'YYYYMMDDNN'의 형식을 사용한다.'YYYYMMDD'는 해당
                        년월일을 적고, 'NN'은 수정한 횟수를 적어주면 된다.
      e. refresh_number : 2차 네임서버가 자신의 정보를 업데이트하기 위해서 1차네임서버에 얼마
                         나 자주 체크할 것인가를 설정하는 항목이다.
      f. retry_number : 만약 2차 네임서버가 1차 네임서버에 접속을 실패했을 경우 재시도할 시간
                       을 설정한다.
      g. expire_number : 2차 네임서버가 자신의 zone데이터를 사용할 수 있는 유효기간을 정한다.
      h. minimum_number : 데이터의 저장한도를 나타낸다. 시간들의 단위는 초단위이다.
        (참고) 2차 네임서버를 운영하지 않는다면 serial_number등의 항목은 무의미하다. 또한
              최근에 값설정시에 초단위값 대신에 W(weeks), D(Days), H(Hours), M(Minutes) 붙여
              사용해도 된다.
    ㄷ. [도메인] [ttl] [class] [type] [rdata]
      - 도메인: 도메인이름, 호스트명, 공백, @, * 등이 올 수 있다. @는 현재 도메인을 가리키고,
               *는 모든 도메인을 뜻한다. 호스트명만 기입하면 "호스트명.도메인이름"로 인식한다.
               공백은 바로 위 자원을 이어서 사용하고, 전체 도메인으로 지정시에는 반드시 도메인
               이름 맨 뒤에 꼭 맨 뒤에 '.'을 붙여야 한다.
      - ttl : 해당 레코드에 대한 TTL을 설정한다. 생략해도 무방하다.
      - class: 레코드에 대한 클래스를 지정하는 부분으로 일반적으로 Internet 클래스인 IN을 사용
             한다.
      - type: 레코드 타입을 지정한다.(A, MX 등)
      - rdata: 실제정보를 입력한다.
    ㄹ. type
      a. NS : Name Server를 지정한다.
        1. 사용법
          IN NS name_server_hostname
        2. 사용예
          IN NS ns.linux.co.kr.
      b. A : Address, 즉 특정호스트명에 대한 IP주소를 입력한다. 실제의 도메인 데이터베이스를
            구축하는 항목이다.
        1. 사용법
          hostname IN A IP_address
        2. 사용예
          www.linux.co.kr.      IN       A        211.36.134.226
      c. PTR : Domain Name Pointer, 이것은 위와 반대로 IP주소를 도메인으로 변환할 때 사용되는
              타입으로 reverse zone에서만 사용한다.
        1. 사용법
          IP_address           IN       PTR      hostname
        2. 사용예
          252     IN      PTR     mybestone.com.
        3. 참고: 이것은 꼭 안써주어도 상관은 없지만, 어떤 인터넷 서비스는 특정 호스트를 인증할
                때 IP역추적을 통해서 도메인이 등록이 되어 있는지를 인증하는 경우가 있다. 이때
                에는 이 항목을 사용하여야 한다.
      d. CNAME : Canonical Name 레코드이다. 일종의 Alias(별칭)을 의미한다.
        1. 사용법
          Alias  IN CNAME Canonical-hostname
        2. 사용예
          www                     IN A            192.168.3.224

          www1                    IN CNAME www
          www2                    IN CNAME www
      e. MX : Mail Exchanger의 약어로 일종의 Fowarding개념으로, 특정 도메인(호스트)에 대해서
             메일을 다른 메일서버로 보내게 된다.
       1. 사용법
         (도메인명 또는 호스트)      IN       MX       preference value     (메일서버)
          => 여기서 preference value는 '0'또는 양의 정수값이다. 여러개의 값이 존재할 경우에는
            낮을수록 우선권이 높다.
       2. 사용예 : linux.co.kr이라는 도메인으로 메일을 받을 경우
            IN    MX    10    linux.co.kr.
       3. 응용예 : 두개의 메일서버를 구축했을 경우
         IN     MX    10       mail
         IN     MX    20       mail2
         => 위의 예제는 이메일이 도착할 경우에는 먼저 mail서버로 먼저 보내고, 응답이 없을경우
           에는 mail2서버로 이메일을 보낸다. mail서버를 하나만 구축했을 경우에는 큰 의미가
           없다.
      f. HINFO: Host INFOrmation의 약자로 호스트정보를 제공할 때 쓴다.
       1. 사용법
         www    IN    HINFO     CPU정보    운영체제정보
       2. 사용예
         www    IN    HINFO     "i686"    "RedHat 9"
   4) 설정예: 여기서는 /etc/named.conf파일에서 존파일을 linux.zone으로 지정하고 Reverse 존파일
             을 linux.rev로 지정했다고 가정하자.
      예) 도메인이 linux.co.kr이고 IP가 192.168.0.2인 경우 다음과 같이 설정한다.
         1.linux.zone
          $TTL    86400
          @       IN      SOA     ns.linux.co.kr. root.linux.co.kr.  (
                                      2001022200 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
               IN      NS      ns.linux.co.kr.
        linux.co.kr.           IN    A    192.168.0.2
                               IN    MX    10    linux.co.kr.
        www.linux.co.kr.       IN    A    192.168.0.2
       (주의) 이 파일을 설정시에는 도메인 네임뒤에 루트를 뜻하는 '.'을 꼭 찍어야 한다. 또한
            이 파일에서 도메인 네임을 설정한 것만 접속이 된다.
       (참고) 여기에서 @는 origin을 뜻하는 특수 문자이다. 즉 메인도메인인 'linux.co.kr'를 의
             미한다. 또한 linux.co.kr이라는 도메인으로 메일을 받는다.
         2. linux.rev
           @       IN      SOA     ns.linux.co.kr. root.linux.co.kr.  (
                                      2001022301 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
                      IN      NS      ns.linux.co.kr.
          2               IN      PTR     ns.linux.co.kr.
          => 윗부분의 설정은 linux.zone의 설정과 같고, 아랫부분의 설정만 해주면 된다. 값은
            전체IP중에서 맨 숫자만 적어주면 된다. 왜냐하면 /etc/named.conf에서 linux.rev설정에
            서 일부를 지정했기 때문이다.

7. DNS관련 유틸리티
 (1) rndc
   1) 설명: rndc는 네임서버 데몬을 관리하는 프로그램이다.
   2) 관련파일
    ㄱ. /etc/rndc.conf: rndc의 주 환경설정 파일이다.
    ㄴ. rndc-confgen: rndc의 주환경설정파일인 /etc/rndc.conf를 생성하는 명령이다.
   3) /etc/rndc.conf 기본설정예
     options {
        default-server  localhost;
        default-key     "rndckey";
     };

     server localhost {
             key     "rndckey";
     };

     include "/etc/rndc.key";
   4) /etc/rndc.conf의 항목
    ㄱ. options {};
       => default-server, default-key, default-port를 지정한다. 각각 서버, 키이름, 포트를 지정
         한다.
    ㄴ. server 서버주소 {};
       => 서버의 주소를 지정한 후 { }; 안에 사용할 식별키이름을 지정한다.
    ㄷ. key "키이름" {};
       => named.conf 파일과 같이 설정하거나 위의 항목처럼 include해도 된다.
         예) key "rndckey" {
                     algorithm       hmac-md5;
                     secret "2gNzw5u5z4ypwigLARTOgcA9cBQ94l4whKyjOBa5Rm4iu8P7XVt5LT8wht6x";
             };
   5) rndc-confgen
    ㄱ. 설명: /etc/rndc.conf 파일을 생성해주는 명령이다.
    ㄴ. 사용법
       rndc-confgen [option]
    ㄷ. option
       -a : /etc/rndc.key 키파일을 생성한다.
    ㄹ. 생성예
       [root@www root]# rndc-confgen -a
        => /etc/rndc.key 파일을 생성한다.
       [root@www root]# chmod 640 /etc/rndc.key
        => 퍼미션 변경
       [root@www root]# chown named.named /etc/rndc.key
        => 소유권 변경
       [root@www root]# rndc-confgen > /etc/rndc.conf
        => 리다이렉션기호를 사용하여 /etc/rndc.conf 파일로 저장할 수 있다.
   6) rndc 사용하기
    ㄱ. 조건: 네임서버 데몬이 작동하고 있어야 하며, /etc/named.conf 파일에 controls구문이 설정
             되어 있어야 한다.
    ㄴ. 사용예
       [root@www root]# rndc reload
        => named 데몬의 설정을 다시 로딩한다.
 (2) redhat-config-bind: 레드햇 8.0부터 제공하는 GUI기반 BIND 설정도구이다.

 (3) named-checkconf
   1) 설명: 네임서버의 주 환경 설정 파일인 /etc/named.conf의 문법적 오류를 찾아주는 명령이다.
   2) 사용법
     named-checkconf [filename]
      => 기본적으로 /etc/named.conf 파일의 오류를 검사하고, 다른 경로의 named.conf파일을
        검사하려면 파일의 경로를 적어주면 된다.
   3) 사용예
    ㄱ. [root@linux224 named]# named-checkconf
          => /etc/named.conf 파일의 문법적 오류를 찾는다.
    ㄴ. [root@linux224 root]# named-checkconf ~/named.conf
        /root/named.conf:12: unknown option 'acl
          => ~/named.conf의 문법적 오류를 찾는다.

 (4) named-checkzone
   1) 설명: zone파일의 문법적 오류를 찾아주는 명령이다.
   2) 사용법
     named-checkzone 도메인명 zone파일경로
   3) 사용예
     [root@linux224 root]# named-checkzone linux.com /var/named/linux.zone
     /var/named/linux.zone:1: no TTL specified; using SOA MINTTL instead
     zone linux.com/IN: loaded serial 2005070802
     OK

8. DNS서버 구성예
 (1) 단일서버
   1) 설명: 부여받은 IP주소가 192.168.1.125이고 신청한 도메인이 linux.co.kr이고, 하나의 시스템
           에 DNS, WEB, Mail서버 운영하는 경우
   2) 설정하기
    ㄱ. /etc/named.conf 파일의 설정: 이 파일에는 기본적으로 zone파일의 위치하는 디렉토리와
                                    2개의 존파일이 선언되어 있는 데, 기본설정은 건드리지 말고
                                    내용만 추가해야 한다.
      (예)
       [root@www root]# vi /etc/named.conf
       // generated by named-bootconf.pl

       options {
               directory "/var/named";
               /*
                * If there is a firewall between you and nameservers you want
                * to talk to, you might need to uncomment the query-source
                * directive below.  Previous versions of BIND always asked
                * questions using port 53, but BIND 8.1 uses an unprivileged
                * port by default.
                */
               // query-source address * port 53;
       };

       //
       // a caching only nameserver config
       //
       controls {
               inet 127.0.0.1 allow { localhost; } keys { rndckey; };
       };
       zone "." IN {
               type hint;
               file "named.ca";
       };

       zone "localhost" IN {
               type master;
               file "localhost.zone";
               allow-update { none; };
       };

       zone "0.0.127.in-addr.arpa" IN {
               type master;
               file "named.local";
               allow-update { none; };
       };
       zone "linux.co.kr" {         // 사용하고자 하는 도메인을 선언
               type master;         // 기본 primary로 사용시에는 master로 선언한다.
               file "linux.zone";   // 사용하고자하는 zone파일의 이름을 선언한다. 물론 이름은
       };                            임의로 선언. 여기서는 linux.zone이라고 함.

       zone "1.168.192.in-addr.arpa" {   // 부여받은 IP중 마지막 자리를 뺀 나머지를 역으로
               type master;                선언한다. nslookup등을 이용하여 IP주소로 도메인이름
               file "linux.rev";           을 조회할 때 사용. 타입은 master이고, zone파일의
       };                                  이름은 임의로 지정할 수 있으며, 여기서는 linux.rev
                                           라 함.

       include "/etc/rndc.key";
    ㄴ. zone파일의 생성: /etc/named.conf파일에서 zone파일들이 위치하는 디렉토리가 /var/named
                        라고 정의되어 있으므로 이 디렉토리에 생성한다. 아울러, 이 디렉토리에
                        localhost의 zone파일인 localhost.zone파일이 존재하므로 이 파일을
                        위에서 설정한 zone파일인 linux.zone으로 변경한뒤에 편집하고 리버스
                        존파일인 linux.rev는 linux.zone파일을 복사하여 설정하면 된다.
       (예)
      1. linux.zone파일의 설정
       [root@www named]# vi linux.zone
       $TTL    86400
       @       IN      SOA     ns.linux.co.kr. root.linux.co.kr.  ( // 네임서버와 관리자 메일
                                        2001071500 ; Serial           설정시 도메인명 뒤에
                                        28800      ; Refresh          반드시 '.'를 표기
                                        14400      ; Retry
                                        3600000    ; Expire         // 예전에는 초단위의 값을
                                        86400 )    ; Minimum          사용했으나 현재는 H(시),
                              IN   NS       ns.linux.co.kr.           D(일)등의 단위도 사용
       linux.co.kr.           IN   A        192.168.1.125
                              IN   MX 10    linux.co.kr.        // 메일서버의 우선순위를 지정
       www.linux.co.kr.       IN   A        192.168.1.125

         (참고) 2차 도메인 전부를 설정하는 경우
               *.linux.co.kr.         IN   A       192.168.1.125
           => (생략법)
               *                      IN   A       192.168.1.125

      2. linux.rev 파일의 설정
       [root@www named]# vi linux.rev
       $TTL    86400
       @       IN      SOA     ns.linux.co.kr. root.linux.co.kr.  (
                                        2001020201 ; Serial
                                        28800      ; Refresh
                                        14400      ; Retry
                                        3600000    ; Expire
                                        86400 )    ; Minimum
                       IN NS      ns.linux.co.kr.
       125             IN PTR     ns.linux.co.kr.    // 125는 부여받은 IP의 맨 마지막을 표기한
       125             IN PTR     linux.co.kr.         것이며. PTR은 리버스존에서 정의해주는
       125             IN PTR     www.linux.co.kr.     것으로 IP주소로 도메인을 변환할 때 사용
                                                       한다.
   3) 테스트하기
    ㄱ. named 데몬을 작동시킨다.
       [root@www named]# /etc/rc.d/init.d/named start
         => named 시작시 [OK]메시지가 나타나도 /etc/named.conf파일의 설정이 잘못되면 데몬이
           작동되지 않으므로 데몬작동유무를 확인해야 한다.
    ㄴ. /etc/reslov.conf파일에 본인의 IP주소를 네임서버로 등록한다.
       예) [root@www named]# vi /etc/resolv.conf
           nameserver 192.168.1.125
    ㄷ. nslookup 명령등으로 테스트한다.
       예) [root@www named]# nslookup linux.co.kr
           Note:  nslookup is deprecated and may be removed from future releases.
           Consider using the `dig' or `host' programs instead.  Run nslookup with
           the `-sil[ent]' option to prevent this message from appearing.
           Server:         192.168.1.125
           Address:        192.168.1.125#53

           Name:   linux.co.kr
           Address: 192.168.1.125
 (2) 단일서버2
   1) 설명: 위의 단일서버에 linux.com이라는 도메인 추가하기
   2) 설정하기
    ㄱ. /etc/named.conf 파일의 설정: 도메인이 추가된 경우에는 반드시 이 파일에 등록하고
                                    linux.com의 존파일을 선언해야 한다. 단순히 도메인만 추가
                                    하여 사용하는 경우에는 linux.com의 2차도메인인
                                    www.linux.com 등을 사용하기 위하여 새로운 존파일을
                                    생성해야 한다.
       (예)
      1. linux.zone파일의 설정
       [root@www named]# vi linux.com.zone
       $TTL    86400
       @       IN      SOA     ns.linux.com. root.linux.com.  ( // 네임서버와 관리자 메일
                                        2001071500 ; Serial       설정시 도메인명 뒤에
                                        28800      ; Refresh      반드시 '.'를 표기
                                        14400      ; Retry
                                        3600000    ; Expire         // 예전에는 초단위의 값을
                                        86400 )    ; Minimum          사용했으나 현재는 H(시),
                              IN   NS       ns.linux.com.             D(일)등의 단위도 사용
       linux.com.             IN   A        192.168.1.125
                              IN   MX 10    linux.com.        // 메일서버의 우선순위를 지정
       www.linux.com.         IN   A        192.168.1.125
      2. linux.rev 파일의 설정
       [root@www named]# vi linux.rev
       $TTL    86400
       @       IN      SOA     ns.linux.co.kr. root.linux.co.kr.  (
                                        2001020201 ; Serial
                                        28800      ; Refresh
                                        14400      ; Retry
                                        3600000    ; Expire
                                        86400 )    ; Minimum
                       IN NS      ns.linux.co.kr.
       125             IN PTR     ns.linux.co.kr.
       125             IN PTR     linux.co.kr.
       125             IN PTR     www.linux.co.kr.
       125             IN PTR     linux.com.            // 추가
       125             IN PTR     www.linux.com.        // 추가
    ㄷ. apache의 설정: 웹서비스를 하는 경우 아파치의 환경파일인 httpd.conf에서도 설정해줘야
                      한다.
        예) [root@www apache]# vi httpd.conf
            ---- 생략 -----
            NameVirtualHost 192.168.1.125              // 이 부분에 사용하는 IP를 적는다.
            ---- 생략 -----
            <VirtualHost 192.168.1.125>
                ServerAdmin admin@linux.com
                DocumentRoot /usr/local/apache/htdocs
                ServerName www.linux.com
                ServerAlias linux.com www.linux.com
                ErrorLog logs/linux.com-error-log
                CustomLog logs/linux.com-access_log common
            </VirtualHost>
              => 위의 ServerAlias 설정은 브라우저상에서 linux.com과 www.linux.com를 입력했을
                경우에 웹페이지가 열리도록 설정. 만약 2차도메인이 전부 이 동일한 웹페이지가
                열리도록 하려면 *.linux.com이라고 설정한다.
   3) 테스트하기
     [root@www named]# nslookup
     Note:  nslookup is deprecated and may be removed from future releases.
     Consider using the `dig' or `host' programs instead.  Run nslookup with
     the `-sil[ent]' option to prevent this message from appearing.
     > www.linux.co.kr                           // www.linux.co.kr 조회
     Server:         192.168.1.125
     Address:        192.168.1.125#53

     Name:   www.linux.co.kr
     Address: 192.168.1.125
     > www.linux.com                            // www.linux.com 조회
     Server:         192.168.1.125
     Address:        192.168.1.125#53

     Name:   www.linux.com
     Address: 192.168.1.125
     > 192.168.1.125                           // IP로 조회
     Server:         192.168.1.125
     Address:        192.168.1.125#53

     125.1.168.192.in-addr.arpa     name = linux.co.kr.
     125.1.168.192.in-addr.arpa     name = linux.com.
     125.1.168.192.in-addr.arpa     name = ns.linux.co.kr.
     125.1.168.192.in-addr.arpa     name = www.linux.co.kr.
     125.1.168.192.in-addr.arpa     name = www.linux.com.

 (3) 다중 웹서버
   1) 설명: 웹서버 2대를 따로 운영할 경우 직접 www이라는 동일한 이름으로 지정가능하다.
   2) 사용예
     [root@linux224 named]# vi linux.zone
     @                        IN SOA ns.linux.com. posein.linux.com. (
                                             2005070501      ; serial (d. adams)
                                             3H              ; refresh
                                             15M             ; retry
                                             1W              ; expiry
                                             1D )            ; minimum

                              IN NS          ns.linux.com.
                              IN A           203.247.50.224
                              IN MX 10       203.247.50.224
     www                   0  IN A           203.247.50.227
     www                   0  IN A           203.247.50.228
       => TTL을 0으로 설정하면 caching을 하지 말도록 하는 설정이다.

 (4) 2차도메인서버운영
   1) 개요: mybestone.com이라는 도메인으로 서버가 한 대 운영중이고 linux.mybestone.com이라는
           서브도메인(2차도메인)을 부여하여 이 서버가 독자적인 IP를 가지고 있고, 웹서버 및
           메일서버도 독자적으로 운영하려고 한다. 또한 이 서버의 서브도메인(3차도메인)도
           가능하게 설정하도록 한다.
   2) 조건
    ㄱ. mybestone.com (주 도메인)
         IP 주소         : 192.168.0.3
         zone 파일       : mybestone.zone
         Reverse zone파일: mybestone.rev
    ㄴ. linux.mybestone.com (서브 도메인)
         IP 주소         : 192.168.0.4
   3) 설정
    ㄱ. 주 네임서버(ns.mybestone.com)의 설정
      a. /var/named 디렉토리에 존재하는 mybestone.zone파일의 설정 추가
             linux            IN      NS      ns.linux
             ns.linux         IN      A       192.168.0.4
          => 첫번째줄의 설정을 풀어쓰면 다음과 같다.
              linux.mybestone.com.         IN       NS      ns.linux.mybestone.com.
            즉 linux.mybestone.com이라는 도메인의 네임서버를 ns.linux.mybestone.com이라는
            것으로 정한다는 뜻이다.
            두번째줄의 설정을 풀어쓰면 다음과 같다.
             ns.linux.mybestone.com.      IN       A      192.168.0.4
           즉, ns.linux.mybestone.com의 IP주소는 192.168.0.4라는 뜻이 된다.
       (참고) 단순히 2차 도메인 사용만 지정하려면
                linux             IN      A      192.168.0.4
              라고 한줄만 지정해도 된다.
       b. /var/named 디렉토리에 존재하는 mybestone.rev파일의 설정 추가
            linux            IN      NS      ns.linux.mybestone.com.
            4                IN      NS      ns.linux.mybestone.com.
    ㄴ. 서브 네임서버(ns.linux.mybestone.com)의 설정
      a. /etc/named.conf파일의 설정
          zone "linux.mybestone.com" {        // 위임받은 2차도메인 설정
                  type master;
                  file "linux.mybestone.zone";
          };

           zone "linux.0.168.192.in-addr.arpa" { // 위임받은 2차도메인의 역존 설정법
                   type master;
                   file "linux.mybestone.rev";
                 };
      b. linux.mybestone.zone파일의 설정
          @       IN      SOA     ns.linux.mybestone.com. root.linux.mybestone.com.  (
                                           2001071500 ; Serial
                                           28800      ; Refresh
                                           14400      ; Retry
                                           3600000    ; Expire
                                           86400 )    ; Minimum
                                         IN NS      ns.linux.mybestone.com.
          linux.mybestone.com.           IN A       192.168.0.4
                                         IN MX 10   linux.mybestone.com.
          www.linux.mybestone.com.       IN A       192.168.0.4
      c. linux.mybestone.rev 파일의 설정
          @       IN      SOA     ns.linux.mybestone.com. root.linux.mybestone.com.  (
                                           2001020201 ; Serial
                                           28800      ; Refresh
                                           14400      ; Retry
                                           3600000    ; Expire
                                           86400 )    ; Minimum
                       IN      NS      ns.linux.mybestone.com.
         4             IN      PTR     linux.mybestone.com.
         4             IN      PTR     ns.linux.mybestone.com.
         4             IN      PTR     www.linux.mybestone.com.
   ㄷ. httpd.conf파일에 설정한다.
        <VirtualHost 192.168.0.4>
            ServerAdmin root@linux.mybestone.com
            ServerName www.linux.mybesone.com
            DocumentRoot /usr/local/apache/html
            ErrorLog logs/linux.mybestone.com-error_log
            CustomLog logs/linux.mybestone.com-access_log common
        </VirtualHost>
 (5) Slave DNS 구성하기
   1) 설명: Slave DNS는 Master DNS의 zone파일을 백업하는 역할을 하는 서버이다. Master DNS의
           IP주소를 192.168.1.125, 도메인 네임을 linux.co.kr이라고 가정하고, Slave DNS는
           192.168.1.126이라고 가정한다.
   2) 설정하기
    ㄱ. Master DNS(192.168.1.125)의 /etc/named.conf 파일에 허가할 Slave DNS의 설정
       [root@master root]# vi /etc/named.conf
       options {
               directory "/var/named";
               allow-transfer { 192.168.0/24; 192.168.1.126; };  // 허가할 Slave DNS IP주소
       };
       ----- 이하 생략 ------
    ㄴ. Slave DNS(192.168.126) 설정
      a. /etc/named.conf 파일의 설정: 다음의 항을 추가한다.
        [root@slave root]# vi /etc/named.conf
        ---- 생략 ----
        zone "linux.co.kr" IN {
                type slave;
                file "linux.zone";
                masters { 192.168.1.125; };
        };

        zone "1.168.192.in-addr.arpa" IN {
                type slave;
                masters { 192.168.1.125; };
                file "linux.rev";
        };
       b. zone파일을 복사할 /var/named의 허가권 조정: 복사를 해오는 named가 기본적으로
                                                     /var/named에 쓰기권한이 없다. 따라서,
                                                     허가권을 조정해야 한다.
         [root@www root]# ls -ld /var/named
         drwxr-x---    2 named    named        4096  8월 16 21:48 /var/named/
         [root@www root]# chmod g+w /var/named
         drwxrwx---    2 named    named        4096  8월 16 21:48 /var/named/
     ㄷ. slave DNS에서 named 데몬을 재가동하면 Master DNS의 존파일인 linux.zone, linux.rev
        파일을 복사해온다.


'OS 운영체제 및 보안 > Linux' 카테고리의 다른 글

chattr 와 lsattr 파일 권한  (0) 2008.11.06
BIND 최신버전으로 업그레이드  (0) 2008.11.06
find 유용한 사용법  (0) 2008.11.06
iptables  (0) 2008.11.06
named.conf - option최적화  (0) 2008.11.06
Vi 편집기 사용법  (0) 2008.10.24
Vi 편집기 사용법  (0) 2008.10.24
crontab 간단 정리  (0) 2008.10.24
Named 최신버전으로 업그레이드  (0) 2008.10.24
DNS 기본 보안 설정  (0) 2008.10.24