본문 바로가기

네임서버

[MyDNS] 웹으로 dns을 운영해 보자 mydns 설치

반응형

웹으로 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에 관한 정보는 다음 사이트에서 얻을 수 있다.

http://cr.yp.to/djbdns.html

 

# 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를 운용하는 방법, 외부 캐싱서버로 활용하는 방법등은 좀 더 설명이 필요하다.

 

 

 

728x90
반응형