본문 바로가기

공부/리눅스

DNS - Domain Name Service

반응형
dns 서비스

dns 서버는 크게 세가지가 있다.

1. Primary DNS (또는 Master DNS)

2. Secondary DNS (또는 Slave DNS) - 백업 역할을 하는 DNS.
 반드시 필요한 것은 아니며 primary dns 가 다운되었을때 대신 서비스 하기 위한것이다.

3. Cache Only DNS
 

DNS 역할

다른 호스트에 접속시 ip 주소가 반드시 필요하다.
그러나 ip 주소는 기억하기 어려우므로 보통 도메인 이름을 사용한다.
그래서 필요한 것이 DNS 이다.

도메인에 대한 해당 ip 주소를 알려주는것이 DNS 의 주된 역할이다.


도메인이 ip 주소로 변환되는 과정.

1. 클라이언트: http://www.abc.co.kr 
2. ip 주소가 아니므로 클라이언트는 ip주소를 알아내기 위해 /etc/host.conf 파일 참조
  여기에 order hosts,bind 로 설정되어 있으면 /etc/hosts 에서 해당도메인 정보를 찾고
  없으면 그 다음 /etc/resolv.conf 파일을 참조한다. 적혀있는 순서대로 참조한다.
3. /etc/hosts 파일에 없다고 가정하면 /etc/resolv.conf 를 참조하게 되고
  거기에 nameserver 168.126.63.1 이 적혀 있으면 그 주소의 서버에게 도메인 주소를
  알려 달라고 요청한다.
4. 168.126.63.1 의 dns 서버가 자신이 가지고 있는 dns zone 설정 파일을 참조해서
  해당되는 정보가 있으면 ip 를 알려준다.
5. 클라이언트는 ip 를 알게되었으므로 그 ip 를 가지고 서버에 접속한다.


*. 그런데 4번 단계에서 168.126.63.1(kornet) dns 가 www.abc.co.kr 에 대한 설정을 가지고 있지
  않으면 조금 복잡해진다.

  이런경우 코넷 dns는 최상위 계층에 존재하는 root dns 에게 www.abc.co.kr 에 대한 도메인 주소를
  물어본다.  실제 등록된 domain 주소에 대한 ip 주소는 root dns 는 전부 찾을 수 있다.

5.  root dns 는 www.abc.co.kr 에 대한 정보를 찾기 위해서 하위 몇단계를 거쳐 찾는다.
 그리고 그 정보를 코넷 dns 한테 알려준다.

6. 코넷 dns는 www.abc.co.kr 주소를 캐시영역에 저장해두고 찾은 ip 주소는 클라이언트에게 알려준다.

*. 그 다음 또 어떤 클라이언트가 코넷 dns에게 www.abc.co.kr 의 ip 를 알려달라고 요청하면
    이번에는 캐시에 그 정보가 저장되어 있으므로 root dns 에게 묻지 않고 바로 알려준다.

유닉스에서 주로 사용되는 dns 패키지는 bind 이다.

[root@star etc]# rpm -qa | grep bind
bind-utils-9.3.1-4
bind-9.3.1-4
ypbind-1.17.2-5              => 이건 bind 패키지가 아니다.
bind-chroot-9.3.1-4
bind-libs-9.3.1-4

설치되어 있지 않으면 rpm 또는 yum 으로 설치한다.

*. DNS 설정파일

/etc/named.conf

나머지 세부 설정파일은 /etc/named.conf 의 설정에 따라 경로 및 파일이름이 결정된다.

[root@star etc]# cat /etc/named.conf
// <==  // 이 기호는 주석으로 사용된다. 한라인 주석.
// named.conf for Red Hat caching-nameserver
//

options {
        directory "/var/named";
        dump-file "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        /*
        * 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 "localdomain" IN {
        type master;
        file "localdomain.zone";
        allow-update { none; };
};

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; };
};

/* 여기서 부터는 ipV6 를 위한 설정으로 ipV6 사용하지 않는다면
수정할 필요없이 그대로 두면 된다.    (/*  ~  */ 이 사이에 있는것은 다 주석으로 처리된다)

zone "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.ip6.local";
        allow-update { none; };
};

zone "255.in-addr.arpa" IN {
        type master;
        file "named.broadcast";
        allow-update { none; };
};

zone "0.in-addr.arpa" IN {
        type master;
        file "named.zero";
        allow-update { none; };
};

*/

include "/etc/rndc.key";

*. named.conf 파일안에 들어가는 설정은 크게 4가지이다.

첫번째 - 세부 설정파일을 저장할 디렉토리 : option
두번째 - root domain zone
세번째 - Forward zone : 도메인 -> ip 변환
네번째 - Reverse zone : ip -> 도메인 변환

[root@star etc]#

반응형