다음 이전 차례

3. 캐시 전용 네임 서버(Caching only name server)

DNS 설정의 첫 단계로 다이얼업 사용자에게 매우 유용하다.

캐시 전용 네임 서버(Caching only name server)는 네임 쿼리의 응답을 찾은 후 기억해 두었다가 다음 번에 필요할 때 곧 바로 응답한다. 특히, 접속 회선이 느린 경우에는 기다리는 시간을 상당히 줄여 줄 것이다.

우선 /etc/named.conf 파일이 필요하다. named가 시작하면서 이 파일을 읽어 들인다. 당장은 단순히 아래와 같이 편집하도록 하자.


// Config file for caching only name server

options {
        directory "/var/named";

        // Uncommenting this might help if you have to go through a
        // firewall and things are not working out:

        // query-source port 53;
};

zone "." {
        type hint;
        file "root.hints";
};

zone "0.0.127.in-addr.arpa" {
        type master;
        file "pz/127.0.0";
};

`directory'는 파일을 어디에서 찾아야 하는지 named에게 알려 준다. 이후 나오는 파일들은 모두 이 디렉토리에 대한 상대 경로이다. 그러므로 pz/var/named 디렉토리의 하위 디렉토리이다. 즉, /var/named/pz이다. /var/namedLinux File system Standard에 명시된 디렉토리이다.

/var/named/root.hints라는 파일의 이름을 여기에 적어 준다. /var/named/root.hints 파일의 내용은 다음과 같다.


.                       6D IN NS        G.ROOT-SERVERS.NET.
.                       6D IN NS        J.ROOT-SERVERS.NET.
.                       6D IN NS        K.ROOT-SERVERS.NET.
.                       6D IN NS        L.ROOT-SERVERS.NET.
.                       6D IN NS        M.ROOT-SERVERS.NET.
.                       6D IN NS        A.ROOT-SERVERS.NET.
.                       6D IN NS        H.ROOT-SERVERS.NET.
.                       6D IN NS        B.ROOT-SERVERS.NET.
.                       6D IN NS        C.ROOT-SERVERS.NET.
.                       6D IN NS        D.ROOT-SERVERS.NET.
.                       6D IN NS        E.ROOT-SERVERS.NET.
.                       6D IN NS        I.ROOT-SERVERS.NET.
.                       6D IN NS        F.ROOT-SERVERS.NET.

G.ROOT-SERVERS.NET.     5w6d16h IN A    192.112.36.4
J.ROOT-SERVERS.NET.     5w6d16h IN A    198.41.0.10
K.ROOT-SERVERS.NET.     5w6d16h IN A    193.0.14.129
L.ROOT-SERVERS.NET.     5w6d16h IN A    198.32.64.12
M.ROOT-SERVERS.NET.     5w6d16h IN A    202.12.27.33
A.ROOT-SERVERS.NET.     5w6d16h IN A    198.41.0.4
H.ROOT-SERVERS.NET.     5w6d16h IN A    128.63.2.53
B.ROOT-SERVERS.NET.     5w6d16h IN A    128.9.0.107
C.ROOT-SERVERS.NET.     5w6d16h IN A    192.33.4.12
D.ROOT-SERVERS.NET.     5w6d16h IN A    128.8.10.90
E.ROOT-SERVERS.NET.     5w6d16h IN A    192.203.230.10
I.ROOT-SERVERS.NET.     5w6d16h IN A    192.36.148.17
F.ROOT-SERVERS.NET.     5w6d16h IN A    192.5.5.241

이 파일은 인터넷의 루트 네임 서버들을 지정하고 있다. 바뀌는 경우가 있으므로 잘 관리하여야 한다. 최신으로 유지하는 방법은 유지 보수 절를 참고한다.

그 다음은 이 파일의 마지막 존(zone)이다. 사용법은 다음 장에서 설명하기로 하고 지금은 그냥 pz 디렉토리에 127.0.0 파일을 만든다.


@               IN      SOA     ns.linux.bogus. hostmaster.linux.bogus. (
                                1       ; Serial
                                8H      ; Refresh
                                2H      ; Retry
                                1W      ; Expire
                                1D)     ; Minimum TTL
                        NS      ns.linux.bogus.
1                       PTR     localhost.

/etc/resolv.conf 파일을 다음과 같이 편집한다.


search subdomain.your-domain.edu your-domain.edu
nameserver 127.0.0.1

`search'는 사용자가 호스트 명만 입력한 경우에 검색할 도메인을 지정한다. `nameserver'는 사용할 네임 서버를 나타낸다. 이 경우에는 네임서버를 직접 운영하므로 사용자 컴퓨터의 IP 주소를 적는다. (127.0.0.1을 적어 주면 문제가 없다. 사용자 컴퓨터에 다른 IP 주소가 없는 경우에도 문제없이 작동한다.) 네임 서버를 여러 개 사용하려는 경우에는 `nameserver' 라인을 여러 라인 두면 된다. (참고:Named는 이 파일을 읽지 않는다. named를 이용하는 resolver가 이 파일을 사용한다.)

이 파일의 작동 방식: 클라이언트가 foo를 조회하는 경우 먼저 foo.subdomain.your-domain.edu를 찾는다. 다음으로 foo.your-fomain.edu를 찾고 마지막으로 foo를 찾는다. 클라이언트가 sunsite.unc.edu를 조회하는 경우에는 먼저 sunsite.unc.edu.subdomain.your-domain.edu을 찾는다. (물론 멍청하긴 하지만 이렇게 동작한다.) 다음으로 sunsite.unc.edu.your-domain.edu를 찾고 마지막으로 sunsite.unc.edu를 찾는다. search 라인에 도메인이 너무 많은면 검색 시간이 꽤 길어지게 되므로 search에 도메인을 많이 두지 않는 것이 좋다.

이 예에서 사용자가 속한 도메인이 subdomain.your-domain.edu라고 가정한다. 그러면 사용자의 컴퓨터는 your-machine.subdomain.your-domain.edu가 될 것이다. `search' 라인에 자신이 속한 도메인의 TLD(Top Level Domain, 여기서는 `edu')이 포함되지 않도록 주의한다. 다른 도메인에 속한 호스트에 자주 접속을 한다면 다음처럼 `search'에 계속해서 추가하는 것도 나쁘지는 않다.


search subdomain.your-domain.edu your-domain.edu other-domain.com

예와 똑같이 설정하지 말고 각자 실제로 사용하는 도메인 명을 명시한다. 도메인 명의 끝에 점(period)이 없다는 것에도 유의한다.

다음 단계는 libc의 버전에 따라 약간 달라지는데, /etc/nsswitch.conf 또는 /etc/host.conf 파일을 편집한다. 복잡하게 생각할 것 없이 현재 컴퓨터에 nsswitch.conf라는 파일이 있으면 그 파일을 편집하고, 없으면 host.conf 파일을 편집한다.

/etc/nsswitch.conf

이 파일은 약간 긴 파일로 어떤 파일이나 데이타베이스로부터 여러 종류의 정보(호스트 명, 암호, 쉐도우 암호, 그룹 정보, 알리아스 정보 등)를 얻어 와서 사용할 것인지를 지정한다. 보통 파일 시작 부분에 도움말이 있으므로 읽어 보면 편집하는 데에 도움이 된다. 지금 당장 읽어 보기 바란다. `hosts:로 시작하는 라인을 찾아 보자. 다음과 같은 라인이 있으면 정상이다.


hosts:      files dns

`hosts:'로 시작하는 라인이 없는 경우에는 위와 같이 추가하도록 한다. 프로그램이 주소를 조회할 때 먼저 /etc/hosts 파일을 검사하고 그 파일에서 찾지 못하는 경우 resolv.conf에 명시된 DNS에서 주소를 찾는다.

/etc/host.conf

이 파일은 보통 여러 라인으로 구성되는데, order로 시작하는 라인이 있어야 한다. 일반적으로는 아래와 같다면 정상이다.


order hosts,bind

`order'로 시작하는 라인이 없는 경우에는 위의 라인을 삽입한다. 먼저 /etc/hosts 파일을 찾아 보고 없으면 네임 서버(resolv.conf 파일에서 127.0.0.1로 지정하였다)에서 주소를 찾는다는 의미이다. 리눅스 배포판에는 대부분 이 두 파일을 resolv(8) 맨페이지(`man 8 resolv'를 실행해 본다.)에서 설명하고 있다. That man page is IMHO readable, and everyone, especially DNS admins, should read it. Do it now, if you say to yourself "I'll do it later" you'll never get around to it.

3.1 named 실행

이제 named를 싱행하면 된다. 전화 접속 사용자인 경우에는 우선 전화를 걸어 접속을 하도록 한다. `ndc start'를 입력하고 엔터를 누른다. 다른 옵션은 필요 없다. 잘 안돼면 `/usr/sbin/ndc start'를 실행한다. 그래도 이상하다면 qanda 절을 참고한다. 이제 정상적으로 작동하는지 시험해 보자. named가 시작하는 동안 message 파일의 내용을 살펴 보자. 보통 messages 파일은 /var/adm/messages 파일이지만, 경로가 /var/log인 경우가 있으며, 파일명이 syslog인 경우도 있다. tail -f /var/log/messages 명령으로 내용을 확인할 수 있는데, 확인 결과가 아래와 같다면 정상이다.

(`\'는 다음줄과 연결 되었음을 뜻한다.)

Feb 15 01:26:17 roke named[6091]: starting.  named 8.1.1 Sat Feb 14 \
  00:18:20 MET 1998 ^Ijanl@roke.uio.no:/var/tmp/bind-8.1.1/src/bin/named
Feb 15 01:26:17 roke named[6091]: cache zone "" (IN) loaded (serial 0)
Feb 15 01:26:17 roke named[6091]: master zone "0.0.127.in-addr.arpa" \
  (IN) loaded (serial 1)
Feb 15 01:26:17 roke named[6091]: listening [127.0.0.1].53 (lo)
Feb 15 01:26:17 roke named[6091]: listening [129.240.230.92].53 (ippp0)
Feb 15 01:26:17 roke named[6091]: Forwarding source address is [0.0.0.0].1040
Feb 15 01:26:17 roke named[6092]: Ready to answer queries.

에러 메시지가 보이면 중간에 뭔가 실수가 있다는 뜻이다. 설정할 때 실수한 파일명(named.conf나 root.hints일 것이다)을 named가 보여 줄 것이다. named를 죽이고 그 파일을 점검한다.

이제 nslookup으로 named가 정상적으로 작동하는지 점검할 차례이다.

$ nslookup
Default Server:  localhost
Address:  127.0.0.1

>

위와 같다면 제대로 된 것이다. 그러기를 바란다. 그렇지 않다면 처음부터 다시 검사한다. named.conf를 수정할 때마다 ndc restart 명령으로 named를 재시작시켜야 한다.

이제 쿼리를 입력할 수 있다. 근처에 있는 컴퓨터를 찾아 보자. Oslo 대학에 있는 pat.uio.no가 저자에게는 pat.uio.no가 가깝다.

> pat.uio.no
Server:  localhost
Address:  127.0.0.1

Name:    pat.uio.no
Address:  129.240.130.16

nslookup이 여러분이 설정한 named에게 pat.uio.no 컴퓨터를 찾도록 요청했다. 그래서 named는 root.hints 파일에 있는 네임 서버 중 하나에 접속한 후 그 응답을 받았다. /etc/resolv.conf에 써 넣은 도메인들을 모두 검색하기 때문에 그만큼 시간이 걸릴 것이다.

똑같은 요청을 다시 한다면 다음 처럼 보일 것이다.

> pat.uio.no
Server:  localhost
Address:  127.0.0.1

Non-authoritative answer:
Name:    pat.uio.no
Address:  129.240.2.50

`Non-authoritative answer:' 라인에 유의하자. 이 라인은 외부로 나가지 않고 대신 캐시를 검사하여 찾아 왔음을 뜻한다. 그러나 캐시에 남아 있는 정보는 오래되어 실제로는 변경된 경우도 있다. 그래서 경고의 뜻으로 `Non-authorative answer:'를 보여 준다. 어떤 호스트에 대해 두 번째 질의했을 때 nslookup이 이 메시지를 보여 준다면, named가 정보를 캐시에 저장하였다가 사용한다는 뜻이다. 즉, 정상적으로 작동한다는 뜻이다. `exit을 입력하여 nslookup을 종료한다.

이제 캐시 전용 DNS(Caching Only DNS) 설정 방법을 알았다. 자축하는 뜻으로 맥주나 우유를 한 잔하는 건 어떨까?


다음 이전 차례