DNS서버 설치 준비사항
1. 도메인 주소
DNS서버를 구축하기 위해서 도메인 주소를 확보한다. 일반적으로 도메인주소는 도메인 대행업체에서 구입하게 되는데 각각의 대행업체들은 구입한 도메인을 자신들의 네임서버에 존파일을 등록해둔다. 대행업체의 ns.xxxx.xxx 와 같은 형태로 네임서버를 공지하고 있을것이다. 대행업체들의 설정메뉴들을 보면(예 가비아) 호스트관리메뉴가 있는데 이 곳에 호스트 등록을 함으로써 기본으로 제공하는 네임서버를 이용하지 않고 자신이 구축한 네임서버를 이용할 수 있게 된다.
호스트 등록의 경우 경우에 따라 1~3일의 기간이 소요 될 수 있다.
2. TCP/UDP 프로토콜 port 53
DNS서버는 애플리케이션 프롵토콜중의 하나인 DNS 프로토콜을 사용한다. DNS 프로토콜은 네트워크를 경유하여 DNS 구현요소 간에 DNS 질의(DNS Query)와 응답(DNS Response)을 수행하히기 위한 클라이언트/서버 모델의 애플리케이션 프로토콜이다.
DNS 프로토콜은 TCP 및 UDP 포트번호 53번을 사용한다. DNS 질의의 대부분은 UDP 포트 53번을 사용하여 질의와 응답이 이루어진다. 그러나 UDP 헤더 이후의 DNS 헤더를 포함한 DNS 메시지 영역의 길이가 512 바이트를 초과하는 경우에는 TCP 53번 포트를 사용하는 TCP 연결을 통한 DNS 질의와 응답이 이루어지는 매커니즘이 존재한다. 또한 동일한 도메인 존을 가지고 있는 네임서버간의 도메인 존 데이터 송수신을 위한 존 트랜스퍼(Zone Transfer)를 수행하는 경우에는 많은 데이터 전송요청이 이루어지므로 TCP 53번을 사용한다.
고로 방화벽 및 공유기에서 TCP/UDP 53번 포트를 개방한다.
iptables를 활성화 해둔 경우 아래와 같이 포트오픈
# iptables -A INPUT -p udp -m state --state NEW --dport 53 -j ACCEPT
# iptables -A INPUT -p tcp -m state --state NEW --dport 53 -j ACCEPT
# service iptables save
# service iptables restart
3. Bind 설치 방법 결정
Bind를 소스설치 할 것인지 yum 혹은 rpm을 이용한 설치를 할 것인지를 선택한다. 이 글에서는 yum을 이용한 설치를 진행한다.
소스 설치시 다운로드 방법
www.isc.org > Software - Bind 메뉴를 클릭해서 원하는 버전의 Bind버전을 tar.gz 형식을 다운로드한다.
DNS서버 설치
DNS서버의 기능을 제공하는 대표적인 소프트웨어가 BIND이다. BIND는 버전에 따라 설정 파일(/etc/named.conf)의 항목이 다를 수 있기 때문에 버전 9 이외의 BIND를 사용할 때는 주의해야 한다.
Bind 설치여부 확인
# rpm -qa | grep bind
Bind 설치
# yum -y install bind-*
===========================================================================================================================================
Package Arch Version Repository Size
===========================================================================================================================================
Installing:
bind x86_64 32:9.8.2-0.17.rc1.el6_4.4 updates 4.0 M
bind-chroot x86_64 32:9.8.2-0.17.rc1.el6_4.4 updates 71 k
bind-devel x86_64 32:9.8.2-0.17.rc1.el6_4.4 updates 378 k
bind-dyndb-ldap x86_64 2.3-2.el6 base 68 k
bind-libs x86_64 32:9.8.2-0.17.rc1.el6_4.4 updates 878 k
bind-sdb x86_64 32:9.8.2-0.17.rc1.el6_4.4 updates 306 k
bind-utils x86_64 32:9.8.2-0.17.rc1.el6_4.4 updates 182 k
Installing for dependencies:
portreserve x86_64 0.0.4-9.el6 base 23 k
postgresql-libs x86_64 8.4.13-1.el6_3 base 200 k
Transaction Summary
===========================================================================================================================================
Install 9 Package(s)
Bind 관련해서 국내 검색결과나 서적들을 보면 caching-nameserver 관련 패키지를 설치하라고 하던데 현재의 Bind 버전에서는 이를 기본 bind 패키지에 포함시키는듯 싶다. 따로 설치하려고해도 이미 설치되어 있다고 나온다. 리눅스 관련 국내서적들이 출간된지 최소 5~6년이 지난 시점이다 보니 최신의 패키지들에 대한 구성이나 설정법이 상이할 수 있다.
1. bind Jail(chroot) 설정
yum으로 설치했을 경우, 디렉토리 구조를 살펴보면 /var/named/chroot 구조가 생긴다.
bind의 데몬파일은 named인데 이 named 서비스를 시작하지 않은 경우에는 마치 chroot가 작용하지 않는듯이 /var/named 디렉토리와 /etc 디렉토리에 설정파일들이 존재하고 있다. 이때 named 서비스를 시작하게 되면 자동으로 /var/named/chroot/var/named 디렉토리와 /var/named/chroot/etc 디렉토리에 각종 설정파일들이 자동으로 생겨난다. 이 파일들은 ls -la 로 살펴보면 링크파일이 아니다. 추측컨데 기본 위치에서 서비스가 시작될때마다 복사해오고 종료하면 삭제하는 듯 싶다. bind-chroot 관련해서 정보를 찾기 어렵기에 정확한 진의를 판별하기가 어렵다.
/etc/named.conf 파일을 수정하고 named 서비스를 시작(재시작)하면 수정한 내용이 그대로 적용되어 /var/named/chroot/etc/named.conf 에 똑같은 내용이 반영된다. 다른 파일들도 마찬가지다.
2. named.conf 설정
# vi /etc/named.conf
listen-on-v6 port 53 { ::1; };
// 각 도메인의 zone 파일의 위치를 지정한다.
directory "/var/named";
// 정보가 갱신될 때 저장되는 파일
dump-file "/var/named/data/cache_dump.db";
// 통계파일이 생성되는 절대경로와 파일이름을 지정
statistics-file "/var/named/data/named_stats.txt";
// 메모리 관련 통계파일이 생성되는 절대경로와 파일이름을 지정
memstatistics-file "/var/named/data/named_mem_stats.txt";
// 네임서버 쿼리를 허용할 IP 혹은 IP 대역을 설정
// allow-query { localhost; };
allow-query { any; };
// 이 구문을 추가하지 않으면 warning 을 봄
empty-zones-enable no;
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
};
// 네임서버 실행에 있어서 디버깅시 참고 할 수 있는 로그파일생성 위치 지정
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
// 루트도메인에 대한 설정을 named.ca라는 파일에서 참조하라는 설정
// type 값은 hint(루트도메인을 지정), master(1차 네임서버), slave(2차 네임서버)
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
3. named.rfc1912.zones 설정
# vi /etc/named.rfc1912.zones
//
// ISC BIND named zone configuration for zones recommended by
// RFC 1912 section 4.1 : localhost TLDs and address zones
// and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt
// (c)2007 R W Franks
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// 로컬호스트 도메인에 대한 설정으로 기본 설정을 그대로 사용
zone "localhost.localdomain" IN {
type master;
file "named.localhost";
allow-update { none; };
};
// 로컬호스트 도메인에 대한 설정으로 기본 설정을 그대로 사용
zone "localhost" IN {
type master;
file "named.localhost";
allow-update { none; };
};
// ipv6에 대한 로컬 호스트 루프백 설정으로 기본 설정을 그대로 사용
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
// 로컬호스트에 대한 루프백 인버스 도메인 설정으로 기본 설정을 그대로 사용
zone "1.0.0.127.in-addr.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
// 제로호스트에 대한 루프백 설정으로 기본 설정을 그대로 사용
zone "0.in-addr.arpa" IN {
type master;
file "named.empty";
allow-update { none; };
};
// uzuro.com 도메인
zone "uzuro.com" IN {
type master;
file "uzuro.com.zone";
allow-update { none; };
};
zone "789.456.123.in-addr.arpa" IN { // 자신의 IP주소의 마지막을 뺀 주소를 역순으로
type master;
file "uzuro.com.rev";
allow-update { none; };
};
4. zone 파일 생성과 reverse 파일 생성
/var/named 디렉토리의 named.localhost 파일을 복사해 사용한다.
# cp /var/named/named.localhost /var/named/uzuro.com.zone
# cp /var/named/named.localhost /var/named/uzuro.com.rev
복사시 소유권이 변경되니 소유권을 다시 정정해준다.
# chwon root.named /var/named/uzuro.com.zone
# chown root.named /var/named/uzuro.com.rev
uzuro.com의 zone 파일을 수정한다. 수정할때 $TTL 값을 짧게 설정해서 당분간은 변경내용이 바로바로 등록되도록 한다.
# vi uzuro.com.zone
; uzuro.com.zone
$TTL 10M
@ IN SOA ns.uzuro.com. webmaster.uzuro.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS ns.uzuro.com.
IN MX 10 mail.uzuro.com.
IN A 123.456.789.00
ns IN A 123.456.789.00
mail IN A 123.456.789.00
blog IN A 123.456.789.00
music IN A 123.456.789.00
game IN A 123.456.789.00
howto IN A 123.456.789.00
www IN A 123.456.789.00
ftp IN A 123.456.789.00
리버스파일을 수정한다. 리버스파일은 제대로 설정하더라도 회선을 대여받고 있는 ISP 업체에서 막아두고 있을 것이다. ISP업체에서는 이를 고정IP 를 사용하는 사용자에 한하여 리버스도메인을 등록해 준다. 메일서비스의 경우 이 리버스도메인을 지원해야 정상적인 전송이 되는 경우가 있다.
KT DNS 서비스 운용지원 https://dms.kornet.net/jsp/login.jsp
# vi uzuro.com.rev
; uzuro.com.rev
$TTL 10M
@ IN SOA ns.uzuro.com. webmaster.uzuro.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS ns.uzuro.com.
00 IN PTR ns.uzuro.com.
00 IN PTR mail.uzuro.com.
5. 서비스 시작과 등록
named 서비스를 등록한다.
# chkconfig named on
named 서비스를 시작한다.
# service named start
named 관련 설정 파일들을 수정한 후에는 named 서비스를 재시작해준다.
# service named restart
파일 체크
named.conf, named.rfc1912.zones 파일 설정 검사
아무런 메세지도 나오지 않는다면 정상
# named-checkconf /etc/named.rfc1912.zones
# named-checkconf /etc/named.conf
zone 파일 설정 검사
# named-checkzone [도메인명] [존파일 절대경로 위치]
# named-checkzone uzuro.com /var/named/uzuro.com.zone
zone uzuro.com/IN: loaded serial 0
OK
네임서버 응답확인
# dig @server domain query-type query-class
query-type 값
a : 네트워크주소를 의미함
any : 지정한 도메인의 모든 정보를 의미함
mx : 지정한 도메인의 메일서버 정보를 의미함
ns : 네임서버를 의미함
soa : SOA 정보를 의미함
hinfo : HINFO 레코드에 대한 정보를 의미함
# dig @8.8.8.8 uzuro.com any
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.4 <<>> @8.8.8.8 uzuro.com any
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62493
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;uzuro.com. IN ANY
;; ANSWER SECTION:
uzuro.com. 490 IN SOA ns.uzuro.com. webmaster.uzuro.com. 0 86400 3600 604800 10800
uzuro.com. 490 IN NS ns.uzuro.com.
uzuro.com. 490 IN MX 10 mail.uzuro.com.
uzuro.com. 490 IN A xxx.xxx.xxx.xx
;; Query time: 38 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Tue Jun 25 00:49:39 2013
;; MSG SIZE rcvd: 127
# host uzuro.com ns.uzuro.com
Using domain server:
Name: ns.uzuro.com
Address: xxx.xxx.xxx.xx#53
Aliases:
uzuro.com has address xxx.xxx.xxx.xx
uzuro.com mail is handled by 10 mail.uzuro.com.
# dig @8.8.8.8 00.789.456.123.in-addr.arpa PTR
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.4 <<>> @8.8.8.8 00.789.456.123.in-addr.arpa PTR
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 9117
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;00.789.456.123.in-addr.arpa. IN PTR
;; AUTHORITY SECTION:
789.456.123.in-addr.arpa. 1799 IN SOA 789.456.123.in-addr.arpa. domain.ns.kornet.net. 2006062800 43200 3600 604800 43200
;; Query time: 235 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Tue Jun 25 01:19:15 2013
;; MSG SIZE rcvd: 101
# nslookup uzuro.com 8.8.8.8
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: uzuro.com
Address: 123.456.789.00
# nslookup
> set q=MX
> uzuro.com
Server: 168.126.63.1
Address: 168.126.63.1#53
Non-authoritative answer:
uzuro.com mail exchanger = 10 mail.uzuro.com.
Authoritative answers can be found from:
uzuro.com nameserver = ns.uzuro.com.
mail.uzuro.com internet address = 123.456.789.00
ns.uzuro.com internet address = 123.456.789.00