Profile picture

[Ubuntu] DNS(bind9) 이중화 구성하기

JaehyoJJAng2023년 06월 12일

Master & Slave

  • Master & Slave는 주,보조의 관계를 의미하며 동기화를 통해 DNS 서버를 이중화 할 수 있다
    • Slave 서버의 경우 여러 대 구성이 가능하다.
  • 데이터가 동기화 되는 것은 Master 서버에서 관리하는 Zone Database에서만 가능하다.

DNS는 이중화 환경에서 일반적으로 사용되는 Active-Standby 또는 Active-Active 형태가 아닌 동기화 과정 을 통해

Master에 생성되어 있는 Zone 파일이 업데이트 되는대로 Slave로 전송된다.
image

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

이중화 실습

실습 환경

  • OS: Ubuntu 22.04

1. Master 설정

1-1. BIND 패키지 설치

  • bind: DNS 네임 서버 구축 및 레코드를 관리할 수 있도록 도와주는 패키지

sudo apt-get install -y bind9

1-2. hostname 변경

hostnamectl set-hostname dns.jaehyo.com

1-3. /etc/bind/named.conf.options 파일 수정

  • /etc/bind/named.conf.options: DNS 서버의 전반적인 동작 방식과 옵션을 정의함.
options {
        directory "/var/cache/bind";

        forwarders {
          8.8.8.8;
        };

        allow-query { any; }; # DNS 쿼리를 허용할 클라이언트 IP 대역

        allow-query-cache {   # 캐시된 응답에 대한 쿼리를 허용할 수 있는 클라이언트 IP 대역
          192.168.219.0/24;
        };

        //========================================================================
        // If BIND logs error messages about the root key being expired,
        // you will need to update your keys.  See https://www.isc.org/bind-keys
        //========================================================================
        dnssec-validation auto;

        listen-on-v6 { any; };
        listen-on port 53 { any; }; # DNS 53번 포트에 접근할 클라이언트 IP 대역
};

named-checkconf 명령어를 사용하여 파일의 문법에 이상이 없는지 확인

named-checkconf /etc/bind/named.conf.options

1-4. DNS zone 정보 추가

zone 파일 경로 추가 시 /etc/bind/named.conf에서 별도로 디렉토리 경로를 지정하지 않은 경우, /etc/bind/named.conf.default-zones 파일을 기준으로 zone 파일을 등록하게 된다.

vi를 이용하여 /etc/bind/named.conf.default-zone 파일 맨 아래에 아래 내용을 추가해주자.

# 정방향 zone
zone "jaehyo.com" IN {
    type master;
    file "/etc/bind/db.jaehyo.com.zone";
    allow-transfer { [Slave 서버 IP]; };
};

# 역방향 zone
zone "219.168.192.in-addr.arpa" IN {
    type master;
    file "/etc/bind/db.jaehyo.com.re";
    allow-transfer { [Slave 서버 IP]; };
};

image


1-5. zone 파일 생성 및 권한 변경

# 해당 경로로 이동
$ cd /etc/bind

# 정방향 영역의 zone 파일 생성 및 권한 변경
$ cp db.local db.jaehyo.com.zone
$ chmod 644 db.jaehyo.com.zone
$ chown root.bind db.jaehyo.com.zone

# 역방향 영역의 zone 파일 생성 및 권한 변경
$ cp db.local db.jaehyo.com.re
$ chmod 644 db.jaehyo.com.re
$ chown root.bind db.jaehyo.com.re

1-6. zone 파일 레코드 수정

정방향

# vi /etc/bind/db.jaehyo.com.zone

$TTL    1D
@       IN      SOA     jaehyo.com. root (
                              0         ; Serial
                              1D        ; Refresh
                              1H        ; Retry
                              1W        ; Expire
                              3H )      ; Negative Cache TTL

@       IN      NS      dns.jaehyo.com.
@       IN      NS      slave.jaehyo.com.
dns     IN      A       192.168.219.144 ; Master
slave   IN      A       192.168.219.174 ; Slave

역방향

# vi /etc/bind/db.jaehyo.com.re

$TTL    1D
@       IN      SOA     jaehyo.com. root (
                              0         ; Serial
                              1D        ; Refresh
                              1H        ; Retry
                              1W        ; Expire
                              3H )      ; Negative Cache TTL

        IN      NS      dns.jaehyo.com.
        IN      NS      slave.jaehyo.com.
dns     IN      A       192.168.219.144 ; Master
slave   IN      A       192.168.219.174 ; Slave
144     IN      PTR     dns.jaehyo.com.
174     IN      PTR     slave.jaehyo.com.

레코드 간단 설명

  • IN: IN(Internet) 클래스 -> 기본값이기 때문에 생략 가능
  • NS: 해당 도메인의 네임서버 지정하는 레코드
  • A: 해당 도메인의 실제 주소 설정하는 레코드
  • PTR: 해당 도메인에 대한 inverse 기능을 설정하기 위한 레코드. IP -> 도메인명 을 매핑하기 위해 사용.

1-7. DNS 설정 파일 오류 체크

named-checkconf /etc/bind/named.conf
named-checkconf /etc/bind/named.conf.default-zones
named-checkconf /etc/bind/db.jaehyo.com.zone
named-checkconf /etc/bind/db.jaehyo.com.re

1-8. /etc/resolv.conf 등록

$ vi /etc/resolv.conf

nameserver 127.0.0.1

1-9. bind9 서비스 재기동

sudo systemctl restart bind9
sudo systemctl enable --now bind9

2. Slave 설정

  • Master 설정의 1 ~ 3번 챕터까지는 동일하게 진행한다.

2-4. DNS zone 정보 추가

/etc/bind/zones.rfc1918 파일의 맨 아래에 해당 내용을 추가해주자.

# 정방향 zone
zone "jaehyo.com" IN {
    type slave;
    masters { [Master IP]; };
    file "/etc/bind/slaves/jaehyo.com.zone";
    masterfile-format text;  # Slave에서 zone 파일 동기화할 때 text 형태로 변환 하겠다는 의미
};

# 역방향 zone
zone "219.168.192.in-addr.arpa" IN {
    type slave;
    masters { [Master IP]; };
    file "/etc/bind/slaves/jaehyo.com.re";
    masterfile-format text; 
};

image


2-5. /etc/resolv.conf 등록

$ vi /etc/resolv.conf

nameserver 127.0.0.1

2-6. bind9 서비스 재기동

sudo systemctl restart bind9
sudo systemctl enable --now bind9

3. DNS 테스트 (Client)

3-1. BIND 패키지 설치

sudo apt-get install -y dnsutils

3-2. /etc/resolv.conf 수정

$ vi /etc/resolv.conf

nameserver 192.168.219.144      # master
nameserver 192.168.219.174      # slave

3-3. nslookup 도메인 조회

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

image


Loading script...