Tuesday, April 17, 2018

CentOS 7.3 리눅스 네트워크 ] 13.1 DNS - 서버 간단 구성


안녕하세요. 썬구루입니다. 이 게시물에서는 CentOS 7.3 리눅스 기반 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 7.3에 BIND 설치

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

[root@dns01 ~]# df -h | grep sr0

/dev/sr0             7.8G  7.8G     0 100% /run/media/root/CentOS 7 x86_64

[root@dns01 ~]# cd /run/media/root/CentOS\ 7\ x86_64/Packages/
[root@dns01 Packages]#
[root@dns01 Packages]# ls bind*

bind-9.9.4-37.el7.x86_64.rpm            bind-lite-devel-9.9.4-37.el7.x86_64.rpm
bind-chroot-9.9.4-37.el7.x86_64.rpm     bind-pkcs11-9.9.4-37.el7.x86_64.rpm
bind-devel-9.9.4-37.el7.i686.rpm        bind-pkcs11-devel-9.9.4-37.el7.i686.rpm
bind-devel-9.9.4-37.el7.x86_64.rpm      bind-pkcs11-devel-9.9.4-37.el7.x86_64.rpm
bind-dyndb-ldap-10.0-5.el7.x86_64.rpm   bind-pkcs11-libs-9.9.4-37.el7.i686.rpm
bind-libs-9.9.4-37.el7.i686.rpm         bind-pkcs11-libs-9.9.4-37.el7.x86_64.rpm
bind-libs-9.9.4-37.el7.x86_64.rpm       bind-pkcs11-utils-9.9.4-37.el7.x86_64.rpm
bind-libs-lite-9.9.4-37.el7.i686.rpm    bind-sdb-9.9.4-37.el7.x86_64.rpm
bind-libs-lite-9.9.4-37.el7.x86_64.rpm  bind-sdb-chroot-9.9.4-37.el7.x86_64.rpm
bind-license-9.9.4-37.el7.noarch.rpm    bind-utils-9.9.4-37.el7.x86_64.rpm
bind-lite-devel-9.9.4-37.el7.i686.rpm

[root@dns01 Packages]#
[root@dns01 Packages]# rpm -ivh bind-9.9.4-37.el7.x86_64.rpm

warning: bind-9.9.4-37.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:bind-32:9.9.4-37.el7             ################################# [100%]

[root@dns01 Packages]# 

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

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

도메인 또는 호스트 이름
도메인 이름 또는 IP 주소
도메인 이름
localdcv.com
dns01
192.168.80.5
web01
192.168.80.10
was01
192.168.80.11
db01
192.168.80.12
dhcpntp
192.168.80.6
nfs01
192.168.80.7
samba01
192.168.80.8
win81
192.168.80.20

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.
//
// See the BIND Administrator's Reference Manual (ARM) for details about the
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html

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;

 /*
  - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
  - If you are building a RECURSIVE (caching) DNS server, you need to enable
    recursion.
  - If your recursive DNS server has a public IP address, you MUST enable access
    control to limit queries to your legitimate users. Failing to do so will
    cause your server to become part of large scale DNS amplification
    attacks. Implementing BCP38 within your network would greatly
    reduce such attack surface
 */
 recursion yes;

 /* Path to ISC DLV key */
 bindkeys-file "/etc/named.iscdlv.key";
 managed-keys-directory "/var/named/dynamic";

 pid-file "/run/named/named.pid";
};

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 dns01.localdcv.com.   root (
                                        42      ; serial
                                        4H      ; refresh
                                        15M     ; retry
                                        1W      ; expire
                                        8H )    ; minimum
        IN NS   dns01.localdcv.com.
dns01       IN   A           192.168.80.5
dhcpntp IN   A           192.168.80.6
nfs01       IN   A           192.168.80.7
samba01   IN   A           192.168.80.8
web01      IN   A           192.168.80.10
was01      IN   A           192.168.80.11
db01        IN   A           192.168.80.12
win81       IN   A           192.168.80.20
www       IN   CNAME       web01

▶ /var/named/192.168.80.rzone

$TTL 86400
@       IN SOA dns01.localdcv.com.   root (
                                        42      ; serial
                                        4H      ; refresh
                                        15M     ; retry
                                        1W      ; expire
                                        8H )    ; minimum
        IN NS   dns01.localdcv.com.
5 IN PTR dns01.localdcv.com.
6 IN PTR dhcpntp.localdcv.com.
7 IN PTR nfs01.localdcv.com.
8 IN PTR samba01.localdcv.com.
10 IN PTR web01.localdcv.com.
11 IN PTR was01.localdcv.com.
12 IN PTR db01.localdcv.com.
20 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 서비스 시작 종료

systemctl [ start | stop ] named

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

systemstl [ enable | disable ] named

3). DNS01 가상머신 NIC 설정 변경

아래와 같은 명령을 실행하여 Search Domain을 설정한다. 이는 호스트 이름만으로 검색 시 자동으로 호스트 이름과 도메인 이름을 결합하여 풀 도메인 이름(FQDN)으로 검색을 할 수 있도록 해준다.

[root@dns01 Packages]# nmtui

아래와 같은 화면이 나타나면 Edit a connection을 선택하기 위해 엔터키를 누른다.


아래와 같이 네트워크 인터페이스 이름 정보가 나타나면 eth0 또는 ens32를 선택한 후 엔터키를 누른다.


아래와 같은 화면으로 전환되면 Search domains 우측에 Add를 선택하여 엔터를 누른 후 localdcv.com이라 입력한다.


Search domains를 설정하였다면 마우스 휠 버튼으로 화면을 내려 OK를 선택한 후 엔터키를 누른다.


다음과 같은 화면이 나타나면 Back을 선택한 후 엔터키를 누른다.


아래와 같은 화면이 나타나면 Quit 를 선택한 후 엔터키를 누른다.


설정을 완료하였다면 적용을 위해 아래와 같은 명령을 실행합니다.

[root@dns01 Packages]# systemctl restart network




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

▶ DNS 서버에서 테스트

[root@dns01 Packages]# systemctl enable named

Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service.

[root@dns01 Packages]#
[root@dns01 Packages]# systemctl start named
[root@dns01 Packages]#
[root@dns01 Packages]# firewall-cmd --permanent --add-service=dns

success

[root@dns01 Packages]# firewall-cmd --reload

success

[root@dns01 Packages]#
[root@dns01 Packages]# systemctl status named
● named.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2017-02-04 23:07:43 EST; 1h 39min ago
  Process: 4614 ExecStart=/usr/sbin/named -u named $OPTIONS (code=exited, status=0/SUCCESS)
  Process: 4611 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z /etc/named.conf; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)
 Main PID: 4617 (named)
   CGroup: /system.slice/named.service
           └─4617 /usr/sbin/named -u named

Hint: Some lines were ellipsized, use -l to show in full.
[root@dns01 Packages]#

[root@dns01 Packages]# ps -ef | grep named

named     4617     1  0 Feb04 ?        00:00:00 /usr/sbin/named -u named

[root@dns01 Packages]#
[root@dns01 Packages]# nslookup www.localdcv.com
Server:  192.168.80.5
Address: 192.168.80.5#53

www.localdcv.com canonical name = web01.localdcv.com.
Name: web01.localdcv.com
Address: 192.168.80.10

[root@dns01 Packages]# nslookup 192.168.80.10
Server:  192.168.80.5
Address: 192.168.80.5#53

10.80.168.192.in-addr.arpa name = web01.localdcv.com.

[root@dns01 Packages]#
[root@dns01 Packages]# nslookup www.naver.com
Server:  192.168.80.5
Address: 192.168.80.5#53

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

[root@dns01 Packages]#
[root@dns01 Packages]# nslookup www.google.com
Server:  192.168.80.5
Address: 192.168.80.5#53

Non-authoritative answer:
Name: www.google.com
Address: 216.58.197.196

[root@dns01 Packages]# 

▶ 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 서버 간단 구성 및 테스트에 대해 알아보았습니다.



No comments:

Post a Comment