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 파일 복제.
이중화 실습
실습 환경
- 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]; };
};
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;
};
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 주소 ] # 도메인 주소 반환하는지 테스트