[Ubuntu] 09. DNS - DNS 보조 서버(Slave Server) 및 전달자(Forward)를 구성

Date:     Updated:

카테고리:

태그:


🔔 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 질의


🔔 테스트 구성



231321312


■ 마스터 네임 서버

$ 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

UBUNTU 카테고리 내 다른 글 보러가기

댓글 남기기