본문 바로가기

자격증/리눅스 마스터 1급

Part3) 네트워크 및 서비스의 활용 - 네트워크 서비스 | DNS 관리

V. DNS 관리


DNS의 이해

1) DNS서버의 정의

Domain Name System으로 숫자로 구성된 네트워크 주소인 IP주소를 사람이 이해하기 쉬운 명칭인 도메인이름으로 상호 매칭시켜주는 시스템이다.

도메인 이름 조건
도메인은 영어(a~z), 숫자(0~9), 특수문자 (-)의 글자조합으로 나타낼 수 있다.
영어의 대소문자 구분은 하지 않으며, 특수문자는 '-' (하이픈, 대쉬) 만 사용가능하다.
그리고 ' - ' 기호는 도메인의 처음과 끝에 넣을 수 없다.

DNS의 계층구조
가장 상위 개체는 루트도메인(root, '.')이며, 최상위 레벨은 국가(조직체), 두 번째 레벨은 기관, 최하위 레벨은 서버 이름을 사용한다.
ex) www.naver.com, www.yahoo.co.kr

2) DNS의 작동 구조

 도메인 질의 순서 (www.naver.com 에 대한 질의)

①   Client에서 가장 먼저 hosts파일을 확인한다

②   다음 Cache파일을 확인한다

③   Client에서 IP설정 시 지정한 DNS서버에게 "www.naver.com" 에 대한 질의를 한다

④   (KT DNS : 168.126.63.1)

⑤   DNS 서버에서 해당국가에 지정된 Root DNS에게 "com"을 관리하는 DNS서버를 질의한다

⑥   "com"을 관리하는 서버에게 "naver.com"을 관리하는 DNS서버를 질의한다

⑦   "naver.com"을 관리하는 서버에게 "www.naver.com"의 IP주소를 질의한다

⑧   DNS서버가 알아낸 "www.naver.com"의 IP주소를 Client에게 알려준다


3) DNS서버의 활용 분야

①주(Primary) DNS 서버

•가장 많이 사용되는 네임서버로, 이 자체가 도메인에 관련된 DB를 가지고 있고, 도메인 등록 시 이 주소를 등록하며, 주 네임서버에 등록된 도메인에 대한 IP로 변환해 주는 역할을 한다.


②보조(Secondary) DNS 서버

•주 네임서버의 백업서버로 주 네임서버의 DB를 가지고 있으며, 지속적으로 복제하였다가 주 네임서버에 문제가 생겼을 때, 네임서버의 역할을 한다.


③캐싱(Caching) DNS 서버
모든 사용자의 요청에 대해 여러 서버에 쿼리를 보내게 된다면 응답은 느리고, 엄청난 부하가 일어날 수가 있는데, 이러한 것을 캐싱 DNS가 해결해준다. 캐싱 DNS서버는 한번 쿼리한 도메인에 대해 TTL이 지나게되면 다시 쿼리를 한다
(DNS 서버 부하 줄이기 = TTL값 높이기 / 서버의 IP가 자주 바뀔 경우 = TTL값 낮추기)



DNS 관리 및 활용

1) DNS 설정 및 고급활용

①BIND 설치

root@bjkim:~# yum install bind bind-libs bind-chroot bind-utils caching-nameserver


주 설정파일 

 /etc/named.conf :  네임서버 데이터베이스 및 zone 파일의 위치, 접근제어등의 보안설정을 할 수 있는 메인 설정 파일이다.

 /var/named :  네임서버의 zone 파일이 존재하는 디렉터리이다.


②주네임 서버로 설정


[1] /etc/named.conf 파일 설정 - "bjkim.com"도메인에 대한 zone 관련 설정

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

▲ bjkim.com 도메인은 type이 master이고, 파일은 bjkim.com.zone으로 설정되어 있으며, 주 DNS이므로 업데이트를 허용하지 않는다.

(저장경로: /var/named 또한 [bind-chroot 패키지 설치 설정 시] /var/named/chroot/var/named)



[2] zone 파일 설정

$TTL 86400
@   IN   SOA   ns.superuser.co.kr. root.bjkim.com. (
              20180901       ; 시리얼 값(년월일시간)으로 셋탕
              3H             ; 보조 네임서버가 주 네임서버에 접속하는 시간
              15M            ; 접속 실패 시 다시 시도할 시간 간격
              1W             ; 주 네임서버에서 데이터가 없다면 1주 이후에 지워짐
              1D )           ; 위에서 설정한 TTL값과 같은 의미
;
     IN   NS   ns.superuser.co.kr.    ; 도메인을 소유한 주 DNS의 도메인
     IN   NS   ns2.superuser.co.kr.   ; 도메인을 소유한 보조 DNS의 도메인
     IN   MX   10 mail.bjkim.com.     ; 메일을 보낼 도메인 또는 주소
     IN   TXT  "v=spf1 ip4:192.168.0.1 ~ all"
     IN   A    192.168.0.1            ; 도메인이 찾아갈 IP 주소
www  IN   A    192.168.0.1            ; www.도메인이 찾아갈 IP주소
mail IN   A    192.168.0.1            ; 메일서버 IP
*    IN   A    192.168.0.1            ; 모든 서브 도메인이 찾아갈 서버 IP 주소

 옵션

 의미 

 $TTL 

 SOA레코드의 Minimum항목에 설정되어 있는 값과 같으며, $TTL값이 전의 값보다 우선시 된다.

 @ 

 origin 도메인을 의미하며, /etc/named.conf 파일에 설정되어 있는 도메인명을 의미한다. (반드시 "."로 끝표시)

 SOA 레코드 

 해당 도메인에 대한 네임서비스의 모든 권한이 여기에 있음을 뜻한다.

 Serial

 주 네임서버와 보조네임서버의 연동을 어떻게 할 것인가에 대한 설정이다.

 Refresh

 보조 네임서버에서는 1차 네임서버의 변경된 값들이 있는가를 주기적으로 체크하게 되는 값이다. 

 Retry 

 2차 네임서버가 1차 네임서버로의 접근이 안될 경우 2차 네임서버는 주기적으로 접근을 시도하는 값이다.

 Expire 

 retry주기마다 한번씩 지속적으로 연결을 시도하였으나 결국 expire시간동안 계속해서 연결이 되지 않으면 보조 네임서버는 해당 도메인의 정보가 삭제되었다고 판단해 이후부터는 연결을 시도하지 않는다. 

 Minimum 

 TTL값으로 해당 도메인의 정보를 다른 네임서버에서 가져갔을 때 가져간 도메인 정보를 얼마나 보관하고 있을 것인가에 대한 시간 값이다.

 NS레코드 

 해당 도메인의 네임서버를 지정하는 레코드이다.

 A레코드 

 해당 도메인의 실제 IP주소를 설정하는 레코드이다. 

 MX레코드

 메일서버를 설정하는 레코드이다. 

 CNAME레코드

 IP가 아닌 특정 도메인으로 설정하기 위해 사용한다. 

 PTR레코드

 IP주소에 대해 도메인명을 매핑해주며 Reverse Zone 파일에서 사용된다. 

 (ex.  1.0.168.192.in-addr.arpa.  IN PTR  bjkim.com.)

 TXT레코드 

 임의의 문자열을 추가하는 레코드 이다. 

 AAAA레코드 

 IPv6에서 사용되는 A레코드이다. 



[3] 설정 파일 검증


 named.conf 설정파일 검증

root@bjkim:~# named-checkconf /etc/named.conf

▲아무런 메세지가 없으면 정상



 zone 파일 검증

root@bjkim:~# named-checkzone bjkim.com /var/named/bjkim.com.zone
zone bjkim.com/IN: loaded serial 20180901
OK

▲OK 메세지를 보여주면 정상 (잘못 설정 시 위치와 내용을 알려줌)



③보조네임 서버로 설정

zone "bjkim.com" IN {type slave; masters {192.168.0.129;}; file "bjkim.com.zone"; };

▲ bjkim.com 도메인 type은 slave이고, master 서버는 192.168.0.129이며, zone 파일명은 bjkim.com.zone으로 설정되어 있다.


④캐싱 서버로 설정


캐싱 네임서버는 대부분 리눅스 배포판에서 패키지로 제공되는 bind는 캐싱 기능이 설정된 상태여서 따로 복잡한 설정이 필요없다.

(/etc/named.conf 파일의 'view'에 설정되어 있음)

view localhost_resolver   {
       match-clients      { any; };
       match-destinations { any; };
       recursion yes;
       include "/etc/named.rfc1912.zones";
};


⑤DNS의 서비스 시작(named)

root@bjkim:~# service named start
named를 시작 중:              [ OK ]
root@bjkim:~# tail -f /var/log/messages
~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~

▲ 네임서버를 시작한 후에는 /var/log/messages파일을 확인하여, bind가 정상인지 체크한다.



⑥DNS 도메인 테스트


host 명령어

root@bjkim:~# host bjkim.com localhost
Using domain server:
Name: localhost
Address: 127.0.0.1#53
Aliases:

bjkim.com has address 192.168.0.1
bjkim.com mail is handled by 10 mail.bjkim.com.
root@bjkim:~# host -t txt bjkim.com localhost
Using domain server:
Name: localhost
Address: 127.0.0.1#53
Aliases:

bjkim.com descriptive text "v=spf1 ip4:192.168.0.1 ~all"

▲host 명령을 통해 도메인 localhost DNS를 조회 하였고, -t 옵션을 사용해 TXT 레코드를 조회한 결과



dig 명령어

root@bjkim:~# dig bjkim.com @localhost
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>>
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11774
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;bjkim.com.			IN	A

;; ANSWER SECTION:
bjkim.com.		5	IN	A	192.168.0.1

;; AUTHORITY SECTION:
bjkim.com.		5	IN	NS	ns.superuser.co.kr.

;; Query time: 35 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Aug 31 03:48:01 2018
;; MSG SIZE  rcvd: 77



⑦DNS를 이용한 로드 밸런싱

root@bjkim:~# host naver.com
naver.com has address 202.131.30.12
naver.com has address 220.95.233.171
naver.com has address 220.95.233.172
naver.com has address 202.131.30.11
naver.com mail is handled by 10 mx-1.naver.com.
naver.com mail is handled by 10 mx2.naver.com.
naver.com mail is handled by 10 mx3.naver.com.



2) DNS 업데이트

 캐시 DNS를 사용한다면, 주기적으로 루트 네임서버 정보가 들어있는 데이터베이스 파일을 업데이트 해주어야 한다. 캐시 DNS는 루트 네임서버 정보 외에는 각 도메인에서 정의된 TTL값에 따라 업데이트 되게 된다. 하지만 루트 네임서버 정보 파일은 자주 바뀌지 않지만 주기적으로 업데이트 시켜줘야 한다.

루트 네임서버 정보파일 :  /var/named/named.ca
root@bjkim:~# cd /var/named/
root@bjkim: named# weget ftp://ftp.rs.internic.net/domain/named.root
root@bjkim: named# cat named.root > named.ca