[Linux] DNS 서버 구축 및 이중화 구성 (Master & Slave)
▶ 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 주소 ] # 도메인 주소 반환하는지 확인