6. DNS Cache 설치

외부 네임 서버를 사용하지 않고 직접 dns cache를 운영할때의 장점은 내부망(또는 리눅스 박스 자체)이 요구하는 도메인 네임 resolving을 처리하고 이것을 캐쉬에 저장했다가 다음번 질의에 빠르게 응답할수 있기 때문이다.

dnscache는 BIND 와는 달리 cache 전용 데몬으로 유연한 설정과 더 빠른 응답 속도를 보인다. 특히 도메인을 가지고 있지 않으며 인터넷 공유의 용도로만 사용된다면 이것만 설치하면 된다 (이 경우 pdnsd[1]를 사용할수도 있다).

6.1. 서비스 디렉토리

dnscache 서비스 디렉토리는 dnscache-conf 를 사용하여 다음과 같이 만든다. 192.168.1.1 은 내부망에 연결된 ip 주소이다.

dnscache-conf dns dnslog /var/dnscache 192.168.1.1

6.2. 서비스 시작

svscan 으로 하여금 새로 만든 서비스를 시작하도록 /service에 링크를 걸어준다.

ln -s /var/dnscache /service

이제 5초 이내에 dnscache 데몬이 시작될 것이다.

6.3. 설정

이제 해당 네트워크로 부터의 질의에 응답하도록 파일을 하나 만들어 준다. 우리는 192.168.1.* 의 질의를 허용하도록 할것이므로:

touch /var/dnscache/root/ip/192.168.1

만약 접속을 허용할 네크워크 대역이나 IP가 더 있다면 같은 방법으로 설정해 주면된다.

6.4. resolv.conf 수정

마지막으로 리눅스 박스 자체가 dnscache를 사용하도록 /etc/resolv.conf 를 다음과 같이 수정한다.

nameserver 192.168.1.1

이제부터 192.168.1.x로 부터 들어오는 모든 도메인 resolving 쿼리에 응답하고 캐슁하게 되므로, 클라이언트들이 192.168.1.1을 네임서버로 사용하도록 설정을 수정한다. 로그는 /var/dnscache/log/main/current 에 남는다.

6.5. 캐쉬 메모리 조절

리눅스 박스 뒤쪽에 클라이언트가 매우 많고, 네임 resoving 처리를 매우 많이 하는 경우 dnscache가 사용할 cache 메모리를 더 늘려줄수 있는데 만약 10 Mbyte 정도를 사용하도록 할것이라면 다음과 같이 한다.

echo 10000000 > /service/dnscache/env/CACHESIZE
echo 10485760 > /service/dnscache/env/DATALIMIT

dnscache가 이미 실행중이라면 재시동한다.

svc -t /service/dnscache

6.6. 외부 DNS 캐쉬 사용하기

DNS Cache가 방화벽뒤에 위치하고 있으며 특정 DNS 서버로의 쿼리외의 UDP 패킷은 drop되도록 설정되어 있거나, 로컬 DNS Cache의 쿼리가 느려서 외부 DNS 서버를 사용하도록 하려면?

1.03 버전이후의 부터는 다음과 같이 할 수 있다.

echo 1 > /service/dnscache/env/FORWARDONLY

이제 루트 서버들의 IP가 적혀 있는 "/service/dnscache/root/servers/@"의 내용에 외부 DNS서버의 IP만을 적어준다. 이제 부터 dnscache는 resolve 요청이 있을때 답을 자신이 가지고 있지 않을때는 여기에 적어준 외부 DNS 서버에 쿼리하고 그 결과를 캐쉬, 응답하게 된다.

dnscache가 실행중이 였다면 재시작 해주어야 한다.

svc -t /service/dnscache

6.7. BIND와 dnscache를 같이 운영하기

다음장에서와 같이 dnscache는 DNS 서버와 동일한 서버에서 운영할 수 있으므로, 역시 BIND와도 같이 운영할 수 있다. 다음과 같이 BIND가 특정 IP에만 바인딩되도록 /etc/named.conf를 설정해 주면 된다. 예를 들어 IP 주소가 1.2.3.4라면:

options {
	interface-interval 0;
	listen-on { 1.2.3.4; };
};

BIND를 재시작한다.

주석

[1]

pdnsd 역시 caching 전용 서버로 캐쉬한 내용을 디스크에 저장해 놓거나 하는 등의 몇가지 재미있는 기능을 가지고 있다.