Saturday, March 31, 2018

CentOS 6.6 리눅스 네트워크 ] 11.1 DNS 서버 간단 구성


안녕하세요. 썬구루입니다. 이 게시물에서는 CentOS 리눅스 기반 DNS 서버(BIND) 설치 및 구성 방법에 대해 알아보도록 하겠습니다.

인류는 문자를 발명하고 그 이후에 숫자를 발명하였습니다. 그래서 우리는 오랜 세월 동안 숫자보다 문자에 더 익숙하게 진화한 것이죠. 네트워크 상에 있는 호스트들을 구분 짓기 위해 IP 주소를 사용한다고 언급했었습니다. 그리고 우리가 알아보기 좋은 숫자로 총 32bits를 8bist씩 4등분 하여 10진수 숫자로 표기하여 사용합니다.

몇 개의 IP 주소를 외우긴 하지만 수많은 IP 숫자를 외우는 것은 어렵습니다. 하지만 문자로 된 호스트 이름이나 도메인 이름을 외우는 것은 숫자보다 상대적으로 쉽게 외울 것입니다. 여러분들이 네이버, 다음, 구글 홈페이지 서버의 IP 주소를 입력하여 웹 포탈에 접속하지는 않을 것입니다. www.naver.com, www.daum.net, www.google.com 이런 도메인 이름을 사용하여 웹에 접속할 것입니다.

이전 컴퓨터가 적었을 때 다시 말해 일반인들이 쉽게 컴퓨터를 접할 수 없었을 때 'IP 주소 호스트 이름'을 나열한 hosts 파일을 FTP 서비스를 통해 주기적으로 배포하였습니다. NetBIOS, WINS, NIS, NIS+ 등의 서비스를 사용하여 정보 서비스(호스트 이름 풀이도 포함)를 제공했었는데 확장성이 떨어졌다고 해야 하나.. 어쨌든 지금은 이름 풀이를 하기 위해 계층적 도메인 개념을 사용하는 DNS를 사용합니다.

일단 이 게시물에서는 리눅스와 유닉스에서 DNS 서버 구성을 위해 사용되는 BIND 설치 및 구성에 대해 알아보도록 하겠습니다. DNS 개념에 관련된 글은 올 연말이나 내년 초에 올리도록 하겠습니다. 왜냐하면 그림 그리기가 너무 힘들어서요.  DNS 개념에 관련된 그림 그리려면 3~4일 정도는 그림만 그려야 할 것 같은 느낌이 들어서... 하하하...

일단 DNS 개념은 일반 서적이나 인터넷 자료를 참고해주시길 바랍니다. ^^;;;

■ CentOS 6.6에 BIND 설치

BIND는 리눅스/유닉스에서 가장 많이 사용되는 DNS 서비스를 수행하는 프로그램입니다. CentOS 6.6 설치 DVD 1번 ISO에는 아래와 같은 BIND RPM 패키지가 있습니다. 만약 가장 최신의 BIND 버전을 얻어 설치하려 한다면 http://www.isc.org/products/bind 웹사이트를 방문하여 다운로드 후 설치 및 설정을 하면 됩니다.

[root@dns ~]# cd /media/CentOS_6.6_Final/Packages/
[root@dns Packages]#
[root@dns Packages]# ls bind-9*
bind-9.8.2-0.30.rc1.el6.x86_64.rpm
[root@dns Packages]# 

이를 rpm 명령을 사용하여 아래와 같이 설치합니다.

[root@dns Packages]# rpm -ivh bind-9.8.2-0.30.rc1.el6.x86_64.rpm
warning: bind-9.8.2-0.30.rc1.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing...                ########################################### [100%]
   1:bind                   ########################################### [100%]
[root@dns Packages]#
[root@dns Packages]# rpm -qa | grep bind-9
bind-9.8.2-0.30.rc1.el6.x86_64
[root@dns Packages]# 

원활한 서비스 테스트를 위해 아래와 같이 iptable 서비스를 중지하고 SELinux 설정값을 permissive로 변경합니다.

[root@dns Packages]# service iptables stop
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Unloading modules:                               [  OK  ]
[root@dns Packages]#
[root@dns Packages]# chkconfig iptables off
[root@dns Packages]#
[root@dns Packages]# setenforce permissive
[root@dns Packages]#
[root@dns Packages]# vi /etc/sysconfig/selinux

SELINUX=permissive

[root@dns Packages]# 

■ 테스트를 위한 도메인 이름 및 각 가상머신에 대한 호스트 이름/IP 주소

오호!! 리눅스 네트워크 테스트를 위해 10개 가상머신을 만들었었군요. ^^ 사용할 도메인 이름과 각 가상머신에 관련된 호스트 이름 및 IP 주소 정보는 아래와 같습니다.

도메인 또는 호스트명
도메인 이름 또는 IP 주소
도메인 이름
 localdcv.com
dns
192.168.80.10
dhcpntp
192.168.80.11
nfs01
192.168.80.12
web01
192.168.80.21
was01
192.168.80.22
db01
192.168.80.31
db02
192.168.80.32
db03
192.168.80.33
samba01
192.168.80.41
win81
192.168.80.51

Nameless Root 도메인(.)과 Top Level 도메인(com, co.kr, go.kr, net, org, gov)는 인터넷 관련 비영리 기관에서 관리하고 있습니다. 그리고 Secondary Level 도메인을 기업, 기관, 개인이 구매하여 도메인에 대한 관리 권한을 위임받는 것이죠. 그리고  그 도메인에 대한 DNS 서버는 도메인의 출발점이 되는 것입니다. Sub Level 또는 Child 도메인은 구매한 도메인을 쪼개어 계층적인 도메인으로 관리하기 위해 사용하는 것이고 조직 또는 지역별로 도메인 이름을 분류할 수 있습니다. 이런 것은 DNS 개념에서 다루도록 하겠습니다.

■ BIND 구성 파일

▶ /etc/named.conf

//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
options {
 listen-on port 53 { any; };
 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; };
 query-source port 53;
 recursion yes;
 /* 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;
        };
};
zone "." IN {
 type hint;
 file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

▶ /etc/named.rfc1912.zones

// named.rfc1912.zones:
//
// Provided by Red Hat caching-nameserver package
//
// 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 "localdcv.com" IN {
 type master;
 file "localdcv.zone";
 allow-update { none; };
};
zone "80.168.192.in-addr.arpa" IN {
 type master;
 file "192.168.80.rzone";
 allow-update { none; };
};




▶ /var/named/localdcv.zone

$TTL 86400
@       IN SOA dns.localdcv.com.   root (
                                        42      ; serial
                                        4H      ; refresh
                                        15M     ; retry
                                        1W      ; expire
                                        8H )    ; minimum
        IN NS   dns.localdcv.com.
dns          IN   A           192.168.80.10
dhcpntp    IN   A           192.168.80.11
nfs01        IN   A           192.168.80.12
www        IN   CNAME  web01
web01      IN   A           192.168.80.21
was01      IN   A           192.168.80.22
db01        IN   A           192.168.80.31
db02        IN   A           192.168.80.32
db03        IN   A           192.168.80.33
samba01  IN   A           192.168.80.41
win81       IN   A           192.168.80.51

▶ /var/named/192.168.80.rzone

$TTL 86400
@       IN SOA dns.localdcv.com.   root (
                                        42      ; serial
                                        4H      ; refresh
                                        15M     ; retry
                                        1W      ; expire
                                        8H )    ; minimum
        IN NS   dns.localdcv.com.
10 IN PTR dns.localdcv.com.
11 IN PTR dhcpntp.localdcv.com.
12 IN PTR nfs01.localdcv.com.
21 IN PTR web01.localdcv.com.
22 IN PTR was01.localdcv.com.
31 IN PTR db01.localdcv.com.
32 IN PTR db02.localdcv.com.
33 IN PTR db03.localdcv.com.
41 IN PTR samba01.localdcv.com.
51 IN PTR win81.localdcv.com.

▶ BIND 구성 파일의 Resource Record 의 종류

Record
설 명
$TTL
 이름 풀이 질의의 응답에 대한 정보를 임시 저장하는(Caching) 시간 정보이다.
SOA
 Start of Authority. 권한의 시작점
NS
 Name Server. 도메인(Domain)의 이름 서버(Name Server)를 나타낸다.
A
 정방향 검색(도메인 이름에 대한 IP 주소 풀이)을 위해 사용되는 레코드를 나타낸다. IPv4
AAAA
 정방향 검색을 위해 사용되는 레코드를 나타낸다. IPv6
CNAME
 Canonical Name. 별칭 이름을 나타낸다.
PTR
 Pointer. 역방향 검색(IP 주소에 대한 도메인 이름 풀이)을 하기 위해 사용되는 레코드를 나타낸다.

■ BIND 서비스 테스트

1). BIND 서비스 시작 종료

service named [ start | stop ]

2). 시스템 부팅 시 BIND 서비스 자동 시작

chkconfig named [ on | off ]

3). dns 가상머신 eth0 설정 변경



[root@dns named]# service network restart
Shutting down interface Auto_eth0:  Device state: 3 (disconnected)
                                                           [  OK  ]
Shutting down interface eth0:                              [  OK  ]
Shutting down loopback interface:                          [  OK  ]
Bringing up loopback interface:                            [  OK  ]
Bringing up interface Auto_eth0:  Active connection state: activated
Active connection path: /org/freedesktop/NetworkManager/ActiveConnection/1
                                                           [  OK  ]
[root@dns named]# 

4). BIND 서비스 시작 및 이름 풀이 테스트

▶ DNS 서버에서 테스트

[root@dns named]# service named start
Starting named:                                            [  OK  ]
[root@dns named]# service named status
version: 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6
CPUs found: 2
worker threads: 2
number of zones: 18
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  27833) is running...
[root@dns named]#
[root@dns named]# ps -ef | grep named
named    27833     1  0 12:32 ?        00:00:00 /usr/sbin/named -u named
root     27862  2920  0 12:33 pts/0    00:00:00 grep named
[root@dns named]#
[root@dns named]# nslookup www.loc aldcv.com

Server:  192.168.80.10
Address: 192.168.80.10#53
www.localdcv.com canonical name = web01.localdcv.com.
Name: web01.localdcv.com
Address: 192.168.80.21

[root@dns named]# nslookup 192.168.80.10

Server:  192.168.80.10
Address: 192.168.80.10#53
10.80.168.192.in-addr.arpa name = dns.localdcv.com.80.168.192.in-addr.arpa.

[root@dns named]# nslookup 192.168.80.11

Server:  192.168.80.10
Address: 192.168.80.10#53
11.80.168.192.in-addr.arpa name = dhcpntp.localdcv.com.80.168.192.in-addr.arpa.

[root@dns named]#
[root@dns named]# nslookup www.naver.com

Server:  192.168.80.10
Address: 192.168.80.10#53
Non-authoritative answer:
www.naver.com canonical name = www.naver.com.nheos.com.
Name: www.naver.com.nheos.com
Address: 125.209.222.142
Name: www.naver.com.nheos.com
Address: 202.179.177.21

[root@dns named]# nslookup www.daum.net

Server:  192.168.80.10
Address: 192.168.80.10#53
Non-authoritative answer:
www.daum.net canonical name = www.g.daum.net.
Name: www.g.daum.net
Address: 180.70.134.91
Name: www.g.daum.net
Address: 180.70.134.19

[root@dns named]# nslookup www.google.com

Server:  192.168.80.10
Address: 192.168.80.10#53
Non-authoritative answer:
Name: www.google.com
Address: 216.58.200.164

[root@dns named]# 




▶ Windows 8.1 가상머신에서 테스트


NIC 네트워크 설정

 윈도우키 + r => control.exe ncpa.cpl 명령 실행

Ethernet0 NIC에 대한 속성 정보를 선택합니다. (아이콘 클릭 후 마우스 오른쪽 버튼)


Internet Protocol Version 4 (TCP/IPv4)를 선택한 후 속성을 선택합니다. 그리고 기본 설정 DNS 서버 IP 주소를 변경한 후 고급을 선택합니다.


DNS 탭(Tab)을 선택한 후 다음 DNS 접미사 추가를 선택한 후 추가 버튼을 눌러 localdcv.com 을 입력합니다. 이는 호스트 이름만으로  통신하려 할 때 선택한 접미사와 결합하여 전체 도메인 이름(FQDN)을 만들어 줍니다.


설정이 끝났다면 확인 버튼을 눌러 네트워크 설정을 완료합니다. 그리고 변경한 내용을 적용하기 위해 아래와 같이 NIC을 비활성화/활성화합니다.



그리고 명령창(cmd)을 열어 nslookup 명령을 사용하여 이름 풀이를 해봅니다. (윈도우키 + r => cmd 명령)


웹브라우저(Internet Explorer)를 실행하여 주소창에 http://www.localdcv.com를 입력하여 웹 서버로 접속되는지 확인합니다.



탐색기를 열어 도메인 이름으로 Samba(삼바) 서버에도 접근이 가능한지 확인합니다.


여기까지 DNS 서버 간단 구성 및 테스트에 대해 알아보았습니다. 다음 게시물에서는 iptables에 대해 알아보도록 하겠습니다.




No comments:

Post a Comment