주(Primary) DNS 서버 구축해보기





    이번시간에는 네임서버의 가장 대표적인 주(Primary) DNS 서버를 구축해보겠습니다.



    관련글 : 


    도메인과 네임서버 알아보기 - http://server-talk.tistory.com/168


    도메인이란? - http://server-talk.tistory.com/76


    네임서버 변경시 반영시간 - http://server-talk.tistory.com/80





    이전글 : 


    네임서버 활용분야 - http://server-talk.tistory.com/173







     방화벽 설정하기




    네임서버(DNS)


    DNS - TCP 53 / UDP 53


    [root@server ~]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT
    [root@server ~]# iptables -A INPUT -p udp --dport 53 -j ACCEPT
    







     네임서버 설치하기



    배포판 리눅스 대표적으로 DNS는 bind 입니다 bind는 패키지형태로 제공하고 있으며, yum 명령어를 이용하여 설치할 수 있습니다



    BIND 설치


    [root@server named]# yum -y install bind bind-utils
    







     bind 설정파일



    1. /etc/named.conf


    네임서버 데이터베이스 및 zone 파일의 위치, 접근제어등의 보안설정을 할 수 있는 메인 설정파일입니다.




    2. /var/named


    네임서버의 zone 파일 디렉토리의 경로입니다 chroot 설정시 /var/named/ 디엙토리에 설정된 내용을 /var/named/chroot/var/named로 심볼릭 링크를 걸어줍니다.




    3. /etc/named.rfc1912.zones


    네임서버에 쿼리 요청시 사용할 도메인 정보(정방향 영역과 역방향영역)을 설정해야될 부분입니다.




    4. /var/named/[도메인].zone


    네임서버 설정시 가장 중요한 도메인 정보 파일이며 네임서버를 가동시에 zone 파일을 읽어 네임서버 서비스가 가동되며, zone 파일은 도메인을 IP 주소로 변환해 주는 역할을 합니다.







     주(Primary) DNS 서버 설정하기



    1. named.conf


    // named.conf
    //
    // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
    // server as a caching only nameserver (as a localhost DNS resolver only).
    //
    // See /usr/share/doc/bind*/sample/ for example named configuration files.
    //
    
    options {
    	listen-on port 53 { any; };
    	listen-on-v6 port 53 { ::1; };
    	directory 	"/var/named";
    	dump-file 	"/var/named/data/cache_dump.db";
            statistics-file "/var/named/data/named_stats.txt";
            memstatistics-file "/var/named/data/named_mem_stats.txt";
    	allow-query     { any; };
    	recursion yes;
    
    	dnssec-enable yes;
    	dnssec-validation yes;
    
    	/* Path to ISC DLV key */
    	bindkeys-file "/etc/named.iscdlv.key";
    
    	managed-keys-directory "/var/named/dynamic";
    };
    
    logging {
            channel default_debug {
                    file "data/named.run";
                    severity dynamic;
            };
    };
    
    zone "." IN {
    	type hint;
    	file "named.ca";
    };
    
    include "/etc/named.rfc1912.zones";
    include "/etc/named.root.key";
    


    변경 전 - listen-on port 53 { 127.0.0.1; };


    변경 후 - listen-on port 53 { any; };


    기본설정은 127.0.0.1에 리스닝닝하기 때문에, 외부에서 접속이 불가능합니다 서버에 설정된 모든 IP에 대해 리스닝하도록 any로 변경합니다.



    변경 전 - allow-query { localhost;};


    변경 후 - allow-query { any;};


    네임서버에 설정된 도메인만 응답하도록 설정하는부분입니다.




    변경없음 - recursion no;


    yes로 설정하면 네임서버에 설정되지 않은 도메인에 대한 질의가 있을시 캐싱 네임서버의 역할을 하여 DNS 질의과정을 거치게 되며, 주 네임서버는 캐싱 네임서버 역할이 필요하지 않으므로 no로 설정합니다.



    2. named.rfc1912.zones


    // named.rfc1912.zones:
    //
    // Provided by Red Hat caching-nameserver package
    //
    // ISC BIND named zone configuration for zones recommended by
    // RFC 1912 section 4.1 : localhost TLDs and address zones
    // and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt
    // (c)2007 R W Franks
    //
    // See /usr/share/doc/bind*/sample/ for example named configuration files.
    //
    
    zone "localhost.localdomain" IN {
            type master;
            file "named.localhost";
            allow-update { none; };
    };
    
    zone "localhost" IN {
            type master;
            file "named.localhost";
            allow-update { none; };
    };
    
    zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
            type master;
            file "named.loopback";
            allow-update { none; };
    };
    
    zone "1.0.0.127.in-addr.arpa" IN {
            type master;
            file "named.loopback";
            allow-update { none; };
    };
    
    zone "0.in-addr.arpa" IN {
            type master;
            file "named.empty";
            allow-update { none; };
    };
    
    zone "test.com" IN {
            type master;
            file "test.com.zone";
            allow-update { none; };
    };
    	allow-update { none; };
    };
    


    named.rfc1912.zones의 맨하단부분의 추가할 도메인정보/파일(test.com, test.com.zone)을 입력합니다.

    test.com 도메인을 사용하려면 test.com.zone([도메인].zone)파일을 만들어야 됩니다




    2. ZONE 파일 설정하기


    1) ZONE 파일 생성하기

    [root@server named]# pwd
    /var/named
    


    ZONE 파일을 생성하기 위해 /var/named의 디렉토리로 이동합니다.


    [root@server named]# cp named.localhost test.com.zone
    

    /var/named의 디렉토리로 이동하면 named.localhost 파일이 있습니다 named.localhost의 파일을 사용할 도메인의 zone파일의 파일명으로 복사합니다



    2) /var/named/[도메인].zone 파일 설정


    $TTL 1D @ IN SOA @ rname.invalid. ( 0 ; serial //시리얼값 1D ; refresh //보조 네임서버가 주 네임서버에 접속하는 시간 1H ; retry //접속 실패시 다시 시도할 시도 간격 1W ; expire //주네임서버에서 데이터가 없다면 1주 이후에 지워짐 3H ) ; minimum //TTL 설정과 같은 의미 IN NS ns.test.com. //도메인을 소우한 주 DNS의 도메인 IN MX 10 aspmx.l.google.com //메일을 보낼 도메인 또는 주소 IN TXT "v=spf1 ip4:192.168.0.133 ~all" IN A 192.168.65.133 //도메인이 찾아갈 IP주소 www IN A 192.168.65.133 //www.도메인이 찾아갈 IP주소 ns IN A 192.168.65.133 //주 네임서버 아이피 test IN CNAME google.com.




    레코드 정보의 의미


    1. $TTL

    TTL은 test.com 도메인의 정보를 캐시 네임서버에서 가져간 다음 캐시 네임서버에 얼마나 보관할 것인가를 지정하는 시간입니다


    2. @

    @는 origin 도메인을 의미하는 것으로 named.conf 파일에 설정되어있는 도메인명을 의미합니다


    3. SOA 레코드

    SOA는 도메인에 대해 설정한 네임서버가 모든정보를 가지고 있음을 선언한 것으로 도메인에 대한 네임서비스의 모든 권한을 의미합니다


    4. Serial

    Refresh, retry, Exprire, Minimum 값들은 모두 secondary 네임서버와 primary 네임서버와의 연동을 어떻게 할 것인가에 대한 설정입니다 대부분의 도메인 설정은 주 네임서버에서 하고 보조네임서버는 주 네임서버의 설정 값을 주기적으로 가저가게 됩니다 주네임서버의 serial 값을 높여주게 되면 보조네임서버에서 설정이 변경된것으로 확인해고 새로운 zone 파일로 갱신하게됩니다.


    5. Refresh

    보조 네임서버에서 1차 네임서버의 변경된내용이 있는지 체크하는 시간입니다


    6. Retry

    2차 네임서버가 1차 네임서버로의 접근이 안될때  얼마 만에 접근을 시도할 것인가를 결정하는 값입니다


    7. Expire

    보조 네임서버는 주 네임서버에서 동기화 과정중 retry 주기마다 지속적으로 연결을 시도하였지만 expire 시간동안 계속해서 연결이 되지 않으면 보조 네임서버는 해당 도메인의 정보가 삭제되었거나 폐기되었다고 판단하여 그후부터 연결시도를 하지 않습니다


    8. Minimum

    TTL(Time to Live)를 의미하는 것으로 도메인 정보를 다른 네임서버에서 가져갔을 때에 가져간 도메인정보를 얼마나 보관하고 있을 것인가에 대한 시간 값입니다


    9. NS레코드

    NS레코드는 해당 도메인의 네임서버를 지정하는 레코드 입니다

    	IN	NS	ns.test.com.
    


    10. A레코드

    A레코드는 지정한 도메인의 실제로 접속할 IP 주소를 설정하는 레코드 입니다

    	IN	A	192.168.65.133
    www	IN	A	192.168.65.133
    



    11. MX레코드

    MX레코드는 해당 도메인으로 메일을 사용할 경우 메일서버를 지정한것입니다 IP로 지정이 가능하지만 IP변경으로 인한 정보의 변경을 최소화하기 위해 도메인을 사용하는 것이 좋습니다 도메인으로 지정할 경우에는 마지막에 "."으로 끝나야됩니다


            IN      MX      10 aspmx.l.google.com
    



    12. CNAME 레코드

    CNAME 레코드는 일명 별칭 레코드이며 test.com IP주소가 192.168.65.133라면 www.test.com으로 지정시에 IP주소가 같다는 의미입니다 쉽게 말해 test.com의 www.test.com 도메인이 동일한 의미를 가진것입니다



    test	IN	CNAME	google.com.
    





    3) ZONE 파일 파일의 소유권 변경


    변경 전

    [root@server named]# ls -al test.com.zone 
    -rw-r----- 1 root root 152 Sep 27 19:50 test.com.zone
    


    변경 후

    [root@server named]# chown named:root test.com.zone 
    [root@server named]# ls -al test.com.zone 
    -rw-r----- 1 named root 152 Sep 27 19:50 test.com.zone
    


    파일을 작성 후 파일의 소유권을 변경해 줍니다.






     DNS 설정 파일 검증하기



    마지막으로 네임서버를 세팅시에 파일이 잘반영되는지 확인이 필요합니다 다음과 같이 알아보도록 하겠습니다.



    1. named.conf 설정파일 검증

    [root@server named]# named-checkconf /etc/named.conf
    


    named.conf 파일을 검증하는 과정이며, 정상적으로 설정을 잘하였다면 아무런 메시지가 나오지 않습니다




    2.  zone 파일 검증


    1) 정상적인 설정 메시지

    [root@server named]# named-checkzone test.com test.com.zone 
    zone test.com/IN: loaded serial 0
    OK
    


    위와 같이 OK 메시지를 보여주면 설정에 문제가 없는 것입니다.



    2) 잘못된 설정 메시지

    [root@server named]# named-checkzone test.com test.com.zone 
    zone test.com/IN: NS 'ns.test.com.test.com' has no address records (A or AAAA)
    zone test.com/IN: not loaded due to errors.
    


    zone 파일을 일부를 수정하였으며, 잘못된 수정을 하였을경우 위치와 내용을 알려줍니다.

    Posted by 서버이야기