웹으로 dns을 운영해 보자 mydns 설치편
국내외에서 사용하는 거의 대부분의 네임서버는 BIND기반이다. 성능 및 안정성에서 이미 검증이 되었을 뿐만 아니라 사용하는 사람들이 많다 보니 관련 매뉴얼도 풍부해서 대부분의 시스템 관리자는 BIND기반의 네임서버를 운영 할 것이다
그러나 BIND이외에도 여러 훌륭한 네임서버들이 많이 있다. 윈도우에서 지원하는 Microsoft DNS Server, qmail 제작자인 D. J. Bernstein씨가 만든 djbdns 외에도 Simple DNS Plus, NSD, QuickDNS 등 다양한 DNS 서버가 개발 되었으나 BIND 이외에 딱히 시간을 들여 다른 DNS서버의 설치와 운영법을 익힐 필요는 없다고 생각한다.
그러나 다음과 같은 문제점이 있다면 mydns을 충분히 고려해 볼 만 하다고 생각한다.
1. 관리하는 도메인이 많다.
2. 네임서버 관리를 여러명이 해서 존파일의 일관성을 유지하기가 어렵다.
3. 네임서버 운영에 전문적인 지식이 없더라도 쉽게 존 파일을 수정하거나 추가 하게 하고 싶다.
4. 존파일을 DB에 저장해 두고 웹을 통해 네임 서버를 제어 하고 싶다.
5. 네임서버의 성능을 향상 시키고 싶다.
물론 BIND나 djbdns가 웹을 통해 제어 할 수 없는 것은 아니냐 하면 그런 것도 아니고 존파일 정보를 DB화 할 수 없는 것도 아니냐 하면 DB화가 가능하다. 그러나 구조적으로 이들 DNS 서버는 도메인 정보를 파일에 저장해 두고 서비스 하도록 설계 되어 있기 때문에 정보를 DB에 저장해 놓더라도 결국은 파일로 변환해야 하는 과정을 거쳐야 하며 이로인한 오버헤드도 시스템에 부담이 된다.
DB 기반의 DNS서버는 일반적으로 power dns와 mydns 두가지가 많이 사용된다. power dns 특징을 간단히 설명 한다면 mysql, 오러클을 비롯한 다양한 db을 지원하고 윈도우에서 설치 운영이 가능하며 처음부터 보안을 염두해 두고 개발된 고성능 dns 서버이다.(추천할 만하다)
사실 다양한 기능과 높은 성능으로 인해 power dns도 매력적인 dns임이 분명하나 처음부터 db를 mysql로 할 생각이어서 mydns를 선택하였다. mydns의 특징은 다음과 같다.
1. 심플하게 mysql 과 postgresql만 지원한다. (power dns는 여러가지 다양한 포맷을 지원한다.)
2. 가볍고 빠르다. (필요한 기능만 있다.)
3. 대용량 도메인 서비스에 필요한 충분한 기능과 성능을 제공한다.
4. 매우 쉽게 bind나 djbdns의 존 파일로 상호 변환이 가능하다.
5. 캐싱 기능을 지원하지 않는다.
그럼 이제부터 mydns를 설치해 보도록 하자. 운영체제는 CentOS 5.2를 선택 하였다. mydns는 캐싱 기능을 자체적으로 지원하지 않는다. 어찌보면 없는게 당연하다고 할 수 있다. Authoritative Server 와 Recursor 를 분리하는 것이 구조적으로 네임서버를 더욱 안전하게 운영 할 수 있기 때문이다. 하지만 여기서는 djbdns의 dnscache를 를 이용해 mydns에 캐싱기능을 넣을 생각이다.
djbdns는 기능에 따라 tinydns, dnscache, axfrdns로 나누어져 있다. 이중 캐싱 기능을 담당하는 dnscache는 캐싱 서버 중에서는 가볍고 BIND보다 훨등한 성능을 제공한다. 만약 dnscache를 쓰기가 꺼려 진다면 power dns를 사용하는 것도 하나의 방법이다.
캐싱 네임서버의 설치
djbdns에 관한 정보는 다음 사이트에서 얻을 수 있다.
# mkdir /usr/local/src/djbdns
# cd /usr/local/src/djbdns
# wget http://cr.yp.to/djbdns/djbdns-1.05.tar.gz
# wget http://qmail.kldp.org/src/patches/glibc-2.3.1/?id=1671
# cd /usr/local
# wget http://qmail.org/moni.csi.hu/pub/glibc-2.3.1/daemontools-0.76.errno.patch
# wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
daemontools를 설치한다.
# tar xvzf daemontools-0.76.tar.gz
# cd admin/daemontools-0.76
# patch -p1 < ../../daemontools-0.76.errno.patch
# ./package/install
dnscache 계정을 생성한다.
#useradd -M dns -s /sbin/nologin
#useradd -M dnslog -s /sbin/nologin
# cd /usr/local/src
# tar xvzf djbdns-1.05.tar.gz
# cd djbdns-1.05
# patch -p1 < ../djbdns-1.05.errno.patch
# make
# make setup check
# dnscache-conf dns dnslog /var/dnscache 127.0.0.1
# ln -s /var/dnscache /service
5초후에 서비스가 시작된다.
캐시기능이 잘 동작하는지 살펴본다.
nslookup naver.com 127.0.0.1
mysql 서버 설치
간단하게 yum으로 설치 한다.
# yum install mysql mysql-server mysql-devel
mydns 설치
# ./configure --with-openssl
# make
# make install
만약 mysql을 컴파일해서 설치 했다면 다음과 같이 설치 라이브러리와 헤더파일이 위치해 있는 디렉토리를 명시해 줘야 한다.
./configure --with-mysql-lib=/usr/local/mysql/lib/mysql --with-mysql-include=/usr/local/mysql/include/mysql --with-openssl
config 파일을 생성한다.
# mydns --dump-config > /etc/mydns.conf
시작 스크립트를 작성한다.
vi /etc/init.d/mydns
#!/bin/bash
#
# mydns This starts and stops mydns.
#
# chkconfig: 345 52 50
# description: A database-driven DNS server
#
# processname: /usr/local/sbin/mydns
# config: /etc/mydns.conf
# pidfile: /var/run/mydns.pid
prog=mydns
# Source function library.
. /etc/init.d/functions
PATH=/sbin:/bin:/usr/bin:/usr/sbin:/usr/local/sbin
export PATH
[ -f /usr/local/sbin/mydns ] || exit 1
[ -f /etc/mydns.conf ] || exit 1
RETVAL=0
start(){
echo -n $"Starting $prog: "
daemon $prog -b
RETVAL=$?
echo
touch /var/lock/subsys/mydns
return $RETVAL
}
stop(){
echo -n $"Stopping $prog: "
killproc $prog
RETVAL=$?
echo
rm -f /var/lock/subsys/mydns
return $RETVAL
}
restart(){
stop
start
}
condrestart(){
[ -e /var/lock/subsys/mydns ] && restart
return 0
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status $prog
;;
restart|reload)
restart
;;
condrestart)
condrestart
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|reload}"
RETVAL=1
esac
exit $RETVAL
db를 생성한다.
# mysql –p(나중에 mysql root패스워드는 꼭 설정해 줘야 한다.)
CREATE DATABASE webdns;
GRANT ALL PRIBILEGES ON webdns.* TO webdns@localhost IDENTIFIED BY 'mydns';
quit
mydns에 사용할 테이블을 생성한다.
#mydns --create-tables | mysql -uroot -p webdns
설정파일 수정한다.
# vi /etc/mydns.conf
db-host = localhost # SQL server hostname
db-user = webdns # SQL server username
db-password = mydns # SQL server password
database = webdns # MyDNS database name
# GENERAL OPTIONS
user = mydns # Run with the permissions of this user
group = mydns # Run with the permissions of this group
listen = dns서버아이피 # Listen on these addresses ('*' for all)
no-listen = 127.0.0.1 # Do not listen on these addresses
서버의 CPU를 여러 개를 쓰고 있으면 아래 옵션을 조정해 준다. 여러 개의 CPU가 나우어서
일을 처리한다.
multicpu = CPU 개수
퍼미션을 수정한다.
# chmod 400 /etc/mydns.conf
유저를 추가한다.
useradd -M mydns -s /sbin/nologin
mydns를 시작한다.
# /etc/init.d/mydns start
네임서버 설정을 127.0.0.1로 바꾸어 준다.
vi /etc/resolv.conf
nameserver 127.0.0.1 추가한다.
# nslookup google.co.kr
정상적으로 도메인 정보를 가져 오는지 확인한다.
일단 가장 기본적인 설치는 이것으로 끝이다. 그러나 mydns를 운용하는 방법, 외부 캐싱서버로 활용하는 방법등은 좀 더 설명이 필요하다.
'네임서버' 카테고리의 다른 글
bind zone 파일 IP 변경 스크립트 (0) | 2013.09.04 |
---|---|
네임서버 점검을 위한 일반적인 절차 (0) | 2013.09.03 |
DNS (Domain Name System)의 SOA (Start Of Authority) 레코드 (0) | 2013.09.01 |
[네임서버] 싱크홀(sinkhole) 사이트 (0) | 2013.08.14 |
[네임서버] 원도우 DNS 강좌 (0) | 2013.08.14 |