[Ubuntu] 09. DNS - DNS 보조 서버(Slave Server) 및 전달자(Forward)를 구성
카테고리: UBUNTU
🔔 DNS 보조 서버(Slave Server) 및 전달자(Forward)를 구성
■ DNS 마스터 서버 호스트에서 구성
$ cat named.conf
...
...
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
# 추가
include "/etc/bind/named.conf.internal-zones";
$ cat /etc/default/named
# IPv6를 사용하지 않고 IPv6 관련 로그도 표시하지 않는 경우 변경 가능
# IPv4만 사용하도록 BIND 설정
OPTIONS="-u bind -4"
$ vi /etc/bind/named.conf.options
acl internal-network {
192.168.219.0/24;
};
options {
directory "/var/cache/bind";
...
...
allow-query { localhost; internal-network; };
# 영역 파일을 전송할 수 있도록 보조 서버 추가
allow-transfer { localhost; 192.168.219.192; };
recursion yes;
//========================================================================
// 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; };
};
$ cat /etc/bind/named.conf.internal-zones
zone "test.srv" IN {
type master;
file "/etc/bind/named/test.srv.lan";
allow-update { none; };
## slave 서버 주소
allow-transfer { 192.168.219.195; };
also-notify { 192.168.219.195; };
};
zone "219.168.192.in-addr.arpa" IN {
type master;
file "/etc/bind/named/219.168.192.db";
allow-update { none; };
## slave 서버 주소
allow-transfer { 192.168.219.195; };
also-notify { 192.168.219.195; };
};
$ cat /etc/bind/named/test.srv.lan
$TTL 86400
@ IN SOA dlp.test.srv. root.test.srv. (
2022081001 ;Serial
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
IN NS dlp.test.srv.
IN A 192.168.219.101
IN MX 10 dlp.test.srv.
dlp IN A 192.168.219.101
www IN A 192.168.219.102
$ cat /etc/bind/named/219.168.192.db
$TTL 86400
@ IN SOA dlp.test.srv. root.test.srv. (
2022081001 ;Serial
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
IN NS dlp.test.srv.
101 IN PTR dlp.test.srv.
102 IN PTR www.test.srv.
$ systemctl restart named
■ DNS 보조 서버 호스트에서 구성
$ cat /etc/bind/named.conf
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
# 추가
include "/etc/bind/named.conf.internal-zones";
$ cat named.conf.options
acl internal-network {
192.168.219.0/24;
};
options {
directory "/var/cache/bind";
....
....
allow-query { localhost; internal-network; };
allow-transfer { localhost; };
recursion yes;
....
....
dnssec-validation auto;
listen-on-v6 { any; };
};
$ cat named.conf.internal-zones
zone "test.srv" IN {
type slave;
file "test.srv.lan";
# master 서버 주소
masters { 192.168.219.192; };
also-notify { 192.168.219.192; };
};
zone "219.168.192.in-addr.arpa" IN {
type slave;
file "219.168.192.db";
# master 서버 주소
masters { 192.168.219.192; };
also-notify { 192.168.219.192; };
};
$ systemctl restart named
# Zone 파일 slave 서버로 복사되는 것을 확인
$ ls -al /var/cache/bind/ | grep -e "test" -e "219"
-rw-r--r-- 1 bind bind 315 Jun 12 21:21 219.168.192.db
-rw-r--r-- 1 bind bind 315 Jun 12 21:37 test.srv.lan
🔔 전달자 DNS Server 구성
전달자는 네임 서버가 직접 해석을 수행 하지 않고 지정된 다른 네임서버의 응답을 받아 클라이언트의 질의를 처리하는 방식
-
forward
-
only : 전달자에게만 질의
-
first : 전달자를 우선으로 질의
-
전달자에 쿼리 실패 시 root hint 질의
-
🔔 테스트 구성

■ 마스터 네임 서버
$ cat /etc/bind/named.conf
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
# 추가
include "/etc/bind/named.conf.internal-zones";
$ cat /etc/bind/named.conf.options
options {
directory "/var/cache/bind";
...
...
allow-query { any; };
allow-transfer { localhost; 192.168.219.103; };
recursion yes;
dnssec-validation auto;
listen-on-v6 { any; };
};
$ cat /etc/bind/named.conf.internal-zones
# 네트워크 및 도메인 이름에 대한 Zone 추가
zone "test.srv" IN {
type master;
file "/etc/bind/named/test.srv.lan";
allow-update { none; };
};
zone "219.168.192.in-addr.arpa" IN {
type master;
file "/etc/bind/named/219.168.192.db";
allow-update { none; };
};
$ cat /etc/default/named
# IPv6를 사용하지 않고 IPv6 관련 로그도 표시하지 않는 경우 변경 가능
# IPv4만 사용하도록 BIND 설정
OPTIONS="-u bind -4"
$ mkdir named
$ cat /etc/bind/named/test.srv.lan
$TTL 86400
@ IN SOA dlp.test.srv. root.test.srv. (
2022081001 ;Serial
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
IN NS dlp.test.srv.
IN A 192.168.219.101
IN MX 10 dlp.test.srv.
dlp IN A 192.168.219.101
www IN A 192.168.219.102
- 서버가 IP 주소에서 도메인 이름을 확인하는 Zone 파일을 작성
$ vim /etc/bind/named/219.168.192.db
$TTL 86400
@ IN SOA dlp.test.srv. root.test.srv. (
2022081001 ;Serial
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
IN NS dlp.test.srv.
101 IN PTR dlp.test.srv.
102 IN PTR www.test.srv.
■ 보조 네임 서버
$ cat /etc/bind/named.conf
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
# 추가
include "/etc/bind/named.conf.internal-zones";
$ cat /etc/bind/named.conf.options
options {
directory "/var/cache/bind";
....
....
allow-query { any; };
allow-transfer { localhost; };
recursion yes;
....
....
dnssec-validation auto;
listen-on-v6 { any; };
};
$ cat /etc/bind/named.conf.internal-zones
zone "test.srv" IN {
type slave;
file "test.srv.lan";
# master 서버 주소
masters { 192.168.219.102; };
also-notify { 192.168.219.102; };
};
zone "219.168.192.in-addr.arpa" IN {
type slave;
file "219.168.192.db";
# master 서버 주소
masters { 192.168.219.102; };
also-notify { 192.168.219.102; };
};
$ systemctl restart named
# Zone 파일 slave 서버로 복사되는 것을 확인
$ ls -al /var/cache/bind/ | grep -e "test" -e "219"
-rw-r--r-- 1 bind bind 315 Jun 12 21:21 219.168.192.db
-rw-r--r-- 1 bind bind 315 Jun 12 21:37 test.srv.lan
■ forward 서버
$ cat /etc/bind/named.conf.options
options {
directory "/var/cache/bind";
# DNS 재귀를 허용
recursion yes;
# 재귀 쿼리 허용을 어디서든 가능하도록 설정
allow-recursion { any; };
# DNS 존 전송을 로컬호스트(localhost)에서만 허용
allow-transfer { localhost; };
# DNSSEC 검증 비활성화
dnssec-validation no;
# 모든 IP 주소에서 DNS 쿼리를 수신하도록 설정
listen-on { any; };
listen-on-v6 { any; };
};
$ cat /etc/bind/named.conf.local
zone "test.srv" {
type forward;
forward only;
forwarders { 192.168.219.102; };
};
zone "219.168.192.in-addr.arpa" {
type forward;
forward only;
forwarders { 192.168.219.102; };
};
$ systemctl restart named
■ 확인
# 필요한 경우 자신의 DNS를 참조하도록 DNS 설정을 변경
$ vi /etc/netplan/01-netcfg.yaml
# change to self IP address
nameservers:
addresses: [192.168.219.101]
$ dig www.test.srv
; <<>> DiG 9.18.12-0ubuntu0.22.04.1-Ubuntu <<>> www.test.srv
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33371
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;www.test.srv. IN A
;; ANSWER SECTION:
www.test.srv. 85492 IN A 192.168.219.102
;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Fri Jun 16 14:05:52 UTC 2023
;; MSG SIZE rcvd: 57
$ dig -x 192.168.219.102
; <<>> DiG 9.18.12-0ubuntu0.22.04.1-Ubuntu <<>> -x 192.168.219.102
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2065
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;102.219.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
102.219.168.192.in-addr.arpa. 86400 IN PTR www.test.srv.
;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Fri Jun 16 14:06:51 UTC 2023
;; MSG SIZE rcvd: 83
댓글 남기기