dinist

DNS 서버 구축 [CentOS8, Debian10] 본문

리눅스

DNS 서버 구축 [CentOS8, Debian10]

dinist 2020. 11. 1. 23:08

DNS서버는 Master서버만 운영하거나

Master 서버와 Slave 서버 두가지로 운영할 수 있다.

 

이번에는 Master / Slave서버 모두를 구축해본다.

Master DNS Server  : Debian10

Slave DNS Server : CentOS8

- 운영체제 환경

Google Cloud Platform의 Compute Engine에 CentOS8버전과 Debian10버전을 각각 생성

 

다음 명령으로 DNS서버 구축을 위한 패키지 설치를 진행

(root권한 필요)

- 설치

CentOS8

dnf install bind bind-utils

Debian10

apt install bind9 bind9utils

 

- named.conf 및 zone 설정 (Master서버 - Debian10)

Master 서버 IP주소 : 10.10.10.20

패키지 설치가 완료되면 named.conf 파일을 수정하여 환경설정을 해준다.

데비안에서 bind9를 설치한 후 /etc/bind/named.conf 파일에 접근하면 다음과 같이 3개의 파일이 include 되어있다.

물론 include하지 않고 named.conf 파일 내에서 여러 설정을 해도 상관없다.

이중에서 named.conf.options 파일에 아래 내용을 추가 및 수정한다.

 

version none;					// 버전정보를 공개하지 않는다. 입력한 내용이 버전정보로 표시됨
allow-transfer {Slave서버 IP;};			//Zone 정보 Transfer를 위한 Slave 서버 IP 입력
allow-update {none;};
listen-on-v6 {none;}; 				//IPV6 사용 안함

allow-update는 네트워크가 고정ip가 아닌 dhcp로 운영중인 경우 동적dns(DDNS)로 작동하기 위해 설정하는것이다.

allow-update {none;}; 의 경우에는 어떠한 ip에도 동적으로 dns정보를 업데이트 하지 않고

allow-update {192.168.0.0/24;}; 의 경우에는 192.168.0.0 대역의 네트워크에서만 동적dns기능을 제공한다.

 

 

 

 

그리고 named.conf.default-zones 파일에 아래 zone영역을 추가한다.

 

zone "domain.com"{

type master;     // master 서버로 운영하겠다는 의미이다.

file "/etc/bind/domain.com";      // 해당 경로에 zone파일이 위치해 있음을 의미한다.

};

 

zone "10.10.10.in-addr.arpa"{    // 역방향 zone 설정

type master;   // master 서버로 운영하겠다는 의미이다.

file "/etc/bind/domain.com.re";     //해당 경로에 zone파일이 위치해 있음을 의미한다.

};

 

네트워크 대역이 10.10.10.0/24 라고 가정하여 역방향 zone을 작성했다.

만약 네트워크 대역이 192.168.2.0/24 라면

zone "2.168.192.in-addr.arpa"로 정하면 된다.

 

 

 

 

이제 zone파일을 만들어야 한다.

정방향용 zone 파일과 역방향용 zone 파일을 만들어보자. 역방향질의를 제공하지 않을거라면 만들지 않으면 된다.

/etc/bind/ 경로에 있는 db.local 파일을 domain.com 으로 복사한다.

cp /etc/bind/db.local /etc/bind/domain.com

그리고 이번엔 역방향 zone파일용으로 domain.com.re 으로 복사한다.

cp /etc/bind/db.local /etc/bind/domain.com.re

 

이제 방금 복사한 정방향 zone파일인 domain.com 파일을 수정한다.

 

처음에 편집기 실행시 이렇게 보인다.
zone파일 구성을 완료한 상황

 

맨 위에 TTL은 (Time To Live)의 줄임말이다. 해당 zone의 수명이다.

TTL 100은 이 ZONE파일의 수명이 100초라고 보면 된다.

명칭(?) 의미
TTL (Time To Live) 해당 zone의 수명(?),유효기간
@ named.conf.default-zones에 선언한 도메인 주소


예) named.conf.default-zones 파일에 "domain.com"에 대한 zone 추가 후
zone파일을 /etc/bind/domain.com이라고 한다면, /etc/bind/domain.com 파일에서 @는
domain.com이 된다.

IN 레코드 클래스를 지정한다. IN은 인터넷 클래스를 의미하며
IN이외의 클래스가 오는 경우는 거의 없다.
SOA (Start Of Authority) 해당 도메인에 대해서 네임서버가 인증된 정보를 가지고 있음을 의미하고, 정보를 최상의 상태로 유지 할 수 있도록 하는 레코드



SOA 다음에 있는 ns1.domain.com. 은
해당 도메인의 주 네임 서버 (마스터 네임서버)를 의미하고
그 다음 admin.domain.com은 dns관리자의 이메일 주소를 지정한다.
이메일 주소라면 admin@domain.com 형식일텐데 여기서는
@ 대신에 .으로 표현하고 있다.
이 zone파일 내에서 @는 다른 의미로 사용되고 있으므로
@ 대신에 .을 사용하여 메일주소를 작성한다.
또한 맨 마지막에.을 붙여야 한다.
admin.domain.com 으로 작성하면
실제로는 admin.domain.com.domain.com으로 된다.
admin.domain.com. 과 같이 맨 마지막에 .을 추가하여 주소의 끝을 뜻한다 라고 생각하면 된다.


은 1 ~ 4294967295 까지 범위로 지정할 수 있다.

이 값은 이 zone의 레코드를 업데이트 할때 값을 증가시켜줘야한다.
Master/Slave 서버 운영시 Slave서버는 Master서버의 Serial 값이, 자신이 가지고 있는 zone파일의 Serial 값보다 크면 새롭게 zone파일을 받아온다. (Master서버의 Serial값이 Slave서버의 Serial값 보다 같거나 작으면 zone Transfer를 하지 않는다.) 이 값은 주로 날짜 형식으로 지정한다.
형식 : yyyymmddCC 
yyyy : 년도 mm : 월 dd : 일 CC : 일련번호 (00 ~ 99)

ex) 2020년 11월 1일 첫번째 zone파일일 경우
2020110100; 으로 Serial을 설정하면 된다.
두번째 zone파일의 경우
2020110101;으로 Serial값을 증가시킨다.

 

Refresh : Slave가 Master의 변경 여부를 확인하는 주기 (새로고침 주기)
수정이 잦다면 3600(1H), 보통의 경우에는 6H ~ 12H로 설정

Retry : Slave와 Master와의 통신이 되지 않았을 경우에 재 시도를 할 시간 주기
재시도 대기시간이라고 보면 된다.
Refresh로 지정한 시간보다 적어야 이 기능이 제대로 작동할 것이다.

Expire : Slave서버에서 Expire로 지정된 시간동안 Master와 통신하지 못하면 해당 zone은 더이상 유효하지 않은 것으로 간주하고 해당 zone에 대한 응답을 하지 않는다.

NS NameServer를 의미한다.
NameServer의 주소를 지정해준다.

A IPv4 형식의 IP주소를 의미한다. A타입으로 입력시에는 맨뒤에 .을 붙일 필요가 없다.
공백

@ IN NS 로 시작하는 부분도 있고
공백 IN NS 로 시작하는 부분도 있다.

@는 앞서 위에서 설명을 했고, 공백은 바로 위에 사용한 자원을 이어서 사용하겠다는 의미이다.
@는 domain.com 이었고, 그 다음줄의 공백 라인은 @의 domain.com을 마찬가지로 사용하겠다는 의미이다.

공백 IN A 10.10.10.10은  domain.com의 IPv4 주소가 10.10.10.10 입니다 라는 의미가 된다.

CNAME Canonical Name을 의미한다. 별칭을 생각하면 된다. (Alias)

www IN CNAME domain.com. 의 의미 : 
www : www 뒤에 .이 없으므로 www.domain.com &  으로 설정된다.
IN : 인터넷 클래스를 의미
CNAME : Canonical Name을 설정하겠다는 의미
domain.com. : domain.com을 의미

-> www.domain.com은 domain.com 입니다 라는 의미가 된다.

init IN CNAME www는

init.domain.com은 www.domain.com입니다 라는 의미가 된다.

www.domain.com은  은 domain.com 이었으므로

init.domain.com을 입력하면 domain.com의 ip주소를 알려줄것이다.

 

 

이제 역방향 zone파일을 수정한다. 

정방향에서는 못보던 PTR이 있다.

 

PTR : Domain Name Pointer를 의미한다. 앞서 zone 영역을 10.10.10 까지만 설정했는데

zone 파일에서 호스트 주소부분을 지정해준다.

10 IN PTR domain.com 의 의미는 10.10.10.10은 domain.com 이다. 라는 의미가 된다.

 

 

- named.conf 및 zone 설정 (Slave서버 - CentOS8)

Slave서버 IP 주소 : 10.10.10.30

/etc/named.conf 파일에서 다음 부분을 수정한다.

 

listen-on port 53 {any;};   // 허용할 ip대역을 입력해도 된다.

allow-query {any;};    // 허용할 ip대역을 입력해도 된다.

recursion no;     // 재귀 질의 기능 해제 (재귀질의 기능을 사용해야할 경우가 아니라면 해제를 권장)

 

그 다음 /etc/named.rfc1912.zones 파일에 다음 부분을 추가한다.

 

 

type slave : slave서버 이므로 type은 slave로 설정한다.

 

file "slaves/domain.com"  : file지시자에는 slaves/mater서버의 zone파일명을 입력한다.

기본 경로가 /var/named/ 이므로 실제 경로는 /var/named/slaves/master서버zone파일명 이된다.

 

masters {10.10.10.20;}; masters 지시자에는 master 서버의 ip 주소를 입력해준다.

저장을 해주고 systemctl start named 명령으로 데몬을 시작해준다.

 

이후 tail /var/log/messages 명령으로 zone transfer 기록이 있는지 확인하고

/var/named/slaves/ 디렉터리에 zone파일이 저장되어있는지 확인해본다.

저장 되어 있다면 slave 서버 설정이 완료 되었다.

 

dig명령어로 질의를 해본다.

 

dig @ns1.domain.com domain.com

dig @ns2.domain.com domain.com

 

결과가 잘 나오면 성공이다.

 

혹시 slave서버에서 /var/named/slaves/ 디렉터리 내에 있는 zone파일의 내용을 확인해보려면 글자가 깨지는 경우가 있는데 제대로 보고 싶다면

 

/etc/named.conf/rfc1912.zones 파일에서

slave 영역의 masterfile-format text;를 추가한다.