BIND DNS 서버 설치 방법은 무엇인가요?
💡 요약 정리
- BIND는 리눅스/Unix에서 가장 널리 사용되는 DNS 서버 프로그램입니다.
- CentOS에서는 yum으로 bind, caching-nameserver 패키지를 설치합니다.
- named.caching-nameserver.conf 파일에서 DNS 서버 설정을 합니다.
- zone 파일을 생성하여 도메인과 IP 매핑 정보를 관리합니다.
- named 서비스를 시작하고 nslookup으로 동작을 확인합니다.
설치환경
- CentOS 5.x (64bit)
1. BIND란?
정의
BIND는 Berkeley Internet Name Domain의 약자로, DNS 서버를 운영하기 위한 데몬 프로그램입니다.
특징
- 구성이 쉽고 표준을 따르는 도구
- 리눅스/Unix에서 가장 널리 사용되는 DNS 프로그램
- 안정성과 성능이 검증된 오픈소스 소프트웨어
주요 기능
- 도메인 이름을 IP 주소로 변환 (Forward Lookup)
- IP 주소를 도메인 이름으로 변환 (Reverse Lookup)
- DNS 캐싱 서버 기능
- 마스터/슬레이브 DNS 서버 구성
2. BIND, caching-nameserver 설치
패키지 설치 확인
먼저 패키지가 이미 설치되어 있는지 확인합니다.
[root@cafe24 ~]# rpm -qa | grep bind
bind-libs-9.3.6-16.P1.el5
ypbind-1.19-12.el5_6.1
bind-utils-9.3.6-16.P1.el5
[root@cafe24 ~]# rpm -qa | grep caching-nameserver
[root@cafe24 ~]#
yum으로 패키지 설치
bind와 caching-nameserver 2개의 패키지를 설치합니다.
[root@cafe24 ~]# yum install bind caching-nameserver
설치 과정:
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: centos.tt.co.kr
* epel: ftp.neowiz.com
* extras: centos.tt.co.kr
* updates: centos.tt.co.kr
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package bind.x86_64 30:9.3.6-20.P1.el5_8.6 set to be updated
--> Processing Dependency: bind-libs = 30:9.3.6-20.P1.el5_8.6 for package: bind
---> Package caching-nameserver.x86_64 30:9.3.6-20.P1.el5_8.6 set to be updated
--> Running transaction check
--> Processing Dependency: bind-libs = 30:9.3.6-16.P1.el5 for package: bind-utils
---> Package bind-libs.x86_64 30:9.3.6-20.P1.el5_8.6 set to be updated
--> Running transaction check
---> Package bind-utils.x86_64 30:9.3.6-20.P1.el5_8.6 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
=====================================================================================================================
Package Arch Version Repository Size
=====================================================================================================================
Installing:
bind x86_64 30:9.3.6-20.P1.el5_8.6 updates 989 k
caching-nameserver x86_64 30:9.3.6-20.P1.el5_8.6 updates 64 k
Updating for dependencies:
bind-libs x86_64 30:9.3.6-20.P1.el5_8.6 updates 898 k
bind-utils x86_64 30:9.3.6-20.P1.el5_8.6 updates 180 k
Transaction Summary
=====================================================================================================================
Install 2 Package(s)
Upgrade 2 Package(s)
Total download size: 2.1 M
Is this ok [y/N]: y
Downloading Packages:
(1/4): caching-nameserver-9.3.6-20.P1.el5_8.6.x86_64.rpm | 64 kB 00:00
(2/4): bind-utils-9.3.6-20.P1.el5_8.6.x86_64.rpm | 180 kB 00:00
(3/4): bind-libs-9.3.6-20.P1.el5_8.6.x86_64.rpm | 898 kB 00:00
(4/4): bind-9.3.6-20.P1.el5_8.6.x86_64.rpm | 989 kB 00:00
---------------------------------------------------------------------------------------------------------------------
Total 10 MB/s | 2.1 MB 00:00
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Updating : bind-libs 1/6
Installing : bind 2/6
Updating : bind-utils 3/6
Installing : caching-nameserver 4/6
Cleanup : bind-utils 5/6
Cleanup : bind-libs 6/6
Installed:
bind.x86_64 30:9.3.6-20.P1.el5_8.6 caching-nameserver.x86_64 30:9.3.6-20.P1.el5_8.6
Dependency Updated:
bind-libs.x86_64 30:9.3.6-20.P1.el5_8.6 bind-utils.x86_64 30:9.3.6-20.P1.el5_8.6
Complete!
3. caching-nameserver.conf 파일 수정
BIND 버전에 따른 설정 파일 위치
- BIND 9.2 이하:
/etc/named.conf - BIND 9.3 이상:
/etc/named.caching-nameserver.conf
설정 파일 수정
[root@cafe24 ~]# vi /etc/named.caching-nameserver.conf
설정 내용:
--------------------------------------------------------------------------------------------------------------------
options {
listen-on port 53 { any; };
listen-on-v6 port 53 { ::1; };
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";
// Those options should be used carefully because they disable port
// randomization
query-source port 53;
// query-source-v6 port 53;
allow-query { any; };
allow-query-cache { localhost; };
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
view localhost_resolver {
match-clients { localhost; };
match-destinations { localhost; };
recursion no;
include "/etc/named.rfc1912.zones";
};
--------------------------------------------------------------------------------------------------------------------
설정 항목 설명
listen-on port 53
- 네임서버의 포트번호와 접근할 수 있는 IP 설정
- 외부에서 접속을 허용할 경우
any로 열어줌
directory "/var/named"
- DNS zone 파일들의 위치
dump-file "/var/named/data/cache_dump.db"
- 캐시 덤프 파일이 저장되는 위치
statistics-file "/var/named/data/named_stats.txt"
- 네임서버의 통계정보가 저장되는 파일
query-source port 53
- 쿼리를 보내는 source port
- 보안상 이유로 random port를 사용하는 것이 좋지만, 53번 포트로 고정 가능
allow-query { any; }
- DNS 쿼리를 허용할 클라이언트 지정
any: 모든 클라이언트 허용- 특정 IP/네트워크만 허용 시:
\{ 192.168.1.0/24; 10.0.0.0/8; \}
allow-query-cache { localhost; }
- 캐시 쿼리를 허용할 클라이언트 지정
match-clients, match-destinations
- view 기능으로 특정 클라이언트에게만 다른 응답 제공 가능
recursion no
- 재귀 쿼리 허용 여부
yes: 클라이언트 대신 다른 DNS 서버에 질의no: 자신이 가진 정보만 응답
4. named.conf 파일 설정 (BIND 9.2 이하)
BIND 9.2 이하 버전에서는 /etc/named.conf 파일을 직접 수정합니다.
[root@cafe24 ~]# vi /etc/named.conf
기본 설정:
--------------------------------------------------------------------------------------------------------------------
options {
listen-on port 53 { any; };
listen-on-v6 port 53 { ::1; };
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";
allow-query { any; };
allow-query-cache { any; };
recursion yes;
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
--------------------------------------------------------------------------------------------------------------------
5. zone 파일 설정
named.rfc1912.zones 파일 수정
zone 정보를 추가합니다.
[root@cafe24 ~]# vi /etc/named.rfc1912.zones
zone 추가:
--------------------------------------------------------------------------------------------------------------------
zone "localhost.localdomain" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "localhost" IN {
type master;
file "named.localhost";
allow-update { none; };
};
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; };
};
# 추가: test.cafe24.com 도메인 설정
zone "test.cafe24.com" IN {
type master;
file "test.cafe24.com.zone";
allow-update { none; };
};
# 추가: Reverse zone (역방향 조회)
zone "0.168.192.in-addr.arpa" IN {
type master;
file "0.168.192.in-addr.arpa";
};
--------------------------------------------------------------------------------------------------------------------
zone 설정 항목 설명
zone "도메인이름"
- 관리할 도메인 이름
type master
- 주 DNS 서버 (Master/Primary)
slave: 보조 DNS 서버
file "파일명"
- zone 정보가 저장된 파일
/var/named/디렉토리 내에 위치
allow-update { none; }
- 동적 DNS 업데이트 허용 여부
none: 업데이트 불가
6. Forward zone 파일 생성
zone 파일 생성
도메인의 정방향 조회 정보를 설정합니다.
[root@cafe24 ~]# vi /var/named/test.cafe24.com.zone
zone 파일 내용:
--------------------------------------------------------------------------------------------------------------------
$TTL 86400
@ IN SOA ns.test.cafe24.com. root.test.cafe24.com. (
2013030401 ; Serial
3600 ; Refresh (1 hour)
600 ; Retry (10 minutes)
86400 ; Expire (1 day)
3600 ) ; Minimum (1 hour)
IN NS ns.test.cafe24.com.
IN A 192.168.0.100
IN MX 10 mail.test.cafe24.com.
ns IN A 192.168.0.100
www IN A 192.168.0.100
mail IN A 192.168.0.101
ftp IN A 192.168.0.102
--------------------------------------------------------------------------------------------------------------------
zone 파일 항목 설명
$TTL 86400
- Time To Live (캐시 유지 시간): 86400초 = 24시간
SOA (Start Of Authority)
- DNS zone의 권한 정보
ns.test.cafe24.com.
- Primary Name Server
root.test.cafe24.com.
- 관리자 이메일 (root@test.cafe24.com)
@는.으로 표기
Serial (2013030401)
- zone 파일 버전 번호
- 형식: YYYYMMDDNN (년월일+일련번호)
- 변경 시마다 증가시켜야 함
Refresh (3600)
- Secondary DNS가 Primary를 확인하는 주기 (초)
Retry (600)
- Refresh 실패 시 재시도 간격 (초)
Expire (86400)
- Primary에 접속 불가 시 zone 만료 시간 (초)
Minimum (3600)
- Negative caching 시간 (존재하지 않는 레코드의 캐시 시간)
NS (Name Server)
- 네임서버 지정
A (Address)
- 호스트 이름 → IP 주소 매핑
MX (Mail eXchange)
- 메일 서버 지정
- 숫자(10)는 우선순위 (낮을수록 높은 우선순위)
7. Reverse zone 파일 생성
역방향 조회 zone 파일 생성
IP 주소를 도메인 이름으로 변환하는 정보를 설정합니다.
[root@cafe24 ~]# vi /var/named/0.168.192.in-addr.arpa
zone 파일 내용:
--------------------------------------------------------------------------------------------------------------------
$TTL 86400
@ IN SOA ns.test.cafe24.com. root.test.cafe24.com. (
2013030401 ; Serial
3600 ; Refresh
600 ; Retry
86400 ; Expire
3600 ) ; Minimum
IN NS ns.test.cafe24.com.
100 IN PTR ns.test.cafe24.com.
100 IN PTR www.test.cafe24.com.
101 IN PTR mail.test.cafe24.com.
102 IN PTR ftp.test.cafe24.com.
--------------------------------------------------------------------------------------------------------------------
Reverse zone 설명
0.168.192.in-addr.arpa
- 192.168.0.0/24 네트워크의 역방향 조회 zone
- IP 주소를 역순으로 표기
PTR (Pointer)
- IP 주소 → 도메인 이름 매핑
100→192.168.0.100을 의미
8. zone 파일 권한 설정
zone 파일의 소유자와 권한을 named:named로 설정합니다.
[root@cafe24 ~]# chown named:named /var/named/test.cafe24.com.zone
[root@cafe24 ~]# chown named:named /var/named/0.168.192.in-addr.arpa
권한 확인:
[root@cafe24 ~]# ls -al /var/named/
total 80
drwxr-x--- 5 root named 4096 Mar 4 15:30 .
drwxr-xr-x 22 root root 4096 Mar 4 15:00 ..
-rw-r----- 1 root named 152 Jun 21 2007 0.168.192.in-addr.arpa
drwxrwx--- 2 named named 4096 Mar 4 15:30 data
drwxrwx--- 2 named named 4096 Mar 4 15:00 dynamic
-rw-r----- 1 root named 2518 Jun 21 2007 localdomain.zone
-rw-r----- 1 root named 152 Jun 21 2007 localhost.zone
-rw-r----- 1 root named 2989 Jun 21 2007 named.ca
-rw-r----- 1 root named 152 Jun 21 2007 named.local
-rw-r----- 1 root named 427 Jun 21 2007 named.zero
drwxrwx--- 2 named named 4096 Mar 4 15:00 slaves
-rw-r----- 1 root named 280 Mar 4 15:25 test.cafe24.com.zone
9. named 서비스 시작
서비스 시작
[root@cafe24 ~]# service named start
Starting named: [ OK ]
서비스 상태 확인
[root@cafe24 ~]# service named status
version: 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.6
CPUs found: 4
worker threads: 4
number of zones: 9
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running
named (pid 12345) is running...
부팅 시 자동 시작 설정
[root@cafe24 ~]# chkconfig named on
확인:
[root@cafe24 ~]# chkconfig --list named
named 0:off 1:off 2:on 3:on 4:on 5:on 6:off
10. DNS 서버 테스트
nslookup으로 테스트
[root@cafe24 ~]# nslookup www.test.cafe24.com
Server: 192.168.0.100
Address: 192.168.0.100#53
Name: www.test.cafe24.com
Address: 192.168.0.100
역방향 조회 테스트:
[root@cafe24 ~]# nslookup 192.168.0.100
Server: 192.168.0.100
Address: 192.168.0.100#53
100.0.168.192.in-addr.arpa name = www.test.cafe24.com.
100.0.168.192.in-addr.arpa name = ns.test.cafe24.com.
dig 명령으로 테스트
[root@cafe24 ~]# dig @192.168.0.100 www.test.cafe24.com
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.6 <<>> @192.168.0.100 www.test.cafe24.com
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12345
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;www.test.cafe24.com. IN A
;; ANSWER SECTION:
www.test.cafe24.com. 86400 IN A 192.168.0.100
;; AUTHORITY SECTION:
test.cafe24.com. 86400 IN NS ns.test.cafe24.com.
;; ADDITIONAL SECTION:
ns.test.cafe24.com. 86400 IN A 192.168.0.100
;; Query time: 1 msec
;; SERVER: 192.168.0.100#53(192.168.0.100)
;; WHEN: Mon Mar 04 15:40:00 2013
;; MSG SIZE rcvd: 82
11. 문제 해결
named 서비스 시작 실패
원인 확인:
[root@cafe24 ~]# tail -f /var/log/messages
일반적인 오류:
1. 설정 파일 문법 오류
[root@cafe24 ~]# named-checkconf /etc/named.conf
/etc/named.conf:10: missing ';' before '}'
해결 방법: 설정 파일 문법 수정
2. zone 파일 문법 오류
[root@cafe24 ~]# named-checkzone test.cafe24.com /var/named/test.cafe24.com.zone
zone test.cafe24.com/IN: loaded serial 2013030401
OK
오류 예시:
zone test.cafe24.com/IN: NS 'ns.test.cafe24.com' has no address records (A or AAAA)
해결 방법: NS 레코드에 해당하는 A 레코드 추가
3. 권한 문제
permission denied
해결 방법:
[root@cafe24 ~]# chown named:named /var/named/*.zone
[root@cafe24 ~]# chmod 640 /var/named/*.zone
DNS 쿼리 응답 없음
방화벽 확인:
[root@cafe24 ~]# iptables -L -n | grep 53
포트 열기:
[root@cafe24 ~]# iptables -I INPUT -p udp --dport 53 -j ACCEPT
[root@cafe24 ~]# iptables -I INPUT -p tcp --dport 53 -j ACCEPT
[root@cafe24 ~]# service iptables save
named 프로세스 확인:
[root@cafe24 ~]# ps aux | grep named
named 12345 0.0 0.1 123456 12345 ? Ssl 15:30 0:00 /usr/sbin/named -u named
12. 보안 고려사항
allow-query 제한
특정 네트워크만 쿼리 허용:
allow-query { 192.168.0.0/24; 10.0.0.0/8; localhost; };
allow-recursion 설정
재귀 쿼리를 허용할 클라이언트 제한:
allow-recursion { 192.168.0.0/24; localhost; };
recursion yes;
DNSSEC 설정
DNS 보안 확장 기능 활성화:
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
버전 숨기기
DNS 버전 정보 노출 방지:
version "Not Available";
13. 추가 레코드 타입
CNAME (Canonical Name)
별칭 설정:
blog IN CNAME www.test.cafe24.com.
shop IN CNAME www.test.cafe24.com.
TXT 레코드
텍스트 정보 (SPF, DKIM 등):
@ IN TXT "v=spf1 mx ~all"
SRV 레코드
서비스 위치 정보:
_sip._tcp.test.cafe24.com. IN SRV 10 60 5060 sip.test.cafe24.com.
14. zone 파일 관리
Serial 번호 관리
zone 파일 수정 시 반드시 Serial 번호를 증가시켜야 합니다.
형식: YYYYMMDDNN
- YYYY: 년도
- MM: 월
- DD: 일
- NN: 당일 일련번호 (00-99)
예시:
2013030401 # 2013년 3월 4일, 첫 번째 수정
2013030402 # 2013년 3월 4일, 두 번째 수정
zone 파일 리로드
설정 변경 후 서비스 재시작 없이 적용:
[root@cafe24 ~]# rndc reload
특정 zone만 리로드:
[root@cafe24 ~]# rndc reload test.cafe24.com
참고사항
- BIND 9.3 이상에서는
named.caching-nameserver.conf파일을 사용합니다. - zone 파일 수정 시 반드시 Serial 번호를 증가시켜야 합니다.
- 방화벽에서 UDP/TCP 53번 포트를 허용해야 합니다.
- 보안을 위해 allow-query를 적절히 제한하는 것이 좋습니다.
- 설정 변경 후에는
named-checkconf와named-checkzone으로 문법을 확인하세요.