1. DNS 개요

 

  인터넷을 사용하다 보면 도메인, URL이라는 말을 많이 듣는다.

  도메인, URL이란 것은 숫자로 구성되어 서버마다 부여되어있는 IP address를 사람들이 외우기 쉽고

  알기쉬운 문자로 표현한 것이다.

  (ex: 211.239.151.21 -> manpage.co.kr)


  그렇다면 DNS란 무엇인가?

  바로 IP를 도메인(URL)으로 매핑시켜주는 역할을 하는 것이 바로 DNS(Domain Name Server)이다. 이 DNS가 없다면 우리들은 숫자로 (211.239.151.21) 인터넷의 서버에 접속을 해야 할것이다.

  그러면 여기서 우리가 manpage.co.kr이란 URL을 웹 브라우저에서 입력을 했을때 과연 어떻게 그 manpage.co.kr의 서버로 접속을 할수 있는지 간단히 알아보자.


  <그림 1-1 도메인으로 웹서버 접속하기>


  그림을 설명하면

  1) www.manpage.co.kr 를 ROOT 서버에 질의

  1-1) ROOT 서버로부터 kr서버의 IP와 kr서버로 질의하라고 답변옴

  2) kr서버에 www.manpage.co.kr 질의

  2-1) kr서버로부터 co서버의 주소를 얻음

  3) co서버에 www.manpage.co.kr 질의

  3-1) ns.manpage의 서버 주소를 얻음

  4) ns.manpage서버로 www의 주소를 질의

  4-1) ns.manpage로부터 www의 IP주소를 얻음


  이렇게 함으로써 비로소 서버가 해석할수 있는 IP주소를 얻게되고, 웹브라우저를 통해서 원하는 웹페이지로의 접속이 가능하게 되는것이다.

 

  다음은 DNS(Domain Name Server)를 직접 구축하는 경우에만 살펴보면 될것이다. DNS를 직접 운영하지 않는 사람은 참고만 하기 바란다.


1.1 네임서버 운영 절차

 

< 그림 1-2 네임서버 운영 절차 >


  <그림 1-2>는 호스트웨이에서 서버호스팅을 신청하여 IP를 발급받은후 그 IP를 도메인을 등록한 기관에 네임서버 등록을 의뢰하고, 네임서버로 등록이 되면, 서버에 bind를 세팅하여, 네임서버로 운영하는 절차를 나타낸 그림이다.

  (네임서버등록을 예전에는 .com의 경우 외국 기관(networksolution.com)에 직접 등록을 하여야 했으나 요즘은 자신이 도메인을 등록한 기관에서 대행해주고 있다.)


1.2 DNS 설정

 

< 그림 1-3 DNS설정을 위한 파일 >


  <그림 1-3>은 DNS 설정을 위해서 설정해야 하는 파일들이다.

  순서대로 알아보자.

   1.2-1 /etc/host.conf

     - host.conf는 resolver의 제어를 위한 파일이다. 호스트를 resolver 하는데 어떤 서비스 파일을

       쓸것인 결정하는 파일로서 order로 순서를 결정할수 있다.

 

< 그림 1-4 /etc/host.conf의 내용 >


  <그림 1-4> 는 /etc/host.conf의 기본 설정이다.

  /etc/host.conf에는 여러개의 옵션이 있으며 그 옵션에 대해서 알아보자.

 

옵  션

설       명

order

  설정값으로는 hosts, bind, nis 가 있으며,

  hosts - resolver하는데 /etc/hosts 파일을 사용. 속도가 빠름

  bind - named가 동작하고 있을때, named에 의해서 질의할수있도록 설정

  nis - nis 가 동작하고 있을때 nis에 질의하도록 절정

multi

  설정값으로 on과 off가 있으며, /etc/hosts 파일에 하나의 호스트가 여러개의  

  IP를 가질수 있도록 허용한다. “multi-home"을 가질때 추천한다.

nospoof

  설정값으로 on과 off가 있으며, on으로 설정시에 DNS는 hostname과 IP를     

   검사하는데 만약 이 두값이 서로 일치하지 않을때,

  이를 ‘spoof'라고 부르며, 서버는 그 name을 받아들이지 않고 거절하며,

  error를 return한다. on으로 설정시에는 spoof를 막을수 있지만, 이 기능을

  켜놓게 되면 서버에 접속할 때 마다 값을 비교해야 하므로 서버에 접속할수 

  있는 시간이 지연되는 단점이 있다. 보안상 필요하면 on으로 선택, default는

  off이다.

trim

  설정값으로 domain 이름을 가지며, 로컬에 여러개의 도메인이 있을때 당신의

  호스트를 결정하기 위해서 사용되어질수 있다. /etc/hosts와 같은 기능을 한다.

  기본값은 off이다.

< 표 1-1 /etc/host.conf 옵션 >


 

< 그림 1-5 /etc/host.conf 의 설정을 적용한 모습 >


  <그림 1-5>와 같은 설정은 절대적인 것이 아니며, 관리자는 옵션의 의미를 잘 판단한후에 적용하여 사용하면 되겠다.

  일반 default값인 order hosts,bind 만을 사용해도 운영에는 전혀 지장이 없다.


  1.2-2 /etc/hosts

    서버에 접속되어지는 모든 클라이언트 들은 모두 DNS에 의해서 reslove 되어진다.

    resolve를 위해서는 자신의 DNS를 검색하고, 자신에게 그것이 없을때에는 상위 DNS에 질의를 해야

    하므로 접속을 하는데 시간이 많이 걸리게 된다. (tcpwrapper 에 의해서 설정되어지는 데몬들은

    (ssh나 pop, ftp등) 접속되는 IP를 모두 inverse reslove 하여, 호스트네임을 알아낸후에 로그에 기록

    을 하므로, 확인을 위해서 서버에 접속되어지는 시간이 길어지는 것은 그 이유이다) 이때, 자주 접속

    하는 IP들을 /etc/hosts 에 기록해놓으면, DNS에 의해서 resolve 되지 않아도 되므로, 훨씬 접속이

    빠르게 된다.


    설정법은 다음과 같다.

 

IP_address canonical_hostname aliases

===============================

IP주소     정규 호스트명      별칭

===============================

      IP주소        별칭


 

< 그림 1-6 /etc/hosts 파일 설정 >


  <그림 1-6>은 /etc/hosts 파일의 설정 예를 보여준 그림이다.

  그림에서 보듯이 211.239.151.21과 211.115.223.198은 해당 접속시에 DNS에 의해서 resolve가 되지 않으므로 접속 속도가 빠르며, 로그에는 manpage.co.kr, kimhoon 등으로 로그가 남게 된다.


1.2-3. /etc/named.conf

  /etc/named.conf는  /var/named 디렉토리의 경로와 zone파일 설정 정보를 가지고 있다.

 

< 그림 1-7 /etc/named.conf의 option과 logging설정 >

 

  <그림 1-7>은 /etc/named.conf의 option과 logging 설정 부분이다.

  options를 간단히 설명하면

    - directory "/var/named" : zone파일들이 있는 디렉토리의 경로이다.

    - allow-transfer { none; }; : 2차 DNS 서버가 있을때 사용하는 옵션으로 zone의 transfer를 허용할

                                               것인지 안할것인지 결정한다. 2차가 없을때에는 none 값으로 다른 호스

                                               트로의 transfer를 차단한다.

    - allow-query { localhost; }; : 일반적인 쿼리를 DNS 보낼수 있는 호스트를 지정한다.

                                                   “211.239.151.0/24” 로 네트웍대역을 지정할수도 있고, 특정 아이피

                                                    만을 지정할수도 있다. 현재 설정으로는 localhost에서만 query가

                                                    가능하도록 설정했다.


   - allow-recursion { localhost; }; : 순환 질의를 할수 있는 호스트를 정의한다. 보안에 관한 부분으

                                                        로, 인터넷에 있는 모든 호스트들이 해당 서버를 통해서 순환 질

                                                        의를 하게되면, 캐싱에 문제가 발생할수 있다. 관리자의 설정에

                                                         따라 allow-query처럼 값을 변경할수 있다.

   - version "Go away! no view!!"; : bind의 버전을 감춘다. bind가 취약한 버전이라고 알려졌을 경우

                                                     공격받을수 있으므로 보안상 설정하는 부분이다.

  logging을 설명하면,

  각종 시스템에서 발생하는 관련 에러들을 필요없는 로그들로 간주하고, null 시킴으로써, syslog의 부하를 감소시킬수 있다. 각 로그가 기록되길 원하면 해당 라인을 삭제 하면 된다.


 

< 그림 1-8 /etc/named.conf의 zone-file설정 >


   /etc/named.conf에서 나머지는 모두 디폴트로 사용하지만, < 그림 1-8> 1과 2는 네임서버 사용을 하기 위해서 반드시 설정을 해줘야 하는 부분이다. 그중에서 1번의 resolve-zone파일의 경우는

  각서버에 한번만 설정이 되어야 하며, 하나 이상이 설정되었을경우에는 에러가 발생한다.

  2번은 resolve할 도메인을 하나씩 추가할때마다, 반복적으로 설정이 되어야 하는 부분이다.

  반복될 때에는 해당 도메인의 이름과 존파일의 이름정도만 변경한후에 그대로 사용하면 된다.


< 그림 1-9 /etc/named.conf의 도메인 추가설정 >


   /etc/named.conf에 도메인이 등록이 되면, /var/named 디렉토리 밑에는 <그림 1-9>에서 밑줄친

  이름으로 zone 파일이 존재 해야 한다. ( /var/named/zone-hostway.co.kr )

  이것은 저절로 생성되는 것이 아니라 직접 만들어야 하는 것이다.


1.2-4. /etc/resolv.conf

  서버는 user가 어떤 도메인에 대해서 요청을 했을때 그것을 해석하기 위해서 자신에게 할당된 주 네임서버를 찾게 되며, 그 네임서버를 정의하는곳이 resolv.conf 이다.

  resolv.conf에 있는 주 네임서버는 user가 요청한 도메인이 자신이 가지고 있는 (named.conf에 설정된)  도메인이면, 바로 응답을 해주고, 만일 자신이 가진 도메인이 아니면 최상위 루트에게 질의를 하여 해당 도메인의 IP를 받아와 클라이언트에게 알려주는 역할을 한다. ( 그림 1-1 참고)


  /etc/resolv.conf에는 3개까지의 nameserver를 지정할수 있다.

 

< 그림 1-10 /etc/resolv.conf의 설정화면 >


  지정한 옵션에 대해서 알아보도록 한다.

  -search : 가장 먼저 찾을 도메인을 지정한다.

                  ( search manpage.co.kr 또는 search co.kr com 등의 설정도 가능한다. search가 없어도 상관은 없다.)

  -nameserver : 네임서버로 사용할 서버의 IP를 적어준다.

                         만약 호스트 웨이로부터 211.239.151.21 IP를 할당받아 이 IP를 네임서버로 쓴다면,

                         /etc/resolv.conf의 search 다음라인에 nameserver 211.239.151.21 이라고 우선

                        으로 적어주면, 설정한 네임서버가 여러개 있을때  클라이언트가 도메인을 요청하면,

                        가장 먼저 211.239.151.21의 네임서버에서 클라이언트가 요청한 도메인을 검색하게 된

                        다. 만약 없다면 그 다음 설정한 네임서버에서 요청한 도메인을 검색하게 된다.


   <그림 1-10>으로 예를 든다면, 211.239.150.9번 네임서버에서 클라이언트가 요청한 도메인을 우선적으로 찾고, 만약 없다면, 211.239.150.7 네임서버에 질의하게 된다. 만약 211.239.150.7네임서버에서도 없으면 그때는 root 네임서버로 질의를 하게 된다. (168.126.63.1은 주석으로 처리되어 있으므로 해석하지 않는다.


  만약 /etc/resolv.conf에 올바른 네임서버가 설정되어있지 않다면, 서버는 도메인으로 외부의

  호스트를 검색, 접속할수 없게된다.

  ※ 참고

  서버의 내/외부에서 IP로는 접속이 가능한데, 도메인으로 접속이 불가할때는 네임서버를 가장 먼저 의심해 봐야 한다.

 

1.2-5. /var/named/zone파일 생성

   지금까지의 named 설정은 zone파일의 생성을 위한 준비 단계였다고 볼수있다.

   zone file을 생성해야지만 비로소 named서버로서의 역할을 할수 있는것이다.

  

< 그림 1-11 /var/named/의 zonefile 생성 예 >


   < 그림 1-11>은 zone file의 생성 예이다.


   zone 파일의 각 레코드의 설정에 대한 설명을 한다.

레코드 설정값

설명

$TTL 86400

  zonefile 정보의 TTL 시간을 지정한다. 특정 레코드가 변경 되었을

  때, 변경된 값이 인터넷에 전파되어 업데이트 되는 주기이다. 업데이

  트가 잦은 사이트는 이 값을 1시간에서 ~ 3시간 정도로 설정한다.

SOA (Start Of Authority)

  해당 존파일 도메인에 대한 네임서버 인증 정보를 가지고 있다.

  이 레코드의 값은 second nameserver가 있을때에만 유효하고

  primary nameserver만 있을 경우에는 필요없는 정보이다

@

  같은 네임서버를 의미하면 네임서버 대신에 @를 사용해도 된다.

IN

  IN(internet)은 클래스명이다. (chaos 등의 여러 클래스가 있지만 주

  로 IN만을 사용한다)

SOA

  SOA (Start Of Authority) 도메인에 대한 인증정보 시작을 의미

ns.manpage.co.kr.

  해당 존파일의 네임서버를 명시

admin.manpage.co.kr.

  해당 네임서버의 관리자 이메일을 지정 ( = admin@manpage.co.kr)

2003042100

  Serial로서 존파일이 최종 갱신된 date를 나타낸다. secondary는 자

  신이 가진 Serial이 primary의 것보다 작다면 primary로부터 zone

  파일을 재전송 받는다.

32400

  Refresh로서 secondary에서 primary의 존파일 변경 여부를 검사

  하는 주기이다. (6시간)

3600

  Retry로서 secondary에서 primary로 연결이 되지 않을때 재시도 하

  는 주기이다. refresh 주기보다 작아야 의미가 있다.

1205600

  Expire로 지정된 시간동안 primary에 연결을 하지 못할경우에, 현재

  가지고 있는 정보가 유효하지 않다고 판단하고, 해당도메인에 대한

  응답을 하지 않는다.

247200

  Minimum으로 다른 네임서버가 자신의 zone에 기술된 자료를 가지

  고 갔을경우, 그 자료에 대한 유효기간을 설정한다. 이 값은 zone파

  일 상단에 표시된 TTL값을 대치할수 있으며, TTL값이 설정되어 있

  으면, 이 설정은 유효하지 않다. TTL과 동일한 기능을 한다.

NS

  NS(nameserver)레코드, NameServer를 지정한다.

A

  A(Address)레코드, 도메인에 IP를 부여하는 역할을 한다.

CNAME

  CNAME(Canonical Name) 레코드, 도메인에 대한 다른 이름을 지정

  할수 있다.

  hostway    IN   A   66.232.139.10

  만약 hostway sub 도메인 가도록 설정한 레코드를 A 레코드로 설정

  을 해놓았을 경우에는 hostway.co.kr 의 IP가 변경되었을 경우, zone

  파일을 변경시켜줘야 하지만

  hostway    IN   CNAME  hostway.co.kr.

  CNAME으로 설정해 놓으면 IP가 바뀌더라도, zone 파일을 변경할

  필요가 없이 그대로 사용하면 된다. 단 CNAME은 실제 도메인의 레

  코드를 상속받기 때문에 추가 레코드를 가질수 없으며, MX, NS등의

  레코드에 CNAME으로 설정된 도메인을 넣어서는 안된다. 자신의 서

  버에서 다른서버로의 포팅이 없다면, CNAME은 사용하지 않는 것이

  좋다.

MX

  MX(Mail eXchanger) 레코드, 해당 도메인의 메일 라우팅 경로를 설

  정한다

PTR

  PTR(PoinTeR) 레코드, 이 레코드는 IP에 대해 도메인명을 맵핑해

  주는 역할을 한다.

  일반적인 존파일에서는 사용하지 않고 reverse zone 파일에서만 사

  용한다.

< 표 1-1 zone file의 레코드 설정 >


< 그림 1-12 /var/named/의 reverse zonefile 생성 예 >


  <그림 1-12> PTR레코드를 사용한 reverse Zone파일의 예이다.



1.3 nameserver 질의 명령


1.3-1 nslookup을 통한 도메인 네임검색

  사용법

  nslookup -type=RR(Resource Record) domain or set type=RR domain

  RR에는 A, ANY, CNAME, MX, NS, PRT, HINFO, SOA, TXT 등이 검색 옵션이 올수 있다.

 

< 그림 1-13 nslookup 명령 사용하기 >


  <그림 1-13>은 nslookup 명령을 실행하여 set type=NS 로 nameserver에 질의한 결과이다.

  그림에서 알수있듯이 manpage.co.kr은 nameserver로 ns5.cninet.co.kr을 사용하고 있음을 알수가 있다. ( 쉘명령으로 다음과 같이 하면 같은 결과를 얻는다. nslookup -type=NS manpage.co.kr )


1.3-2 dig

  <그림 1-13>에서 nslookup을 입력했을때 나오는 공지는 “앞으로 nslookup명령은 사라지게 되고, dig 또는 host명령이 대신하게 될것이다.” 라는 내용이다.

  즉 앞으로는 dig 또는 host 명령을 잘 알아두어야 할것이다.


  사용방법 및 옵션들

  dig [@nameserver] 도메인 [쿼리타입] [+쿼리옵션]

dig  [ @server ]  [ -b address ]  [ -c class ]  [ -f file-name ]

     [ -k filename ]  [ -p port# ]  [ -t type ]   [  -x addr  ]

     [ -y name:key ]  [ name ]  [ type ]  [ class ]  [ queryopt... ]


  ex))dig @ns.manpage.co.kr www.manpage.co.kr A

  예와 같은 명령의 내용은 ns.manpage.co.kr의 네임서버에 www.manpage.co.kr의 A Record 설정 상태를 출력하라는 명령이다. 결과는 다음과 같다.

www.manpage.co.kr.      3600    IN      A       211.239.151.21


  아래 그림은 dig의 또다른 옵션으로 다른 서버의 bind version을 확인하는 방법이다.

<그림 1-14 dig 명령을 이용한 다른서버의 bind버전 확인>

   

1.3-3 host

dig와 같이 앞으로 많이 쓰이게 될 nameserver 질의 명령이다.

옵션의 종류와 사용법은 다음과 같다.


host [ -aCdlnrTwv ]  [ -c class ]  [ -N ndots ]  [ -R num-ber ]  [ -t type ]

    .[ -W wait ]  name [ server ]

  ex)) host -t ns manpage.co.kr

< 그림 1-15 host 명령 사용예 >


지금까지 네임서버 구축과, 네임서버에 대한 질의 방법을 알아보았다.

이것은 네임서버를 구축하고, 네임서버의 동작유무, 설정의 올바름을 판단하는데 중요한 것이므로

직접 네임서버를 운영하고자 하는 관리자는 반드시 알아두어야 할것이다.