본문 바로가기
Linux/Web Server

CentOS7 Minimal - Domain Name Server (DNS) Build

by PeterC 2020. 10. 9.

0. 방화벽 설정

DNS 서비스 방화벽 설정. DNS 기본 포트(53 port)에 대해 tcp/udp를 열어분다.

 

[root@localhost ~]# firewall-cmd --permanent --add-port=53/tcp
success
[root@localhost ~]# firewall-cmd --permanent --add-port=53/udp
success
[root@localhost ~]# firewall-cmd --reload
success

 

CentOS 6 경우 iptables 를 이용하여 53번 TCP 포트에 대해서 In/Out 룰 설정이 필요합니다.

[root@localhost ~]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p udp --dport 53 -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
[root@localhost ~]# service iptables save
[root@localhost ~]# service iptables restart

1. BIND 패키지 설치

BIND 패키지를 사용하여 Domain Name Server를 구축한다.

패키지를 설치하기전 서버를 최신 상태(패키지 목록)인지 확인한다.

 

[root@localhost ~]# yum update && yum upgrade
[root@localhost ~]# yum install -y bind bind-utils

 

2. BIND 설정

2.1 전역 매개변수 설정

 

o listen-on port 53 { any; };

 : BIND가 들어오는 DNS 요청을 수신할 포트를 설정한다. 기본적으로 53번 DNS 포트를 이용하며, "any" 설정을 하영 BIND까 사용 가능한 모든 인터페이스에 연결 하도록 지시 할 수 있다.

 

o recursion no

 : recursion(재귀) 옵션은 구성 파일이 있는 도메인데 대한 정보로만 응답하도록 BIND를 구성할 수 있다. 해당 옵션이 YES로 설정되어 있다면 BIND 재귀적질의가 가능한 Domain Name Server 가 된다. (Local DNS 서버가 여러 DNS 서버를 차례대로 물어봐서 그 답을 찾는 과정을 Recursive Query, '재귀적질의'라고 부른다.)

 recusion 옵션을 사용안함(recursion no;)으로 변경한다면, lterative Query(반복적 질의)를 사용하는 Domain Name Server 로 전환된다. (자신이 직접 관리하지 않는 질의 요청이 있을 경우 질의에 응답 가능한 NS 목록을 응답한다.)

 

o allow-query any;

 : 모든 곳에서 요청하는 쿼리를 허용하도록 "any"로 설정합니다.

 

[root@localhost ~]# vim /etc/name.conf

options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { none; };
        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";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query     { any; };

        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;
        
        bindkeys-file "/etc/named.root.key";

        managed-keys-directory "/var/named/dynamic";

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

 

2.2 BIND가 제공할 도메인별 DNS 정보(영역 정보 및 영역 레코드) 생성

 

도메인에 대한 DNS 정보로 생성할 영역 정보 파일을 읽을 BIND를 구성한다.

 

o zone "IP address && Domain Name"

 : BIND가 요청에 응답할 도메인 이름 또는 IP 주소

 

o type "type (master && slave);

 : BIND는 로컬 저장소에서 영역 정보를 읽고 영역에 나열된 도메인에 대해 신뢰할 수 있는 정보를 제공한다. type으로 해당 서버가 Primary 서버인지 Secondary 서버인지 설정한다.

 

o file "ZONE File Path"

 : 영역 정보가 포함된 파일.

 

[root@localhost ~]# vim /etc/named.rfc1912.zones
[root@localhost ~]# tail -15 /etc/named.rfc1912.zones
};

zone "test.com" IN {
        type master;
        file "test.com.zone";
        allow-update { none; };
};

zone "129.88.168.192.in-addr.arpa" IN {
        type master;
        file "test.com.revzone";
        allow-update { none; };
};

 

첫 번째 zone 영역은 도메인 정보를 IP 주소로 변환하며, 두 번째 영역은 서버 IP주소를 도메인 이름으로 변환. 즉, 역방향 레코드의 영역이다.

 

3. 영역 파일 구성

BIND 설정에서 명시한 test.com의 영역파일을 구성한다.

 

[root@localhost named]# cd /var/named/
[root@localhost named]# pwd
/var/named
[root@localhost named]# ls -al
total 16
drwxrwx--T.  8 root  named  177 Oct  9 04:01 .
drwxr-xr-x. 20 root  root   280 Oct  9 03:59 ..
drwxr-x---.  7 root  named   61 Oct  9 04:01 chroot
drwxr-x---.  7 root  named   61 Oct  9 04:01 chroot_sdb
drwxrwx---.  2 named named    6 Jun  1 11:26 data
drwxrwx---.  2 named named    6 Jun  1 11:26 dynamic
drwxrwx---.  2 root  named    6 Mar 31  2020 dyndb-ldap
-rw-r-----.  1 root  named 2253 Apr  5  2018 named.ca
-rw-r-----.  1 root  named  152 Dec 15  2009 named.empty
-rw-r-----.  1 root  named  152 Jun 21  2007 named.localhost
-rw-r-----.  1 root  named  168 Dec 15  2009 named.loopback
drwxrwx---.  2 named named    6 Jun  1 11:26 slaves
[root@localhost named]# cp named.localhost test.com.zone
[root@localhost named]# cp named.localhost test.com.revzone

 

o "@    IN SOA  test.com.   root.test.com.  ( " 의 구성 정보

@ named.conf.local 파일의 test.com 도메인으로 교체된다.
IN 레코드의 유형표시 (INternet 레코드)
SOA Start Of Authority 레코드의 약자. (신뢰할 수 있는 도메인)
test.com DNS 레코드 이름서버
root.test.com 네임서버 관리자의 이메일 주소 (@의 기호는 .으로 대체된다 - root@test.com)

 

[root@localhost named]# vim test.com.zone
[root@localhost named]# cat test.com.zone
$TTL 1D
@       IN SOA  test.com. root.test.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
;NmaeServer Infomation
@       IN      NS      ns1.test.com.
ns1     IN      A       192.168.88.100

;Additional A Records
@       IN      A       192.168.88.100

 

[root@localhost named]# vim test.com.revzone
[root@localhost named]# cat test.com.revzone
$TTL 1D
@       IN SOA  test.com        root.test.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum

;NameServer Information
        IN      NS      ns1.test.com.
ns1     IN      A       192.168.88.100

;Reverse IP Information
100.88.168.192.in-addr.arpa.    IN      PTR     test.com.

 

4. ZONE 파일의 소유권 변경

영역 파일 생성후 파일에 대한 소유권을 "named"로 변경한다.

 

[root@localhost named]# pwd
/var/named
[root@localhost named]# ls
chroot      data     dyndb-ldap  named.empty      named.loopback  test.com.revzone
chroot_sdb  dynamic  named.ca    named.localhost  slaves          test.com.zone
[root@localhost named]# chown root.named test.com.*
[root@localhost named]# ls -al
...
...
-rw-r-----.  1 root  named  271 Oct  9 05:58 test.com.revzone
-rw-r-----.  1 root  named  244 Oct  9 05:52 test.com.zone

 

5. 구성에 오류가 있는지 확인

5.1 전역 매개변수, 구성 파일을 확인한다.

 

[root@localhost named]# named-checkconf /etc/named.conf
[root@localhost named]# named-checkconf /etc/named.rfc1912.zone

 

5.2 ZONE, 영역 파일을 확인한다.

 

[root@localhost named]# named-checkzone test.com /var/named/test.com.zone
zone test.com/IN: loaded serial 0
OK
[root@localhost named]# named-checkzone test.com /var/named/test.com.revzone
/var/named/test.com.revzone:14: ignoring out-of-zone data (100.88.168.192.in-addr.arpa)
zone test.com/IN: loaded serial 0
OK

 

도메인 질의 테스트

[root@localhost named]# nslookup 192.168.88.100
100.88.168.192.in-addr.arpa     name = test.com.

[root@localhost named]# nslookup test.com
Server:         192.168.88.100
Address:        192.168.88.100#53

Name:   test.com
Address: 192.168.88.100

 

References

1. LOW END BOX - "How To Create DNS Server On CentOS 7"

lowendbox.com/blog/create-dns-server-centos-7/

 

How To Create a DNS Server On CentOS 7

The DNS or Domain Name System is the distributed database that allows zone records, such as IP addresses, to be associated with domain names. When a computer, such as your laptop or phone, needs to communicate with a remote computer, such as a web server,

lowendbox.com

2. JungNux - "DNS란 무엇인가 재귀적, 반복적 쿼리"

hihighlinux.tistory.com/47

 

DNS란 무엇인가 재귀적,반복적 쿼리

안녕하세요 오늘은 DNS(Domain Name System)에 대해 알아보겠습니다. DNS서버 구축을 하기 위해 먼저 개념을 알고가는 것이 좋다고 생각해서 먼저 글을 작성해봅니다 시작해보겠습니다. DNS 란? 네트워��

hihighlinux.tistory.com

3. 서버구축이야기 - "리눅스 네임서버 구축하기 - 주(Primary) DNS 서버 구축하기"

server-talk.tistory.com/177

 

리눅스 네임서버 구축하기 - 주(Primary) DNS 서버 구축하기

주(Primary) DNS 서버 구축해보기 이번시간에는 네임서버의 가장 대표적인 주(Primary) DNS 서버를 구축해보겠습니다. 관련글 : 도메인과 네임서버 알아보기 - http://server-talk.tistory.com/168 도메인이란?..

server-talk.tistory.com