본문으로 건너뛰기

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란?

정의

BINDBerkeley 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.

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 주소 → 도메인 이름 매핑
  • 100192.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-checkconfnamed-checkzone으로 문법을 확인하세요.