본문 바로가기
정보보안/이론

[KITRI] Day17. 네임 서버 master, slave

by 민-Zero 2020. 5. 19.

네임 서버 구축 순서

앞서 진행한 네임서버 구축 순서를 정리하면 다음과 같다.

 

0. 패키지 확인

패키지 : bind, bind-utils, bind-libs, ...

파일 : 설정 - /etc/named.conf, /etc/rndc.conf, /etc/rndc.key, /etc/named.rfc1912.zones(추가), /etc/named.root.hints(추가), 영역 - /var/named/*.zone

rpm -e bind-chrootchroot 지우고 시작

 

1. 설정파일 생성 및 작성

설정파일 : /etc/named.conf 전역 설정파일

options {

listen-on port 53 {};

listen-on-v6 port 53;

recursion yes/no; 재귀적 질의 할것인지 안할것인지

allow-query {};

allow-query-cache {}; recursion을 할것이면 여기도 같이 설정한다

};

ZONE "영역명" {

type master/slave/hint;

file "파일명"; <- 영역명.zone

};

 

2. 설정파일 점검

점검명령어 : named-checkconf

named-checkconf /etc/named.conf

 

3. 영역 설정파일 : /var/named/*.zone

$TTL 시간 : 기본 ttl 시간설정. 기본값 1D

$ORIGIN 영역명 : 반드시 영역명 맨뒤에 .을 찍어 루트도메인을 표시해야한다.

 

영역명 IN SOA : Master NS 관련 설정

master NS 관리자E-mail ( 시리얼 갱신주기 재시도 만료 최소TTL )

영역명 IN NS : Master/Slave NS연결

 

4. ZONE파일 점검명령어 : named-checkzone

named-checkzone 영역명 영역파일명

 

ZONE 파일 설정하는 방법

ZONE 파일에 일일이 도메인을 작성하려면 번거롭기 때문에 다양한 방식으로 작성할 수 있도록 제공된다.

 

1. $ORIGIN과 상관없이 설정하는 방법: 모든 도메인명에 .으로 마무리를 한다

$ORIGIN kmy.co.ki.

kmy.co.ki. IN SOA ns1.kmy.co.ki. root.kmy.co.ki. (

                   2020051800 ;serial number

                   3H ;refresh

                   15M ;retry

                   1w ;expire

                   1D   ) ;minimum TTL

kmy.co.ki. IN NS ns1.kmy.co.ki.

kmy.co.ki. IN NS ns2.kmy.co.ki.

www.kmy.co.ki. IN A 123.123.123.123

 

2. $ORIGIN을 적극적으로 이용하는 방법 : ORIGIN == @, (.)을 생략하면 ORIGIN(@)이 뒤에 따라붙는다.

만약 왼쪽의 @, www 와같은 질문이 생략된 경우 위에 질문 도메인이 아래로 상속된다.

$ORIGIN kmy.co.ki.

@  IN SOA    ns1   root (

         2020051800 ;serial number

         3H ;refresh

         15M ;retry

         1w ;expire

         1D    ) ;minimum TTL

@  IN NS  ns1.kmy.co.ki.

@  IN NS  ns2.kmy.co.ki.

www IN A 123.123.123.123

해당 설정 내용은 1번에 작성한 zone 내용과 완전히 동일하게 적용된다.

 

3. $ORIGIN을 수정, 이용하는 방법(.을 생략해도 상관없는 방법)

kmy.co.ki. -> co.ki. -> ki. -> .

 

$ORIGIN .

kmy.co.ki  IN SOA  ns1.kmy.co.ki.  root.kmy.co.ki.  (

2020051800 ;serial number

3H ;refresh

15M ;retry

1w ;expire

1D ) ;minimum TTL

kmy.co.ki IN NS ns1.kmy.co.ki.

kmy.co.ki IN NS ns2.kmy.co.ki.

www.kmy.co.ki IN A 123.123.123.123

ORIGIN을 최상위 루트 도메인으로 설정하였으므로 도메인을 입력할때 .을 생략해도 무방하다.

 

Master, Slave 서버 구축

두개의 서버 CentOS5, CentOS8 을 이용하여 Master, Slave 를 구축해보자.

우선 5를 마스터로 설정하기위해 기본적인 설정 파일들을 생성하자.

 

패키지를 다운받을 경우 자동 생성되지만 생성되는 파일을 이용하지 않고 직접 구축해보기 위해 샘플파일들을 복사해 /etc에 가져온다.

 

복사 수행후 named.conf에서 options를 제외한 모든 내용을 지우고 options의 설정을 완료하고, 내가 설정한 도메인이 아닐 경우 최상위 도메인에 재귀적 질의를 수행하기 위해 루트 도메인을 hint 서버로 설정을 하면 기본적인 NS서버로의 설정이 완료된다.

 

설정한 named.conf파일이 문법 오류가 있는지 없는지 확인할떄 named-checkconf /etc/named.conf 를 하면 문법 오류등을 확인해 준다. 문법 오류가 없을경우 아무런 내용이 출력되지 않으며 오류가 있을경우 오류를 출력해준다. 경로를 사용하지 않으면 기본 위치인 /etc/named.conf를 조회한다.

 

전역설정 파일인 named.conf를 완료했으므로 이번에는 루트 도메인의 ZONE 설정에서 file에 작성한 파일을 생성해야 한다. 해당 파일은 설정되어 있는 기본 위치인 /var/named에 존재해야 한다. 만약 없다면 service named restart 를 수행하면 named가 시작되지 않는다.

해당 파일은 dig 명령어를 통해 작성되므로 dig 명령어를 통해 해당 파일의 내용을 작성한다.

 

그럼 local nameserver가 생성되었으므로 resolv.conf에 설정 되어있는 기본 NS 168.126.63.1를 직접 생성한 127.0.0.1 네임서버를 통해 질의되도록 해서 수행한다.

 

그럼 nslookup 등을 사용할때 기본적으로 내가 생성한 네임서버에 질의를 하게 된다.

 

이제 나만의 도메인을 생성하고 서비스 하기 위해 해당 서버를 Master name로 설정하자

해당 서버를 kmy.co.ki 라는 도메인의 마스터 서버로 설정하기 위해 ZONE 설정을 생성하고 type을 마스터로 설정한다.

그리고 /var/named/kmy.co.ki.zone 생성 후 편집하면 된다.

 

zone파일 생성을 완료했으므로 오류가 있는지 확인하면 된다.

named-checkzone 명령어를 통해 문법적 오류가 있는지 확인하고 OK문구가 출력되면 정상적으로 설정이 완료된 것이다.

 

서비스 재시작을 통해 설정을 적용하고 정상적으로 NS가 동작하는지 확인하기 위해 임의로 설정한 도메인에 대한 질의를 수행했을때 설정한 IP가 출력된다면 마스터 서버의 설정이 정상적으로 완료된 것이다.

 

슬레이브 서버 (centos 8) 를 구축하기 위해 bind로 NS서버 패키지가 설치 되어있는지 확인하고 NS 구축을 수행하자.구축은 동일하며 설정값만 조금씩 바꾸면 된다.

CentOS8의 경우 bind 패키지를 설치할 경우 기본적으로 필요한 파일들이 자동으로 생성된다. 따라서 해당 위치에서 필요한 파일들을 설정 하면 된다.

 

기본적인 전역설정은 마스터 NS에서 설정한것과 동일하게 수행하면 된다. 버전이 변경되며 추가된 옵션이 존재하는데 recursion 옵션의 경우 해당 설정을 yes로 설정해야 재귀적 질의 과정을 통해 외부 도메인에 대한 질의를 최상위 도메인에 수행할수 있기 때문에 yes로 설정하면 된다. 이외에 dnssec 같은 경우 나중에는 꼭 설정해야 하지만 지금은 기본적인 DNS 구축을 수행하여 필요없기 때문에 설정 내용을 지우자.

named-checkconf 명령어를 통해 문법적 오류가 없음을 확인하였으면 해당 서버의 타입을 slave로 설정하기 위해 ZONE을 설정하자.

 

slave NS 설정 및 파일명

 

슬레이브의 경우 /etc/named.conf에 아래와 같이 ZONE을 설정한다. 

ZONE "영역명" IN {

type slave;

file "slaves/영역명.bak.zone";

masters { 마스터의 IP };

};

마스터의 영역명.zone파일을 다운받아 slaves 디렉토리에 지정한 이름으로 저장하자.

슬레이브의 경우 마스터가 설정한 내용을 똑같이 대답해주는 서버이기 때문에 /var/named 밑에 존재하는 slaves 라는 디렉토리에 zone파일을 마스터에서 다운받아 마스터의 설정을 그대로 사용하게 된다. 그래서 따로 zone파일에 대한 설정은 수행하지 않는다.

 

centos 5에서 zone파일을 전송할 수 있도록 방화벽을 iptables -I INPUT -p TCP --dport 53 -j ACCEPT로 열어 주어야 한다. 그럼 slave에서 설정 재적용을 위해 서비스를 systemctl restart named.service 로 재시작 하면 bak이란 이름의 존파일을 마스터에서 그대로 다운받아온다. 그럼 슬레이브 서버로써 동작을 수행하게 된다.

해당 파일은 마스터의 시리얼넘버를 통해 업데이트를 수행하므로 마스터에서 내용을 변경하고 시리얼넘버를 변경하지 않는다면 슬레이브는 변경사항을 적용하지 못해 동작하지 못하게 된다. 따라서 마스터서버에서 slave서버가 있을경우 zone파일을 수정할때 serial number를 반드시 변경해야 한다. 

service named restart로 바뀐 내용을 강제로 push할 수 도 있지만 refresh 타임이 되면 자동으로 내용을 받아가기도 한다.

 

 

댓글