Domain Name System


 

DNS의 개요

Domain Name System 혹은 DNS를 한마디로 요약한다면 호스트명과 IP 어드레스를 서로
매핑시키고 E-mail의 라우팅 정보를 제공하기 위하여 TCP/IP 어플리케이션에 의해
사용되는 분산된 데이터베이스라고 할 수 있습니다. 즉 계층적 이름을 인터넷의 주소로
또는 그 반대로 변환하는 것을 의미합니다. 각각의 사이트(예를 들면 학교, 기업 혹은
기업 내의 여러 부서들)에는 각자의 어드레스에 대한 정보를 포함하는 데이터베이스를
관리하는 네임 서버가 있으며 이 서버를 통해 필요한 정보를 얻게 됩니다.

 

DNS의 기원

인터넷상의 컴퓨터는 전세계의 다양한 네트워크 안에서 TCP/IP 프로토콜을 통해 서로
통신하고 있습니다. 모든 호스트간의 통신은 이 프로토콜과 각 호스트마다
203.255.113.70과 같은 형태의 32 비트의 IP어드레스를 할당하는 IP어드레스 시스템에
기초하고 있습니다.

일반적으로 사람들이 어떤 대상에 이름을 붙이듯이 호스트도 각각의 이름을 가지고
있습니다. 인터넷에서 통신이 가능한 호스트는 호스트 이름과 IP어드레스에 대해
어떠한 형태로든 관계를 가지며 사용자나 프로그램이 어드레스가 아닌 이름으로
자신을 인지할 수 있도록 하고 있습니다.

예를 들어 사용자들이 아이네트의 홈페이지에 방문하기 위해서 203.255.113.70과 같은
IP 어드레스를 입력하지 않고 www.iWorld.net과 같이 직관적으로 이해하기 쉬운 이름을
사용할 수 있는 것은 DNS의 네임 서버가 이러한 이름에 해당하는 IP어드레스를 찾아
주기 때문에 가능한 것입니다.

과거에는 TCP/IP를 포함하는 Unix와 같은 운영 체제를 가진 컴퓨터의 경우 이러한
관계를 관리하는 방법으로 호스트 파일을 사용하였습니다. NIC에서 이러한 호스트
파일을 관리함으로써 호스트 이름과 어드레스의 매핑을 관장하도록 하였고 어드레스와
관련된 정보들은 HOSTS.TXT 라는 파일에 저장되며 새로운 호스트가 추가될 때마다 다른
호스트로 전송(ftp)되었습니다. 이러한 형태는 지금의 Unix의 /etc/hosts 파일의
유래를 반영한다고 볼 수 있습니다.

그러나 이러한 시스템은 몇 가지의 문제점을 노출하게 되었습니다. 즉, 어떤 단체가
개개의 호스트나 자신들 내부 네트워크의 셋업을 완료시킨 뒤라도 NIC에서 HOSTS.TXT
파일을 변경할 때까지 전체 네트워크에 참여할 수 없다는 것과 동일한 이름이 사용되는
이름의 충돌 현상, 그리고 인터넷의 호스트가 증가함에 따라 NIC이 이러한 정보를
ftp로 제공하는 데 필요한 대역폭의 요구가 점점 커지는 등의 문제가 발생하였던 것
입니다.

DNS는 이러한 환경을 배경으로 출현하게 되었습니다. 기본 개념은 네트워크의 모든
호스트를 도메인이라는 영역으로 그룹화시키는 것으로 각 도메인은 이름 트리에서
각 노드를 형성하게 되며 호스트 이름은 그 호스트가 속해 있는 직속 도메인 내에서만
그 이름이 하나가 되면 됩니다.

 

DNS의 구조

DNS의 이름 공간은 Unix의 파일 시스템과 유사하게 계층적인 구조를 이루고 있으며
그림은 이러한 계층적인 구조를 보여주고 있습니다. 모든 노드는 최대 63개의 문자로
이루어지는 label을 가지며 트리의 루트는 특별한 노드로서 null label을 갖습니다.
트리내의 어떠한 노드의 도메인 네임도 inet.co.kr 등과 같이 label의 리스트로
이루어지며 그 노드에서 시작되어 루트쪽으로 올라가고 label간은 점으로 구분됩니다.
트리 내의 모든 노드는 앞서 언급한 것처럼 같은 도메인내에서는 각자 고유한 도메인
네임을 갖습니다. 현재 root에는 Inter NIC이 위치하고 있으며 InterNIC은 몇 개의
최상위 도메인을 노드로 갖습니다.

    

각각의 최상위 도메인이 나타내는 바는 다음과 같습니다.


   arpa     특별한 도메인으로 어드레스 대 이름의 매핑에 사용
 
    com     상업적 기관 
    edu     교육 기관과 대학
    org     비영리 기관
    net     네트워크
    gov     비군사 정부 기관
    mil     군사 정부 기관
 
     xx     두 문자로 된 국가코드(우리나라는 kr)


위의 도메인명 중에서 arpa domain은 역 어드레스 도메인으로써 호스트와 네 트워크의
IP 어드레스에 기초한 이름들의 루트로 취급됩니다. 그럼으로써 이름 이 특정 네트
워크의 호스트를 찾을 수 있는 형태로 만들어질 수 있으며 이를 통해 IP어드레스로부터
호스트의 이름을 얻을 수 있습니다.

그림과 같은 DNS 이름의 트리 구조에서 또 하나 이해하고 있어야 하는 용어가
'zone'입니다. DNS 이름 공간의 한 부분에 대해 권한이 있는 어떤 특정 서버 즉
그 공간에 대해 모든 것을 알고 있는 서버가 있습니다. 다른 이름 공간의 정보를 알기
위해서는 그 공간에 대한 권한을 가진 서버를 찾아야 하며 그 역도 마찬가지입니다.
이름 공간 중 한 서브 트리에 대해 하나의 권한을 가질 때 그 서브 트리로 구성되는
공간을 'zone'이라고 합니다.

각각의 zone에는 zone을 관리하는 관리자가 존재하게 되는 데 zone의 규모가 확장됨에
따라 관리의 어려움이 커지게 됩니다. 따라서 한 개 혹은 그 이상의 zone을 관리하기
위해 네임 서버가 필요합니다. 네임 서버에는 primary 네임 서버와 secondary 네임
서버의 두 가지가 존재하며 두 서버의 차이는 다음과 같습니다. 즉, primary 네임
서버는 모든 정보를 가지고 있으며 secondary 네임 서버는 필요한 정보를 primary
네임 서버로부터 얻습니다.

이러한 과정을 zone transfer라 하며 이렇게 두 가지 형태의 서버를 두는 것은 어느
한쪽의 장애로 인하여 전체 시스템이 영향을 받지 않도록 redundancy 를 제공하기 위한
것입니다. Secondary 서버는 계속해서 primary 서버로부터 데이터를 갱신하므로
시스템 관리자는 primary서버만 갱신하면 됩니다. 이러한 자동적인 zone transfer는
한 도메인이 여러 개의 서버로부터 서비스를 받는 것을 가능하게 하며 도메인 정보의
효용성 및 안정성을 향상시킬 수 있습니다.

DNS의 File구조

이 장에서는 실제로 Domain name system을 구축하기 위하여 고려되어야 할 여러 가지
요소들에 대하여 설명합니다. 일반적으로 Domain name system을 구축하기 위해서는
다음과 같은 파일들이 네임 서버에 설정되어야 합니다.

  1. 부트 파일 (named.boot file)
  2. resolve.conf 파일
  3. 호스트 데이터베이스 파일 ( 흔히 zone file 이라 불리움 )
  4. 캐시 파일 (cache file)
  5. 역 데이터베이스 파일 (reverse database file)
  6. 루프 백 파일 (loopback file)


  부트 파일(/etc/named.boot)


    이 파일은 서버에게 작동을 위해 필요한 여러가지 데이터 파일들을 어디서 찾고 또
    그것들을 어떻게 사용해야 하는지를 알려주는 파일입니다. 아래에 부트 파일의 예가
    나와 있습니다.
    
    아래 파일의 내용을 설명하면 먼저 이 서버는 primary 네임 서버이며 도메인명은
    inetkorea.co.kr임을 알 수 있습니다. 'directory'라는 키워드는 세번째 열의 파일
    들이 위치하는 디렉토리를 나타냅니다. localhost.rev파일은 인터넷상에서 호스트
    자신을 인식하기 위해 사용되는 파일이며 210.126.195.rev파일은 IP 어드레스로부터
    도메인명을 찾는데 사용되는 파일입니다.

  마지막에는 root.cache라 불리는 캐시 파일이 정의되어 있습니다.


Directory /var/named
 
primary   0.0.127.in-addr.arpa          localhost.rev
primary   inet.co.kr                    inet.zone
primary   195.126.210.in-addr.arpa      210.126.195.rev
cache     .                             root.cache



  resolv.conf 파일

  네임 서비스를 받을 도메인과 네임서버를 지정합니다.


domain inet.co.kr
nameserver 127.0.0.1
nameserver 203.255.112.34



  데이터베이스 파일(위의 named.boot 파일중 inet.zone 파일)

    가장 중요한 데이터베이스는 서버가 전체적인 권한을 가진 도메인 내의 호스 트의
    데이터베이스입니다. 아래에 도메인의 정의에 대한 데이터 베이스 파일 의 예가
    나와있습니다.(흔히 zone 파일이라 불립니다.)


; name ttl    class   type   server
@             IN      SOA    ns.inet.co.kr. root.inet.co.kr.(
                                971226; serial
                                10800 ; refresh
                                3600  ; retry
                                604800; expire
                                86400); minimum
              IN      NS     ns.inet.co.kr.
              IN      A      210.126.195.1
;
ns            IN      A      210.126.195.1
www           IN      A      210.126.195.1


  파일의 맨 위에 있는 각 필드의 의미는 다음과 같습니다.

  • name은 이 레코드에 의해 서술되는 장비의 이름을 말합니다.
  • ttl은 이 레코드가 다른 DNS로 복사된 후 얼마 후에 갱신될 것인가를 나타냅니다.
  • address classs는 IN으로 되어있는데 인터넷 호환기종의 장비를 위한 레코드임을 의미합니다. 쉽게 인터넷을 의미한다고 보면 됩니다.
  • entry type은 A, NS, SOA, MX, HINFO, CNAME등이 있습니다. 각각에 대한 세부적인 설명은 뒤에 언급됩니다.
  • server의 내용은 entry type에 달려있습니다. 그 값은 IP 어드레스이거 나 도메인 네임입니다. 다음은 위의 데이터베이스 파일의 몇 가지 레코드에 관하여 설명합니다. 레코드는 호스트의 이름이나 주소등을 비롯한 각종 정보를 갖고 포함하고 있습니다.
  • SOA : 각 데이터베이스 파일이 시작될 때 관련된 레코드들에게 시작점을 지시합니다. 즉, 다음의 모든 레코드는 기준점으로 SOA 레코드가 정의해 준 도메인을 사용합니다.
  • NS : 위에서 언급한 SOA 레코드와 관련된 도메인의 네임 서버 목록을 제시 하며 대개 SOA 레코드 바로 다음에 위치합니다.
  • A : 호스트와 그 호스트에 관련된 IP 어드레스를 나타냅니다. 대개 한 IP 어드레스에 한 A 레코드가 사용되고 CNMAE은 alias(별명)를 만드는 데 사용 됩니다.
  • CNAME : 한 호스트에 대해서 여러개의 이름을 가지고 싶은 경우에 사용합니다. 정식 이름은 A 레코드에서 정의되고 alias는 "=CNAME"에서 정의됩니다. 주로 WWW, ftp등에서 사용됩니다.
  • MX : 호스트가 메일 수신이 가능한지를 나타내는데 도메인 네임에 대해 메일을 프로세싱하거나 포워딩하는 메일 교환기를 정의합니다.


  캐시 파일(cache file):

  
  캐시 파일은 서버가 기동될 때 도메인 네임 서버의 메모리에 로드됩니다. 이 파일은
    찾고자 하는 도메인을 발견하지 못했을 경우 물어보게 될 최상위 도메인의 다른
    서버들에 대한 데이터를 갖고 있습니다. 아래에 캐시 파일의 예가 나와 있습니다.


.                 99999999   IN   NS  NS.INTERNIC.NET.
NS.INTERNIC.NET.  99999999   IN   A   198.41.0.4
.                 99999999   IN   NS  NS1.ISI.EDU. 
NS1.ISI.EDU.      99999999   IN   A   128.9.0.107
.                 99999999   IN   NS  C.PSI.NET.
C.PSI.NET.        99999999   IN   A   192.33.4.12
.                 99999999   IN   NS  TERP.UMD.EDU.
TERP.UMD.EDU.     99999999   IN   A   128.8.10.90
 
                     - 중략 -



  역 매핑 파일(위의 named.boot 파일 중 216.126.195.rev 파일)

    
두 번째의 데이터베이스 파일은 역 매핑에 관한 것입니다. 주 데이터베이스 파일과
    마찬가지로 이름과 IP 어드레스 필드를 갖고 있으나 IP 어드레스로부터 도메인명을
    찾아내는데 사용됩니다.


@     IN   SOA   ns.inet.co.kr. root.ns.inet.co.kr.(
                                    971224 ; serial
                                    21600  ; refresh
                                    900    ; retry
                                    604800 ; expire
                                    43200) ; minimum
$ORIGIN  195.126.210.in-addr.arpa.
1     IN   PTR   ns.inet.co.kr.
        



  루프백 파일(위의 named.boot파일 중 localhost.rev 파일)

    
마지막으로 루프 백 파일은 호스트에 의해 사용되는 루프 백 어드레스를 갖고
    있습니다. 이 파일은 인터넷상에서 호스트가 자기 자신을 참조하기 위해 사용되며
    불필요하게 외부 네트워크를 경유하는 것을 방지합니다.


@     IN   SOA   nuri.net. taeha.nuri.net.(
                                     961226 ; serial
                                     21600  ; refresh
                                     900    ; retry
                                     604800 ; expire
                                     43200) ; minimum
      IN   NS    sol.nuri.net.
;
1     IN   PTR   localhost.
        
 

 

DNS에서의 데이터의 흐름

앞서 언급한 바와 같이 DNS의 주된 기능은 도메인명에 해당하는 IP 어드레스를 찾아내는
것입니다. Netscape이나 Explorer와 같은 브라우저를 이용하여 원하는 곳의 홈페이지를
찾기 위해서 도메인명을 입력 하였을때 먼저 그곳의 IP어드레스를 알아내는 작업이
필요한 것입니다. 이러한 작업을 간략히 설명하면 다음과 같습니다.

먼저 클라이언트는 로컬 네임 서버로 질의를 전달합니다. 로컬 네임서버는 요청된
데이터를 도메인 내에서 찾으면 그에 해당하는 IP 어드레스를 돌려주게 됩니다. 만약
로컬 네임 서버가 요청된 데이터를 찾지 못하면 다른 네임 서버로 질의를 전달합니다.
최악의 경우 로컬 네임 서버의 질의는 DNS트리의 최상위에 있는 루트 네임 서버에서
시작하여 요청된 데이터가 발견될 때까지 아래로 전달되게 됩니다. 이에 대한 개략적인
그림이 아래에 나와 있습니다.

      

매번 최상위 서버에게로 질의가 전달된다면 그 서버는 부하를 견디지 못하게 될 것
입니다. 그래서 모든 서버는 이전에 발견된 데이터들을 cache영역에 등록하여 이후
동일한 요청이 있을 경우에는 상위로 질의를 전달하지 않는데 이를 caching 이라
합니다.

                                                              발췌 : www.nuri.net

 


 *** DNS 설치 ***

기타 강의실로...