출처 : http://eady.sarang.net/stories.php?story=01/07/07/8950292

오랜만에(?)DNS를 공부좀 해볼까해서 자료를 찾다가 발견한 글입니다
-------------------------------------------------------------------------
djbdns를 이용한 DNS 서버 구축

II. Install djbdns

1. Download source code

1.1. Pre-Requirement
djbdns를 구동시키기 위해서는 다음과 같은 추가적인 package가 필요하다

1. daemontools (http://cr.yp.to/daemontools.html) : djbdns를 start, monitor, contol 하는 tool
2. ucspi-tcp (http://cr.yp.to/ucspi-tcp.html) : axfrdns, axfr-get 을 구동시키는 tool

1.2. Sourcecode download
Download the djbdns from (http://cr.yp.to/djbdns/djbdns-1.05.tar.gz)

2. Compile and install
참고로 ucsip-tcp, daemontools, djbdns 는 기본적으로 /usr/local/bin 아래 설치가 된다.
설치 위치를 바꾸고자 한다면, 소스코드중에 /conf/home 화일을 편집한다

2.1. Unpack distribution
# tar -xvzf djbdns-1.05.tar.gz
# tar -xvzf ucspi-tcp-0.88.tar.gz
# tar -xvzf daemontools-0.70.tar.gz

2.2. Install ucspi-tcp
# cd ucspi-tcp-0.88
# make
# make setup check

2.3. Install daemontools
# cd ../daemontools-0.70
# make
# make setup check

2.4. Install djbdns
# tar -xvzf djbdns-1.05.tar.gz
# cd djbdns-1.05
# make
# make setup check

어떤가? 설치는 무진장 쉽지 않은가?
하지만 문제는 세팅이다. 하지만 기본만 이해하면 쉬우니까, 걱정하지는 말자

III. Using daemontools and ucspi-tcp

1. Introducion

필자의 경우는 항상 djbdns를 qmail과 항상 함께 사용하였다.
qmail 역시 위에서 설치한 daemontools에 의해 구동이 된다.
간단하게 daemontools에 대해 설명하자면 다음과 같다.

daemontools의 기초적인 패키지는 supervise 프로그램이다. 이 프로그램은 프로세스를 구동시키고
모니터링 해주는 역활을 한다. daemontools에 의해 구동된 프로세스는, daemontools가 감시를 하고
있다가, 프로세스가 다운이 되면 daemontools가 다시 구동을 시켜준다. 고로 절대 죽지 않는다.

2. Using daemontools

2.1. supervise program
앞에서 소개했듯이 supervise프로그램은 background process로 구동되는 프로그램들을
monitoring 하고, 만약 process가 죽으면, 그것을 다시 구동시켜준다.
사용법은 다음과 같다.

Usage: supervise service

여기서 argument인 service는 구동할 프로그램의 startup script가 있는 디렉토리의 pathname 이다.
supervise 가 구동이 되면, supervise는 지정한 service 디렉토리에 supervise라는 디렉토리를 생성한다.
예를 들어 여러분이 /var/qmail/supervise/djbdns 라는 디렉토리에 djbdns의 구동 스크립트를 생성하고
다음과 같이

# supervice /var/qmail/supervise/djbdns

했다면 디렉토리 구조는 다음과 같다.

/var
-/qmail
-/supervice
-/djbdns
-run
-/supervise
-control
-lock
-ok
-status

보다시피, supervise 디렉토리가 생성이 되고, 그 이하에 3개의 화일이 생성되었다.
여기서 run은 우리가 생성한 구동하길 원하는 프로그램의 startup script 화일이다.

2.2. svscan program
svscan 은 여러개의 서비스를 supervise로 실행하고자 할때 쓰이는 편리한 프로그램이다. 우리들은 대부분
qmail, djbdns 와 같이 2개 이상의 프로그램을 supervise로 띄울것이므로, svscan을 사용하면 편리하다
사용법은 supervise와 비슷하다

Usage: svscan service

다음과 같은 예를 들어보자, 만약에 supervise로 qmail과 djbdns를 구동하기 원하는 경우에는

/var
-/qmail
-/supervice
-/qmail-smtpd
-run
-/qmail-send
-run
-/djbdns
-run

위와 같은 디렉토리 구조가 나올것이다. 보다시피 구동해야 하는 서비스는 qmail-smtpd, qmail-send, djbdns
이렇게 3개이다. 이것을 일일히 supervise로 구동을 하자면 다음과 같다.

# supervise /var/qmail/supervise/qmail-smtpd &
# supervise /var/qmail/supervise/qmail-send &
# supervise /var/qmail/supervise/djbdns &

3줄을 적어줘야 한다. 하지만 svscan 을 사용하면 다음과 같이 한줄로 적을수 있다.

# svscan /var/qmail/supervise &

IV. Using djbdns

필자는 이미 /var/qmail 이하에 qmail을 사용하고 있다는 가정하에서 설명을 한다.

1.1. Local DNS Cache
Local DNS Cache 를 운영하기 위해서는 dnscache, dnslog 계정이 필요하다
# useradd -M -g qmail -d /var/qmail dnscache
# useradd -M -g qmail -d /var/qmail dnslog

이제 data 화일을 생성해 보자
# dnscache-conf dnscache dnslog /etc/dnscache
# ln -s /etc/dnscache /var/qmail/supervise

# vi /etc/resolv.conf에 다음줄을 추가
nameserver 127.0.0.1

이제 테스트를 해보자 pine과 같은 MUA로 메일을 보내고 log를 체크해 보자, 아마도 nslookup, dig와 같은 query가 보일것이다
# vi /var/qmail/supervise/dnscache/log/main/current

1.2. External DNS Cache
Local DNS Cache 를 운영하기 위해서는 dnscache, dnslog 계정이 필요하다
# useradd -M -g qmail -d /var/qmail dnscache
# useradd -M -g qmail -d /var/qmail dnslog

이제 data화일을 생성해 보자

# dnscache-conf dnscache dnslog /etc/dnscachex 1.2.3.4(your IP)
# ln -s /etc/dnscachex /var/qmail/supervise

기본적으로 dnscache는 remote host로부터의 query를 받아들이지 않는다
외부 호스트로 부터 query를 허용하려면

# touch /var/qmail/supervise/dnscachex/root/ip/1.2.3

이렇게 하면 1.2.3.* 호스트로부터의 query를 받아들인다

1.3. DNS Server
DNS Server 를 운영하기 위해서는 tinydns, dnslog 계정이 필요하다
# useradd -M -g qmail -d /var/qmail tinydns
# useradd -M -g qmail -d /var/qmail dnslog

tinydns-conf 툴로 service 디렉토리를 생성하자

# tinydns-conf tinydns dnslog /etc/tinydns 1.2.3.4(your IP)
# ln -s /etc/tinydns /var/qmail/supervise

1.3.1. add zone
# cd /var/qmail/supervise/tinydns/root
# ./add-ns linuxproject.co.kr 1.2.3.5
# ./add-ns 3.2.1.in-addr.arpa 1.2.3.5
# make

1.3.2. add host
# cd /var/qmail/supervise/tinydns/root
# ./add-host ns.linuxproject.co.kr 211.219.8.66
# ./add-host mail.linuxproject.co.kr 211.219.8.66

이렇게 자동으로 생성된 데이터는 /var/qmail/supervise/tinydns/root/data에 다음과 같이 기록이 된다
수동으로도 편집이 가능하다. 편집후에 make 명령으로 refresh 하는것을 잊지 않도록 하자

=ns.linuxproject.co.kr:211.219.8.66:86400

1.3.3. add alias host
아마도 대부분이 하나의 IP에 여러개의 host name을 사용하고 있을것이다
이러할 경우에는 alias를 사용한다.

# ./add-alias www.linuxproject.co.kr 211.219.8.66
# ./add-alias mail.linuxproject.co.kr 211.219.8.66
# make

1.3.4. add mx record

# ./add-mx linuxproject.co.kr 211.219.8.66
# make

아래와 같이 수동으로 편집 가능하다

@linuxproject.co.kr:211.219.8.66:mail.linuxproject.co.kr.:10
은 BIND의 다음과 같다
linuxproject.co.kr 86400 MX 10 mail.linuxproject.co.kr

1.3.5. check configuration
먼저 data 화일의 tinydns-data format을 체크한다

두번쨰로 data.cdb 화일을 아래와 같이 체크한다
# cd /var/qmail/supervise/tinydns/root
# tinydns-get a ns.linuxproject.co.kr

세번째로 tinydns 서비스가 제대로 올라와 있는지 체크한다
# svstat /var/qmail/supervise/tinydns
/var/qmail/supervise/tinydns/: up (pid 1694) 815 seconds

네번쨰로 packet 으로 체크를 한다
# cat /var/qmail/supervise/tinydns/env/IP
211.219.8.66

# dnsq a ns.linuxproject.co.kr 211.219.8.66

여섯번쨰로, DNS cache 체크
# dnsqr a ns.linuxproject.co.kr

1.3.6 Example

.linuxproject.co.kr:211.219.8.66::259200
.8.219.211.in-addr.arpa:211.219.8.66::259200
=linuxproject.co.kr:211.219.8.66:86400
+www.linuxproject.co.kr:211.219.8.66:86400
@linuxproject.co.kr:211.219.8.66:mail.linuxproject.co.kr.::86400

관련 링크: http://eady.sarang.net/stories.php?story=01/07/07/8950292

+ Recent posts