Linux

[Ubuntu 20.04] DNS Master - Slave 이중화 구성

황동리 2024. 1. 19. 20:53
반응형

구성정보

WebServerDNS - MasterDNS - Slave

CPU 2 Core 2 Core 2 Core
Memory 2 GB 2 GB 2 GB
Storage 50 GB 50 GB 50 GB
Host IP 192.168.56.103 192.168.56.101 192.168.56.102

1. Master DNS 구성

 

1-1. Bind, resolvconf 설치

# sudo apt install -y bind9 resolvconf

 

1-2. 정방향 도메인 파일 경로 지정

Master DNS 서버로 사용할 IP 네임서버로 등록하기 위해 /etc/resolv.conf를 수정 해야하지만 resolve.conf 파일에서 직접 수정을 하면 서버를 재시작 했을 때, 다시 초기화가 된다.

 

그러므로 resolvconf 패키지를 설치하고 /etc/resolvconf/resolv.conf/head의 값을 수정해주면 head 파일에서 수정한 값을 /etc/resolv.conf 가 자동으로 받아온다.

# vi /etc/resolvconf/resolv.conf.d/head

---
nameserver Master DNS IP

그리고 정방향 도메인 파일 경로를 지정해주면 된다.

# vi /etc/bind/named.conf.local

---
zone "ksh-domain.com" {
        type master;	// master로 지정
        file "/etc/bind/ksh-domain.conf"; // 정방향 도메인 파일 경로 지정
};

 

1-3. 도메인 영역 파일 작성

# cp /etc/bind/db.local /etc/bind/ksh-domain.conf 	// 기본 정방향 도메인 파일을 복사해서 만들어준다.
# vi /etc/bind/ksh-domain.conf

---
$TTL    604800
@       IN      SOA     ksh-domain.com. root.ksh-domain.com. (
                              2         ; Serial	// 일련번호
                         604800         ; Refresh	// DNS 서버에 대한 정보를 새로고침 하는 시간 간격
                          86400         ; Retry		// DNS 서버에 재시도 요청을 보내는 시간 간격
                        2419200         ; Expire	// DNS 서버로부터 정보를 갱신하기 전에 기다리는 최대 시간 간격
                         604800 )       ; Negative Cache TTL	// DNS 서버에 정상적인 응답이 없는 경우, 응답을 캐시하는 시간 간격
;
@       IN      NS      ksh-domain.com.
@       IN      A       127.0.0.1
webserver       IN      A       10.0.2.4	// webserver.ksh-domain.com 주소의 IP를 10.0.2.4로 정의
  • TTL: DNS 서버 정보가 캐시될 수 있는 시간, DNS 서버 정보의 데이터 유효기간을 설정
  • SOA: 해당 도메인에 대한 기본적인 속성을 지정
  • NS: 해당 도메인을 관리하는 서버를 정의
  • A: 도메인 이름과 IP 주소를 매핑

DNS 서버를 현재 서버로 지정하고 webserver.ksh-domain.com 주소를 URL에 적었을 때, 10.0.2.4로 보내주어서 웹 페이지에 접속 할 수 있다.

2. Slave DNS 서버 구성

 

2-1. Bind, resolvconf 설치 (위와 동일)

 

2-2. 정방향 도메인 파일 경로 지정

slave 서버에서도 네임서버를 등록해주면 된다.

# vi /etc/resolvconf/resolv.conf.d/head

nameserver 192.168.56.101
nameserver 192.168.56.102

그 후, Master DNS 서버의 정방향 도메인 파일의 경로를 지정해준다.

zone "ksh-domain.com" {
        type slave;		// slave 지정
        masters { 192.168.56.101; }; // master 서버 지정
        file "/etc/bind/ksh-domain.conf";	// master 서버의 정방향 도메인 파일 경로 지정
};

3. Bind 서비스 다시 시작

 

Master, Slave DNS 서버 모두 Bind 서비스 다시 시작

# systemctl restart bind9

DNS 이중화

Master 서버가 다운될 때 Slave 서버가 마스터로 승격을 하려면 먼저 Master 서버가 켜졌는지 확인 하고 slave를 Master로 바꿔준다.

1. Master 서버 실행 중인지 확인

Slave 서버에 스크립트 작성 (monitor_dns.sh)

#!/bin/bash

MASTER_IP="192.168.56.101"				// DNS Master IP 입력

ping -c 3 $MASTER_IP > /dev/null 2>&1	// Master 서버로 ping을 보내서 ping이 가는지 안가는지 확인

if [ $? -ne 0 ]; then				// 마지막으로 실행된 명령의 종료 상태가 0이 아니면
    /usr/local/bin/failover.sh		// failover.sh 스크립트 실행
fi

스크립트 권한 변경

chmod 755 /usr/local/bin/monitor_dns.sh

2. Master 서버가 실행 중이지 않을 때

Master 서버가 장애로 인해 다운이 되었을 때, Slave 서버가 Master 서버로 대체하도록 설정

failover.sh 스크립트 작성

#!/bin/bash

sed -i 's/type slave;/type master;/' /etc/bind/named.conf.local 	// slave 서버를 master 서버로 대체하도록 설정

systemctl restart bind9

스크립트 권한 변경

chmod 755 /usr/local/bin/failover.sh

 

Master 서버가 실행 중 인지 계속 확인하기 위한 시스템 타이머 설정
/etc/systemd/system/monitor_dns.timer

[Unit]
Description=DNS Monitoring Timer

[Timer]
OnUnitActiveSec=1m			// 1m 시간 간격으로 계속 반복해서
Unit=monitor_dns.service	// monitor_dns.service 실행

[Install]
WantedBy=timers.target

 

모니터링 스크립트에 대한 systemd 서비스
/etc/systemd/system/monitor_dns.service

[Unit]
Description=DNS Monitoring Service

[Service]
Type=simple
ExecStart=/usr/local/bin/monitor_dns.sh

 

systemd를 다시 로드하고 타이머 활성화

systemctl daemon-reload
systemctl enable monitor_dns.timer
systemctl start monitor_dns.timer

결과 확인

Slave 서버에서 nslookup 결과 확인

이중화 스크립트 동작 확인

모니터링 스크립트 시작

Master DNS 서버 다운

Slave DNS 에서 nslookup으로 결과 확인

Master DNS 서버 서버 시작

다시 Slave DNS 서버에서 nslookup으로 결과 확인

반응형

'Linux' 카테고리의 다른 글

RHCSA 공부 1일차  (0) 2024.04.04
Quota란?  (1) 2024.01.23
Local Repository 만들기  (0) 2024.01.12
리눅스 계정 설정파일  (1) 2023.12.21
LVM(Logical Volume Manager)란?  (1) 2023.12.18