Linux

[Linux] DNS 서버 구축 및 이중화 구성 (Master & Slave)

현또다 2024. 6. 24. 14:59

▶ DNS (Domain Name Server) 란 ?  

'google.com' 또는 'naver.com' 과 같이 웹사이트를 엑세스하는 데 사용되는 고유하면서도 기억하기 쉬운 주소인 도메인 이름을 네트워크에서 서로를 식별하는 데 사용하는 인터넷 프로토콜(IP) 주소로 변환하는 인터넷 표준 프로토콜의 구성 요소

 

▶ Master & Slave  

- Master & Slave 는 주, 보조 관계이며 동기화를 통해 DNS 서버를 이중화함 ( Slave 서버는 여러개 사용 가능 )

- 데이터가 동기화되는 것은 Master 서버에서 관리하는 zone database에서만 가능

 

* DNS는 이중화에서 일반적으로 사용되는 Active-Standby 또는 Active-Active 형태로 구성되는 것이 아니라 동기화 과정을 통해 Master에 생성되어 있는 Zone 파일이 업데이트 되는대로 Slave로 전송됨

 

- Master : DNS 설정 변경의 주체로, 도메인 관련 정보에 대한 Zone 파일을 관리함
- Slave : Master 서버로부터 생성된 DNS 설정을 미러링하는 백업 서버 역할을 하며, Master로부터 Zone 파일을 복제함

 


▶ DNS 이중화 구성 실습  

[ 테스트 환경 ]

OS 버전 : Rocky Linux 8.9
* firewalld, SELinux 비활성화한 상태에서 테스트 진행

1. Master 설정 

1) BIND 패키지 설치

- BIND : DNS 네임 서버를 구축하고 레코드를 관리할 수 있도록 도와주는 패키지

dnf install bind bind-chroot bind-utils

 

2) hostname 변경

hostnamectl set-hostname dns.example.com

 

3) /etc/named.conf 파일 수정

- /etc/named.conf : DNS 서버의 전반적인 환경 설정을 담당하는 파일

vi /etc/named.conf
	listen-on port 53 { any; };			# DNS 53번 port에 접근할 ip 설정
	listen-on-v6 port 53 { none; };		# ipv6은 사용하지 않기 때문에 none으로 변경
	allow-query     { any; };			# 재귀 질의를 받을 수 있는 IP 대역

named-checkconf /etc/named.conf	# 설정 파일 오류 여부 체크

 

4) DNS zone 정보 추가

* zone 파일 경로 추가 시 /etc/named.conf에서 별도로 디렉토리 경로를 설정하지 않은 경우, /var/named 기준으로 상대 경로를 이용하여 zone 파일을 등록하게 됨

# 정방향 zone
zone "example.com" IN {
        type master;
        file "example.com.zone";
        allow-transfer { [ Slave IP ]; };
};

# 역방향 zone
zone "111.168.192.in-addr.arpa" IN {
        type master;
        file "example.com.re";
        allow-transfer { [ Slave IP ]; };

 

5) zone 파일 생성 및 권한 변경

cd /var/named

# 정방향 영역 zone 파일 생성 및 권한 변경
cp named.localhost example.com.zone
chmod 644 example.com.zone
chown root.named example.com.zone

# 역방향 영역 zone 파일 생성 및 권한 변경
cp named.localhost example.com.re
chmod 644 example.com.re
chown root.named example.com.re

 

6) zone 파일 레코드 수정

vi /var/named/example.com.zone		# 정방향

$TTL 1D
@       IN SOA  example.com. root (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        IN      NS      dns.example.com.	# Master
        IN      NS      slave.example.com.	# Slave
dns     IN      A       192.168.111.211	# Master
slave   IN      A       192.168.111.212	# Slave


# vi /var/named/example.com.re		# 역방향

$TTL 1D
@       IN SOA  example.com. root (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        IN      NS      dns.example.com.
        IN      NS      slave.example.com.
dns     IN      A       192.168.111.211
slave   IN      A       192.168.111.212
211     IN      PTR     dns.example.com.
212     IN      PTR     slave.example.com.

- IN : IN (Internet) 클래스 => 기본값으로 되어 있어 생략 가능
- NS : 해당 도메인의 네임서버 지정하는 레코드
- A : 해당 도메인의 실제 주소를 설정하는 레코드
- PTR : 헤딩 도메인에 대한 inverse 기능을 설정하기 위한 도메인으로, ip -> 도메인명 을 매핑하기 위해 사용

 

7) DNS 설정 관련 파일 오류 여부 체크

named-checkconf /etc/named.conf
named-checkconf /etc/named.rfc1912.zones
named-checkzone example.com /var/named/example.com.zone

 

8) /etc/resolv.conf 등록 및 named 서비스 재기동

vi /etc/resolv.conf
nameserver 127.0.0.1		# search example.com과 같음

systemctl restart named		# named 서비스 재시작
systemctl enable --now named	# named 서비스 활성화

 


2. Slave 설정 

1) ~3) 까지는 Master 와 동일하게 설정 !

 

4) DNS zone 정보 추가

vi /etc/named.rfc1912.zones

# 정방향 zone
zone "example.com" IN {
        type slave;
        masters { [ Master IP ]; };
        file "slaves/example.com.zone";
	masterfile-format text;		# Slave 에서 zone 파일 동기화 될 때 text 형태로 변환
};

# 역방향 zone
zone "111.168.192.in-addr.arpa" IN {
        type slave;
        masters { [ Master IP ]; };
        file "slaves/example.com.re";
	masterfile-format text;		# Slave 에서 zone 파일 동기화 될 때 text 형태로 변환
};

 

5) /etc/resolv.conf 등록 및 named 서비스 재기동

vi /etc/resolv.conf
nameserver 127.0.0.1		# search example.com과 같음

systemctl restart named		# named 서비스 재시작
systemctl enable --now named	# named 서비스 활성화

 


3. 설정 확인 (Client) 

1) BIND 패키지 설치

dnf install bind bind-chroot bind-utils		# 이걸 깔아야 nslookup 사용 가능

 

2) vi /etc/resolv.conf 수정

vi /etc/resolv.conf		# 제일 상단에 작성

nameserver 192.168.111.211		# master
nameserver 192.168.111.212		# slave

 

3) nslookup 으로 도메인 - IP 조회

nslookup [ hostname ]		# IP 주소 반환하는지 확인
nslookup [ IP 주소 ]		# 도메인 주소 반환하는지 확인