DATA 전문가로 가는 길

[Unix/Linux] DNS(Domain Name Server) + BIND 9.7 구축 및 운영 본문

OS/Server Admin

[Unix/Linux] DNS(Domain Name Server) + BIND 9.7 구축 및 운영

EstenPark 2010. 11. 22. 18:44

 

작성자 : 박상수
작성일자 : 2010.11.22
작업환경 : VMware7 [ Redhat Enterprise 4 ]
참고자료 : 

http://blog.cyworld.com/ruo91/5309018 [ DNS 확인 사이트 ]
http://seonz.tistory.com/22 [ Default DNS 설치 사이트 ]
http://www.google.co.kr/#sclient=psy&hl=ko&newwindow=1&q=linux+dns++%EC%84%9C%EB%B2%84+%EA%B5%AC%EC%B6%95&aq=f&aqi=g4g-o1&aql=&oq=&gs_rfai=&pbx=1&fp=3eb0db1a78eaa5af [ 설치 참조 사이트]



1. DNS서버의 종류와 역활

1-1 설명
- DNS 서버는 크게 Primary 서버, Secondary서버, Caching Only서버로 나뉩니다.
1-2 종류와 역할
- Primary Name Server : 도메인 네임서버에 꼭 구축 하는 서버입니다.
- Secondary Name Server : 주로 주 도메인 서버 백업을 담당합니다.(반드시 구축할 필요 없음)
- Cashing Only Server : 서버에 기록된 정보가 요청이 올 경우 응답해주는 서버입니다.


2. 네임서버 구축 개요

2-1 개요
- Redhat 리눅스는 BIND(Berkeley Internet Name Domain) 이라는 DNS 서버용 소프트웨어(데몬) 제공
2-2 Bind관련 파일 및 디렉토리
- named.conf(파일) : named 데몬이 작동할 때 처음으로 참조하는 파일로 환경설정과 밀접한 관련이 있습니다.
- named(데몬) : 네임서버를 작동 시키고 중단 시킬 때 사용하는 데몬 입니다.
    - /var/named(디렉토리) : 루트 도메인 서버에 대한 정보가 담긴 named.ca(named.root), named.local 파일과 메인 도메인 설정을 위한 zone파일이 위치하는 디렉토리입니다.


3. BIND9.7 다운로드

[2010-11-22 15:21:53]-[root@server102:/usr/local/src]
# wget
http://ftp.isc.org/isc/bind9/9.7.2-P2/bind-9.7.2-P2.tar.gz
--15:21:57--  http://ftp.isc.org/isc/bind9/9.7.2-P2/bind-9.7.2-P2.tar.gz
           => `bind-9.7.2-P2.tar.gz'
Resolving
ftp.isc.org... 204.152.184.110, 2001:4f8:0:2::18
Connecting to
ftp.isc.org|204.152.184.110|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7,573,857 (7.2M) [application/x-gzip]

82% [=============================>       ] 6,240,549    174.23K/s    ETA 00:11


[2010-11-22 15:23:15]-[root@server102:/usr/local/src]
# tar zxf bind-9.7.2-P2.tar.gz

[2010-11-22 15:23:46]-[root@server102:/usr/local/src/bind-9.7.2-P2]
# cd bind-9.7.2-P-2

[2010-11-22 15:23:46]-[root@server102:/usr/local/src/bind-9.7.2-P2]
# ./configure --prefix=/usr/local/dns
...
...
생략
...
...
WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
WARNING                                                                 WARNING
WARNING         Your OpenSSL crypto library may be vulnerable to        WARNING
WARNING         one or more of the the following known security         WARNING
WARNING         flaws:                                                  WARNING
WARNING                                                                 WARNING
WARNING         CAN-2002-0659, CAN-2006-4339, CVE-2006-2937 and         WARNING
WARNING         CVE-2006-2940.                                          WARNING
WARNING                                                                 WARNING
WARNING         It is recommended that you upgrade to OpenSSL           WARNING
WARNING         version 0.9.8d/0.9.7l (or greater).                     WARNING
WARNING                                                                 WARNING
WARNING         You can disable this warning by specifying:             WARNING
WARNING                                                                 WARNING
WARNING               --disable-openssl-version-check                   WARNING
WARNING                                                                 WARNING
WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING

[2010-11-22 15:25:02]-[root@server102:/usr/local/src/bind-9.7.2-P2]
# make; make install



4. 초기 상태 확인 

[설명] 168.126.63.1에는 estenpark.pe.kr이 없습니다. 그래서 아래와 같은 에러가 발생 됩니다.
[2010-11-23 20:25:53]-[root@server102:~]
# cat /etc/resolv.conf
nameserver 168.126.63.1

[2010-11-23 23:43:12]-[root@server102:/usr/local/dns/etc]
# nslookup

> estenpark.pe.kr
;; connection timed out; no servers could be reached


5. named.conf 파일의 환경설정

[2010-11-23 20:40:18]-[root@server102:/usr/local/dns/etc]
# cat  named.conf

[설명] BIND9버전은 위와 같이 설치 한다면 /usr/local/dns/etc 안에 blnd,keys 파일을 밖에 없을 겁니다. 그래서 vi 편집기로 named.conf  파일을 생성 후 아래와 같은 내용을 적어 주시기 바랍니다.
[2010-11-23 20:43:24]-[root@server102:/usr/local/dns/etc]
# cat named.conf

/*
[설명]
directory : 네임서버에서 데이터베이스 역활을 하는 존(zone)파일의 위치를 설정
dump-file :   named는 정보가 갱신될 때 dump파일로 저장하는데 그 덤프파일이 생성될 위치아 파일명을 지정
statistics-file : 네임서버의 통계를 낼 경우에 사용하는 옵션으로 메모리 통계 파일을 생성할 위치와 파일명 지정
allow-transfer : zone 파일의 내용을 복사할 대상에 제한을 걸 때 지정
*/
options {
        directory "/var/named";
        dump-file "/var/tmp/named_dmp.db";
        statistics-file "/var/tmp/named.stats";
        pid-file "/var/run/named.pid";
        allow-transfer { 172.16.71.XXX; };
};
logging {
        category lame-servers { null; };
        category notify { null; };
};

/*
[설명]
도메인을 찾을때는 가장 상위 도메인서버에서 차례대로 트리구조형태로 찾습니다. 또한 참조하는 파일인 named.ca(named.root)는 일종의 캐시파일로서 인터닉(Internic)에서 제공하는 배포파일이므로 절대 변경해서는 안됩니다.
*/
zone "." IN {
        type hint;
        file "named.root";
};

/*
[설명]
로컬호스트에서는 Reverse파일에 관한 부분으로 이 부분 역시 설정 해야 합니다. type는 master인 것은 위에서 설명한 주 메인 도메인 서버를 의미 합니다.
/*
zone "0.0.127.in-addr.arpa" IN {
        type master;
        file "zone-0.0.127.in-addr.arpa";
        notify no;
};

/*
[설명]
로컬호스트 파일에 관한 부분으로 이 부분 역시 설정 해야 합니다. type는 master인 것은 위에서 설명한 주 메인 도메인 서버를 의미 합니다.
*/

zone "localhost" IN {
        type master;
        file "zone-localhost";
        notify no;
};



/*
[설명]
도메인 : calmmmass.pe.kr
IP :  172.16.71.xxx
위와 같은 정보라고 가정한다면 부여받은 IP중 마지막 자리를 뺀 나머지를 역으로 선언합니다. 물론 이선언은 안해도 무방하나, nslookup명령어나 기타 여러가지를 사용하려면 꼭 선언해야 합니다.  type는 master인 것은 위에서 설명한 주 메인 도메인 서버를 의미 합니다.
*/

zone "71.16.172.in-addr.arpa" IN {
        type master;
        file "zone-71.16.172.in-addr.arpa";
};

/*
[설명]
도메인 : calmmmass.pe.kr
IP :  172.16.71.xxx
위와 같은 정보라고 가정한다면 부여받은 도메인을 도메인이름으로 지정하고 존파일은 임의로 지정하셔도 되지만 알아보기 편하도록 앞이나 뒤에 zone를 붙여 주시는게 좋습니다. type는 master인 것은 위에서 설명한 주 메인 도메인 서버를 의미 합니다.
*/

zone "estenpark.pe.kr" IN {
        type master;
        file "zone-estenpark.pe.kr";
};


[ Tip 한번에 문자 모두 변경 하는 방법 ]
:1,$ s/211.43.134.102/172.16.71.200/g

[ dns  존파일 구성하는 파일 확인 ]
[2010-11-23 20:48:30]-[root@server102:/usr/local/dns/etc]
# grep file named.conf
        dump-file "/var/tmp/named_dmp.db";
        statistics-file "/var/tmp/named.stats";
        pid-file "/var/run/named.pid";
       file "named.root";
       file "zone-0.0.127.in-addr.arpa";
       file "zone-71.16.172.in-addr.arpa";
       file "zone-estenpark.pe.kr";



6. 존파일의 구성




7. /var/named에 위치하는 zone파일의 설정

[설명]  ftp://ftp.internic.org/domain/named.root  파일의 내용을 복사해서 아래와 같이 named.root 파일로 생성합니다. 캐시 파일로서 사용하기 위한 설정 방법이며 파일의 내용은 절대 변경 하지 마시길 바랍니다.
[2010-11-23 20:49:29]-[root@server102:/var/named]
# cat named.root

;       This file holds the information on root name servers needed to
;       initialize cache of Internet domain name servers
;       (e.g. reference this file in the "cache  .  <file>"
;       configuration file of BIND domain name servers).
;
;       This file is made available by InterNIC
;       under anonymous FTP as
;           file                /domain/named.cache
;           on server          
FTP.INTERNIC.NET
;       -OR-                    RS.INTERNIC.NET
;
;       last update:    Jun 17, 2010
;       related version of root zone:   2010061700
;
; formerly NS.INTERNIC.NET
;
.                        3600000  IN  NS    A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4
A.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:BA3E::2:30
;
; FORMERLY NS1.ISI.EDU
;
.                        3600000      NS    B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET.      3600000      A     192.228.79.201
;
; FORMERLY C.PSI.NET
;
.                        3600000      NS    C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET.      3600000      A     192.33.4.12
;
; FORMERLY TERP.UMD.EDU
;
.                        3600000      NS    D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET.      3600000      A     128.8.10.90
;
; FORMERLY NS.NASA.GOV
;
.                        3600000      NS    E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET.      3600000      A     192.203.230.10
;
; FORMERLY NS.ISC.ORG
;
.                        3600000      NS    F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET.      3600000      A     192.5.5.241
F.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:2F::F
;
; FORMERLY NS.NIC.DDN.MIL
;
.                        3600000      NS    G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET.      3600000      A     192.112.36.4
;
; FORMERLY AOS.ARL.ARMY.MIL
;
.                        3600000      NS    H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET.      3600000      A     128.63.2.53
H.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:1::803F:235
;
; FORMERLY NIC.NORDU.NET
;
.                        3600000      NS    I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET.      3600000      A     192.36.148.17
I.ROOT-SERVERS.NET.      3600000      AAAA  2001:7FE::53
;
; OPERATED BY VERISIGN, INC.
;
.                        3600000      NS    J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET.      3600000      A     192.58.128.30
J.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:C27::2:30
;
; OPERATED BY RIPE NCC
;
.                        3600000      NS    K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET.      3600000      A     193.0.14.129
K.ROOT-SERVERS.NET.      3600000      AAAA  2001:7FD::1
;
; OPERATED BY ICANN
;
.                        3600000      NS    L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET.      3600000      A     199.7.83.42
L.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:3::42
;
; OPERATED BY WIDE
;
.                        3600000      NS    M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET.      3600000      A     202.12.27.33
M.ROOT-SERVERS.NET.      3600000      AAAA  2001:DC3::35
; End of File

[설명] 로컬호스트에서의 Reverse 파일 입니다. ns.calmmmass.pe.kr은 name server을 지정해주기 위한 것이고,  PTR(Domain Name Pointer) 이것은 IP 주소를 도메인으로 변환 해줍니다.
예) nslookup 127.0.0.1 하면 localhost가 나옵니다.

[2010-11-23 20:49:29]-[root@server102:/var/named]

# cat zone-0.0.127.in-addr.arpa
$TTL  86400
@    IN    SOA          localhost. root.localhost. (
                            1997022700 ; Serial
                            28800         ; Refresh
                            14400         ; Retry
                            3600000      ; Expire
                            86400 )       ; Minimum
        IN      NS      localhost.

1       IN      PTR     localhost.

[설명] 로컬호스트 파일 입니다. ns.calmmmass.pe.kr은 name server을 지정해주기 위한 것이고,  A는 localhost(도메인) 주소를 IP로 변환 해줍니다.
예) nslookup localhost 하면 127.0.0.1이 나옵니다.

# cat zone-localhost
$TTL 86400
@    IN   SOA     @       root (
       42          ; serial (d. adams)
       3H         ; refresh
       15M       ; retry
       1W         ; expiry
       1D )       ; minimum

       IN    NS     @
       IN    A       127.0.0.1


[설명]  IP중 마지막 자리를 뺀 나머지를 역으로 선언하는 Reverse 파일 입니다. ns.calmmmass.pe.kr은 name server를 지정해주기 위한 것이고,  PTR(Domain Name Pointer) 이것은 IP 주소를 도메인으로 변환 해줍니다.
[2010-11-23 20:49:29]-[root@server102:/var/named]
# cat zone-71.16.172.in-addr.arpa
$TTL    3600
@       IN      SOA             ns.calmmmass.pe.kr. root.calmmmass.pe.kr. (
                                2001070600      ;Serial
                                21600           ;Refresh        ( 6 hours )
                                1800            ;Retry          ( 30 minutes )
                                1209600         ;Expire         ( 14 days )
                                86400 )         ;Minimum        ( 1 day )
        IN      NS              ns.calmmmass.pe.kr.

xxx     IN      PTR             ns.calmmmass.pe.kr.

[설명]  존 파일 입니다. 실제로 2차도메인 및 서비스별 도메인을 정의 할 수 있는 아주 중요한 파일입니다.
 ns.calmmmass.pe.kr은 name server을 지정해주기 위한 것이고, MX는 Mail Excahanger의 약어로 Fowarding개념 입니다. A는 Address 즉 특정 호스트명에 대한 IP주소를 입력 해줍니다.
[2010-11-23 20:59:28]-[root@server102:/var/named]
# cat  zone-estenpark.pe.kr
$TTL    3600
@       IN      SOA             ns.calmmmass.pe.kr.      root.calmmmass.pe.kr. (                                2001041100      ;Serial
                                84600           ;Refresh
                                1800            ;Retry
                                1209600         ;Expire
                                84600 )         ;Minimum

        IN      NS              ns.calmmmass.pe.kr.
        IN      NS              ns2.calmmmass.pe.kr.
        IN      A               172.16.71.200

        IN      MX      10      mail

mail    IN      A               172.16.71.200
ns      IN      A               172.16.71.200
ns2     IN      A               172.16.71.200
ftp     IN      A               172.16.71.200
www     IN      A               74.125.224.19   

[설명] 존 파일 체크 방법
[2010-11-23 21:01:21]-[root@server102:/usr/local/dns/sbin]
# ./named-checkzone estenpark.pe.kr /var/named/zone-estenpark.pe.kr
zone estenpark.pe.kr/IN: loaded serial 2001041100
OK




8. 설정 확인 및 테스트

[설명] DNS 데몬 확인
[2010-11-23 21:02:58]-[root@server102:/usr/local/dns/sbin]
#
ls  |perl -ne 'print if /named$/'
named

[설명] DNS 데몬 가동 및 프로세스 확인
[2010-11-23 21:06:09]-[root@server102:/usr/local/dns/sbin]
# ./named


[2010-11-23 21:06:31]-[root@server102:/usr/local/dns/sbin]
# ps -ef |grep -v grep |grep named
root     16530     1  6 21:06 ?        00:00:00 ./named


[설명] 내 시스템 DNS 서버 변경
[2010-11-23 21:07:57]-[root@server102:/var/named]
# cat /etc/resolv.conf
nameserver 172.16.71.xxx

[설명] 네트워크 서비스 재시작(반드시 재시작 하지 않아도 됩니다. 원인은 왜 그런지 모르겠네요.^^ 정적으로 할당되는 것으로 알고 있었는데 테스트 결과 동적으로 변경이 됐습니다.)
[2010-11-23 21:08:17]-[root@server102:/var/named]
# service network restart


[설명] DNS 서버 변경 확인
[2010-11-23 16:06:45]-[root@server102:/usr/local/dns/sbin]
# nslookup

> 127.0.0.1
Server:         172.16.4.102
Address:        172.16.4.102#53

1.0.0.127.in-addr.arpa  name = localhost.
> 172.16.4.102
Server:         172.16.4.102
Address:        172.16.4.102#53

102.4.16.172.in-addr.arpa       name = ns.calmmmass.pe.kr.
> www.estenpark.pe.kr
Server:         172.16.4.102
Address:        172.16.4.102#53

Name:   www.estenpark.pe.kr
Address: 74.125.224.19
> estenpark.pe.kr
Server:         172.16.4.102
Address:        172.16.4.102#53

Name:   estenpark.pe.kr
Address: 172.16.71.200


[설명] www.estenpark.pe.kr을 구글 도메인 서버로 변경 한다면 어떻게 될까요? DNS를 이해 했다면 아래와 같은 그림을 이해하고 변경이 가능 할 거라고 생각 됩니다. zone-estenpark.pe.kr 파일을 확인 해보면" www  IN  A  74.125.224.19"  설정 부분이 보이실 겁니다. www.[구성한 존파일의 도메인 네임] 하면 테스트가 가능 합니다.





8. rndc DNS  유틸리티 사용방법

rndc : 네임서버 데몬을 관리하는 프로그램
관련 파일 : [설치파일]/etc/rndc.conf( 주 환경설정 파일), rndc-confgen(주 환경설정파일을 만들어주는 명령어)

[설명] [설치파일]/etc/rndc.conf 기본 설정
[2010-11-24 01:44:17]-[root@server102:/usr/local/dns/etc]
# cat rndc.conf
options{
    default-server    localhost;
    default-key       "rndckey";
};
server localhost {
    key    "rndckey";
};

include "usr/local/dns/etc/rndc.key";

[설명] rndc-confgen 명령어를 이용하여 파일 생성(rndc.conf)
[2010-11-24 01:42:20]-[root@server102:/usr/local/dns/sbin]
# ./rndc-confgen -a
wrote key file "/usr/local/dns/etc/rndc.key"

[2010-11-24 01:45:54]-[root@server102:/usr/local/dns/etc]
# chmod 640 rndc.key
[2010-11-24 01:46:14]-[root@server102:/usr/local/dns/etc]
# ls -al
합계 24
drwxr-xr-x  2 root root 4096 11월 24 01:44 .
drwxr-xr-x  9 root root 4096 11월 23 20:37 ..
-rw-r--r--  1 root root  665 11월 23 20:26 bind.keys
-rw-r--r--  1 root root  689 11월 23 20:37 named.conf
-rw-r--r--  1 root root  162 11월 24 01:44 rndc.conf
-rw-r-----  1 root root   77 11월 24 01:42 rndc.key




Comments