구축환경: Ubuntu 14.04LTS


Ubuntu에 DNS 서버 구축을 하기 위해, BIND9 소스 패키지를 빌드하여 설치하였다.


https://packages.ubuntu.com/trusty/bind9


먼저, BIND9의 소스 패키지는 위 링크에서 다운 받았다.

다운 받은 압축 파일을

tar -xvzf bind9_9.9.5.dfsg.orig.tar.gz

명령어를 사용해 압축 해제한 후, bind9-9.9.5.dfsg 디렉터리로 이동하여

./configure --without-openssl

명령어를 사용해 빌드에 필요한 프로그램을 확인했다. OpenSSL을 사용하지 않으려고 옵션을 주었다.

따로 필요한 프로그램은 없어 바로 빌드했다.

make

명령어를 이용하여 빌드를 한 후,

make install

명령어로 설치해주었다.


설치가 끝나면 /usr/local/sbin에 named를 비롯한 여러 BIND 9 라이브러리들의 실행파일이 생성되어,

명령어만 입력해도 프로그램들을 실행시킬 수 있다.


named로 DNS 서버를 켜기 전, 먼저 DNS 서버를 설정해야한다.

http://zytrax.com/books/dns/ch7/

위 링크를 참고하여 설정하였다. (configuration 파일과 zone 파일 작성법이 나와있다.)

(이 글은 내 컴퓨터의 IP가 192.168.0.101, 호스트 컴퓨터의 IP가 192.168.0.27이라고 가정하고 작성함)



먼저, /etc/hosts 파일을,

127.0.0.1 my.local localhost

127.0.0.1 ns

위와 같이 수정하였다.


apt-get 명령어로 BIND9를 설치하면 자동으로 /etc/named.conf 파일, /etc/bind/named.conf.options 등이 생성되는 것 같은데,

소스 패키지를 빌드하여 설치한 경우엔 생성되지 않는다. (bind9-9.9.5.dfsg 디렉터리의 FAQ 참고)

그렇기 때문에 디렉터리와 파일을 생성하여 설정해주었다.


/etc/bind/named.conf.options 파일을,

options {

 directory "/var/cache/bind";

 

 forwarders {

 ##KT 네임서버 IP 

 168.126.63.1; 

 168.126.63.2;

 };


 listen-on-v6 { any; };

};

다음과 같이 만들어, 내부 도메인이 아닌 경우 KT 네임서버에 묻게 했다.

여기서, options는 DNS 서버의 전체적인 제어에 대한 설정을 하는 절이며,

listen-on-v6는 BIND가 IPv6 쿼리 listen 여부를 설정하는 문장이다.(IP나 Port 설정도 가능)


/etc/bind/named.conf.local 파일을,

zone "my.local" IN {

 type master;

 file "/etc/bind/zones/my.local.db";

};


zone "0.168.192.in-addr.arpa" {

 type master;

 file "/etc/bind/zones/rev.0.168.192.in-addr.arpa";

};

다음과 같이 만들어, zone을 추가하였다.

여기서, zone은 네임서버가 지원할 zone을 정의하는 절이며,

type은 zone의 type을 설정하는 문장이다. (type에 대한 정의는 위 링크에서 참고)

file은 zone에 의해 사용될 파일을 설정하는 문장이다.


/etc/named.conf 파일은 다음과 같이 간단하게 만들었다.

include "/etc/bind/named.conf.options";

include "/etc/bind/named.conf.local";

보다시피, 위에서 만든 파일들을 include 했다.


그 후, named.conf.options에 정의한 zone에 대한 zone 파일을 생성한다.

/etc/bind/zones라는 디렉터리를 만들어서, 그 안에 zone 파일들을 생성했다.


먼저, my.local.db 파일을 다음과 같이 만들었다.

;

; BIND data file for local loopback interface

;

$ORIGIN my.local.

$TTL 604800

@ IN SOA ns.my.local. master.my.local. (

 10 ; Serial

 604800 ; Refresh

 86400 ; Retry

 2419200 ; Expire

 604800 ) ; Negative Cache TTL

;

; name servers - NS records

my.local. IN NS ns.my.local.


; name servers - A records

localhost IN A 127.0.0.1

gateway IN A 192.168.0.1

ns IN A 192.168.0.101


; hosts - A records

testcom IN A 192.168.0.27

여기서, SOA는 zone에 대한 설정을 하는 레코드고,

NS는 도메인에 대한 네임서버를 정의, A는 호스트에 대한 아이피를 설정하는 레코드다.


rev.0.168.192.in-addr.arpa 파일은 다음과 같이 만들었다.

;

; BIND reverse data file for broadcast zone

;

$TTL 604800

@ IN SOA ns.my.local. master.my.local. (

 14 ; Serial

 604800 ; Refresh

 86400 ; Retry

 2419200 ; Expire

 604800 ) ; Negative Cache TTL

;

; name server

@ IN NS ns.my.local.

; PTR Records

1 IN PTR gateway.my.local.

27 IN PTR testcom.my.local.

101 IN PTR ns.my.local.

여기서 PTR은 아이피에 대한 도메인을 설정하는 레코드다.



설정이 다 끝나면,


named-checkconf 명령어로 configuration에 구문 에러가 있는지 확인하고,

zones 디렉터리로 이동하여, named-checkzone을 사용해 zone 파일이 정확하게 작성되었는지 확인한다.

ex) named-checkzone my.local my.local.db

ex) named-checkzone 0.168.192.in-addr.arpa rev.0.168.192.in-addr.arpa


그 후 named 명령어를 입력하면, DNS 서버가 켜진다.


host 컴퓨터에선, DNS 서버로 192.168.0.101을 사용하게 한 후, DNS 서버가 잘 기능하는 지 테스트했다.

telnet ns.my.local, ftp ns.my.local등의 명령어로 DNS 서버에 등록된 도메인으로 IP를 잘 찾아 접속하는 지 확인했고,

내부 도메인이 아닌 경우를 테스트 하기 위해 google 등의 일반 사이트에 웹 브라우저를 사용해 접속해보았다.

+ Recent posts