첫 번째 테스트
1차, 2차 네임서버를 모두 중지하고 도메인을 질의한다.
[root@ns1 ~]# systemctl stop named
[root@ns1 ~]# netstat -nltup | grep 53
<-- 네임서버가 중지했기 때문에 아무것도 출력되지 않는다.
[root@ns2 ~]# systemctl stop named
[root@ns2 ~]# netstat -nltup | grep 53
<-- 네임서버가 중지했기 때문에 아무것도 출력되지 않는다.
nmtui 명령어를 이용해서 1차, 2차 DNS 서버를 설정한다.
[root@ns1 ~]# nmtui
1차 네임서버 : 192.168.108.3
2차 네임서버 : 192.168.108.4
[root@ns1 ~]# systemctl restart network
[root@ns1 ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search sbs.com
nameserver 192.168.108.3
nameserver 192.168.108.4
1차, 2차 네임서버 둘 다 중지했기 때문에 sbs.com 의 질의에 응답하지 않는다.
[root@ns1 ~]# dig sbs.com
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.7 <<>> sbs.com
;; global options: +cmd
;; connection timed out; no servers could be reached
두 번째 테스트
2차 DNS 서버를 시작하고 sbs.com 도메인 질의를 하면 어떻게 될 것인가 ?
[root@ns2 ~]# systemctl start named
[root@ns2 ~]# netstat -nltup | grep named
tcp 0 0 192.168.108.4:53 0.0.0.0:* LISTEN 5436/named
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 5436/named
tcp6 0 0 ::1:953 :::* LISTEN 5436/named
udp 0 0 192.168.108.4:53 0.0.0.0:* 5436/named
아래 결과는 2차 네임서버에 질의를 통해서 나온 결과이다.
이것이 나온 것은 2차 네임서버에서 1차 네임서버에 접속해서 포워드 존파일을 잘 받아왔다는 것을 의미한다.
한마디로 동기화가 잘 되었다는 것이다.
[root@ns1 ~]# dig sbs.com
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.7 <<>> sbs.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61857
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;sbs.com. IN A
;; ANSWER SECTION:
sbs.com. 300 IN A 192.168.108.3
;; AUTHORITY SECTION:
sbs.com. 300 IN NS ns2.sbs.com.
sbs.com. 300 IN NS ns1.sbs.com.
;; ADDITIONAL SECTION:
ns1.sbs.com. 300 IN A 192.168.108.3
ns2.sbs.com. 300 IN A 192.168.108.4
;; Query time: 0 msec
;; SERVER: 192.168.108.4#53(192.168.108.4)
;; WHEN: 월 11월 15 17:50:28 KST 2021
;; MSG SIZE rcvd: 120
세 번째 테스트
2차 네임서버에서 zone DB 파일을 가져오는 부분을 테스트한다.
1차 네임서버는 중지되어 있어야 한다.
[root@ns1 ~]# netstat -nltup | grep named
2차 네임서버는 sbs.com.zone 파일을 삭제하고 네임서버를 재시작한다.
1차 네임서버가 중지되었기 때문에 sbs.com.zone 파일을 가져올 수 없다.
[root@ns2 ~]# ls -l /var/named
합계 20
drwxr-x---. 7 root named 61 11월 15 16:17 chroot
drwxrwx---. 2 named named 23 11월 15 16:53 data
drwxrwx---. 2 named named 60 11월 15 17:50 dynamic
-rw-r-----. 1 root named 2253 4월 5 2018 named.ca
-rw-r-----. 1 root named 152 12월 15 2009 named.empty
-rw-r-----. 1 root named 152 6월 21 2007 named.localhost
-rw-r-----. 1 root named 168 12월 15 2009 named.loopback
-rw-r--r--. 1 named named 313 11월 15 17:20 sbs.com.zone
drwxrwx---. 2 named named 6 8월 31 23:53 slaves
sbs.com.zone 파일을 삭제한다.
[root@ns2 ~]# rm -fv /var/named/sbs.com.zone
removed `/var/named/sbs.com.zone'
/var/named 디렉터리를 확인해보면 sbs.com.zone 파일이 삭제되었다.
[root@ns2 ~]# ls -l /var/named
합계 16
drwxr-x---. 7 root named 61 11월 15 16:17 chroot
drwxrwx---. 2 named named 23 11월 15 16:53 data
drwxrwx---. 2 named named 60 11월 15 17:50 dynamic
-rw-r-----. 1 root named 2253 4월 5 2018 named.ca
-rw-r-----. 1 root named 152 12월 15 2009 named.empty
-rw-r-----. 1 root named 152 6월 21 2007 named.localhost
-rw-r-----. 1 root named 168 12월 15 2009 named.loopback
drwxrwx---. 2 named named 6 8월 31 23:53 slaves
네임서버를 재시작 한다.
[root@ns2 ~]# systemctl restart named
1차 네임서버가 중지되었으므로 /var/named 디렉터리를 확인해보면 sbs.com.zone 파일이 없다.
[root@ns2 ~]# ls -l /var/named
합계 16
drwxr-x---. 7 root named 61 11월 15 16:17 chroot
drwxrwx---. 2 named named 23 11월 15 16:53 data
drwxrwx---. 2 named named 60 11월 15 18:05 dynamic
-rw-r-----. 1 root named 2253 4월 5 2018 named.ca
-rw-r-----. 1 root named 152 12월 15 2009 named.empty
-rw-r-----. 1 root named 152 6월 21 2007 named.localhost
-rw-r-----. 1 root named 168 12월 15 2009 named.loopback
drwxrwx---. 2 named named 6 8월 31 23:53 slaves
중지된 1차 네임서버를 시작한다.
[root@ns1 ~]# systemctl start named
[root@ns1 ~]# netstat -nltup | grep named
tcp 0 0 192.168.108.3:53 0.0.0.0:* LISTEN 96699/named
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 96699/named
tcp6 0 0 ::1:953 :::* LISTEN 96699/named
udp 0 0 192.168.108.3:53 0.0.0.0:* 96699/named
udp 0 768 0.0.0.0:57441 0.0.0.0:* 96699/named
[root@ns2 ~]# ls -l /var/named
합계 16
drwxr-x---. 7 root named 61 11월 15 16:17 chroot
drwxrwx---. 2 named named 23 11월 15 16:53 data
drwxrwx---. 2 named named 60 11월 15 18:06 dynamic
-rw-r-----. 1 root named 2253 4월 5 2018 named.ca
-rw-r-----. 1 root named 152 12월 15 2009 named.empty
-rw-r-----. 1 root named 152 6월 21 2007 named.localhost
-rw-r-----. 1 root named 168 12월 15 2009 named.loopback
drwxrwx---. 2 named named 6 8월 31 23:53 slaves
2차 네임서버를 시작한다. 1차 네임서버가 시작되었기 때문에 sbs.com.zone파일을 가져올 수 있어서
아래처럼 sbs.com.zone 파일이 생성되었다.
[root@ns2 ~]# systemctl restart named
[root@ns2 ~]# ls -l /var/named
합계 20
drwxr-x---. 7 root named 61 11월 15 16:17 chroot
drwxrwx---. 2 named named 23 11월 15 16:53 data
drwxrwx---. 2 named named 60 11월 15 18:10 dynamic
-rw-r-----. 1 root named 2253 4월 5 2018 named.ca
-rw-r-----. 1 root named 152 12월 15 2009 named.empty
-rw-r-----. 1 root named 152 6월 21 2007 named.localhost
-rw-r-----. 1 root named 168 12월 15 2009 named.loopback
-rw-r--r--. 1 named named 313 11월 15 18:10 sbs.com.zone
drwxrwx---. 2 named named 6 8월 31 23:53 slaves
네 번째 테스트
로그 테스트
1차 네임서버에서 /var/log/messages 파일의 로그를 확인한다.
로그 디렉터리 : /var/log
로그 파일 : /var/log/messages
tail -f : 실시간 로그 모니터링
실시간 로그 모니터링을 통해서 /var/log/messages 파일에 기록되는 로그를 확인한다.
[root@ns1 ~]# tail -f /var/log/messages
:
:(생략)
2차 네임서버에서는 sbs.com.zone 파일을 삭제하고 네임서버를 재시작한다.
[root@ns2 ~]# rm -fv /var/named/sbs.com.zone
removed `/var/named/sbs.com.zone'
[root@ns2 ~]# systemctl restart named
1차 네임서버에서의 로그는 아래와 같다.
[root@ns1 ~]# tail -f /var/log/messages
:
:(생략)
Nov 15 18:18:38 www named[96699]: client @0x7f19b0042060 192.168.108.4#53422 (sbs.com): transfer of 'sbs.com/IN': AXFR started (serial 2021111501)
Nov 15 18:18:38 www named[96699]: client @0x7f19b0042060 192.168.108.4#53422 (sbs.com): transfer of 'sbs.com/IN': AXFR ended
2차 네임서버에서의 로그는 아래와 같다.
[root@ns2 ~]# tail /var/log/messages
:
:(생략)
Nov 15 18:18:38 server2 named[5563]: zone sbs.com/IN: transferred serial 2021111501
Nov 15 18:18:38 server2 named[5563]: transfer of 'sbs.com/IN' from 192.168.108.3#53: Transfer status: success
Nov 15 18:18:38 server2 named[5563]: transfer of 'sbs.com/IN' from 192.168.108.3#53: Transfer completed: 1 messages, 8 records, 206 bytes, 0.001 secs (206000 bytes/sec)
Nov 15 18:18:38 server2 named[5563]: zone sbs.com/IN: sending notifies (serial 2021111501)
Nov 15 18:18:38 server2 named[5563]: managed-keys-zone: Key 20326 for zone . acceptance timer complete: key now trusted
Nov 15 18:18:38 server2 named[5563]: resolver priming query complete
다섯 번째 테스트
1차 네임서버에서 포워드 존 파일을 열어서 호스트를 등록한 후 재시작한다.
이때 serial(버전)을 증가하지 않고 재시작한다.
[root@ns1 ~]# vi /var/named/sbs.com.zone
$TTL 300
@ IN SOA ns1 root ( 2021111501 1D 1H 1W 500)
IN NS ns1
IN NS ns2
IN A 192.168.108.3 ; sbs.com.
ns1 IN A 192.168.108.3 ; ns1.sbs.com.
ns2 IN A 192.168.108.4 ; ns2.sbs.com.
www IN A 192.168.108.3 ; www.sbs.com.
ftp IN A 192.168.108.5 ; ftp.sbs.com.
네임서버를 재시작한다.
[root@ns1 ~]# systemctl restart named
2차 네임서버에서 ftp.sbs.com을 확인한다.
ftp.sbs.com 의 주소가 나오지 않았기 때문에 동기화기 안된 것을 알 수 있다.
[root@ns2 ~]# dig @192.168.108.4 ftp.sbs.com
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.7 <<>> @192.168.108.4 ftp.sbs.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 26538
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ftp.sbs.com. IN A
;; AUTHORITY SECTION:
sbs.com. 300 IN SOA ns1.sbs.com. root.sbs.com. 2021111501 86400 3600 604800 500
;; Query time: 0 msec
;; SERVER: 192.168.108.4#53(192.168.108.4)
;; WHEN: 월 11월 15 19:12:05 KST 2021
;; MSG SIZE rcvd: 85
여섯 번째 테스트
1차 네임서버에서 포워드 존 파일을 열어서 호스트를 등록한 후 재시작한다.
이때 serial(버전)을 증가하고 재시작한다.
[root@ns1 ~]# vi /var/named/sbs.com.zone
$TTL 300
@ IN SOA ns1 root ( 2021111502 1D 1H 1W 500)
IN NS ns1
IN NS ns2
IN A 192.168.108.3 ; sbs.com.
ns1 IN A 192.168.108.3 ; ns1.sbs.com.
ns2 IN A 192.168.108.4 ; ns2.sbs.com.
www IN A 192.168.108.3 ; www.sbs.com.
ftp IN A 192.168.108.5 ; ftp.sbs.com.
ns2에서 로그를 모니터링으로 대기한다.
[root@ns2 ~]# tail -f /var/log/messages
ns1에서 네임서버를 재시작한다.
[root@ns1 ~]# systemctl restart named
ns2에서 아래처럼 로그가 출력된다.
serial 을 증가했기 때문이다.
[root@ns2 ~]# tail -f /var/log/messages
:
:(생략)
Nov 15 19:18:07 server2 named[5619]: client @0x7f947003c150 192.168.108.3#57335: received notify for zone 'sbs.com'
Nov 15 19:18:07 server2 named[5619]: zone sbs.com/IN: notify from 192.168.108.3#57335: serial 2021111502
Nov 15 19:18:07 server2 named[5619]: zone sbs.com/IN: Transfer started.
Nov 15 19:18:07 server2 named[5619]: transfer of 'sbs.com/IN' from 192.168.108.3#53: connected using 192.168.108.4#52469
Nov 15 19:18:07 server2 named[5619]: zone sbs.com/IN: transferred serial 2021111502
Nov 15 19:18:07 server2 named[5619]: transfer of 'sbs.com/IN' from 192.168.108.3#53: Transfer status: success
Nov 15 19:18:07 server2 named[5619]: transfer of 'sbs.com/IN' from 192.168.108.3#53: Transfer completed: 1 messages, 9 records, 226 bytes, 0.002 secs (113000 bytes/sec)
Nov 15 19:18:07 server2 named[5619]: zone sbs.com/IN: sending notifies (serial 2021111502)
dig으로 자기 자신인 ns2의 네임서버로 확인하면 아래처럼 정상적으로 인식된다.
[root@ns2 ~]# dig @192.168.108.4 ftp.sbs.com
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.7 <<>> @192.168.108.4 ftp.sbs.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10057
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ftp.sbs.com. IN A
;; ANSWER SECTION:
ftp.sbs.com. 300 IN A 192.168.108.5
;; AUTHORITY SECTION:
sbs.com. 300 IN NS ns2.sbs.com.
sbs.com. 300 IN NS ns1.sbs.com.
;; ADDITIONAL SECTION:
ns1.sbs.com. 300 IN A 192.168.108.3
ns2.sbs.com. 300 IN A 192.168.108.4
;; Query time: 0 msec
;; SERVER: 192.168.108.4#53(192.168.108.4)
;; WHEN: 월 11월 15 19:21:14 KST 2021
;; MSG SIZE rcvd: 124
실습> zone transfer(영역 전송) 확인하기
zone transfer : 영역 전송 (포워드 존파일)을 보내준다.
bind 패키지로 네임서버를 구성하면 zone transfer(영역 전송)에 대한 설정은 기본값이 모든 호스트에서 요청하면 응답을 해주게 설정되어 있다.
보안상 반드시 막아야 한다.
1. ns1.sbs.com 설정 내용
-- ns1.sbs.com 의 /etc/named.rfc1912.zones 의 내용 --
zone "sbs.com" IN {
type master;
file "sbs.com.zone";
allow-transfer { 192.168.108.4; };
notify yes;
also-notify { 192.168.108.4; };
allow-update { none; };
};
zone "kbs.com" IN {
type master;
file "kbs.com.zone";
allow-update { none; };
};
-- ns1.sbs.com 의 /etc/named.rfc1912.zones 의 내용 --
2. zone transfer 설정이 안된 경우
외부에서 kbs.com 도메인에 대한 zone transfer를 요청하면 기본값이 허용이 되어 있으므로 도메인의 존 정보를 확인할 수 있다.
C:\Users\user1>nslookup
기본 서버: ns.lgdacom.net
Address: 164.124.101.2
> server 192.168.108.3
기본 서버: [192.168.108.3]
Address: 192.168.108.3
> ls -d kbs.com
[[192.168.108.3]]
kbs.com. SOA ns.kbs.com root.kbs.com. (2021111101 86400 3600 604800 10800)
kbs.com. NS ns.kbs.com
kbs.com. A 192.168.108.3
ns A 192.168.108.3
www A 192.168.108.3
kbs.com. SOA ns.kbs.com root.kbs.com. (2021111101 86400 3600 604800 10800)
>
윈도우용 dig.exe를 실행한 결과이다.
C:\Users\user1\Downloads\BIND9.16.22.x64>dig @192.168.108.3 kbs.com axfr
; <<>> DiG 9.16.22 <<>> @192.168.108.3 kbs.com axfr
; (1 server found)
;; global options: +cmd
kbs.com. 60 IN SOA ns.kbs.com. root.kbs.com. 2021111101 86400 3600 604800 10800
kbs.com. 60 IN NS ns.kbs.com.
kbs.com. 60 IN A 192.168.108.3
ns.kbs.com. 60 IN A 192.168.108.3
www.kbs.com. 60 IN A 192.168.108.3
kbs.com. 60 IN SOA ns.kbs.com. root.kbs.com. 2021111101 86400 3600 604800 10800
;; Query time: 1 msec
;; SERVER: 192.168.108.3#53(192.168.108.3)
;; WHEN: Mon Nov 15 20:20:52 ;; XFR size: 6 records (messages 1, bytes 210)
3. zone transfer 설정이 된 경우
> ls -d sbs.com
[[192.168.108.3]]
*** 도메인 sbs.com을(를) 나열할 수 없습니다. Query refused
DNS 서버가 영역 sbs.com을(를) 사용 중인 컴퓨터에 전송하는 것을 거부했습니다.
잘못된 경우에는 IP 주소 192.168.108.3의 DNS에서 sbs.com의 영역 전송 보안 설정을
확인하십시오.
https://www.isc.org/download/ 에서 bind를 다운로드 받고 zip 파일의 압축을 풀면 그 안에 dig.exe 파일이 있다.
윈도우용 dig.exe 를 실행한 결과이다.
C:\Users\user1\Downloads\BIND9.16.22.x64>dig @192.168.108.3 sbs.com axfr
; <<>> DiG 9.16.22 <<>> @192.168.108.3 sbs.com axfr
; (1 server found)
;; global options: +cmd
; Transfer failed.
영역 전송에 실패했을 경우의 로그는 아래처럼 남는다.
Nov 15 20:20:07 www named[97191]: client @0x7fdc46e89ed0 192.168.108.1#51671 (sbs.com): zone transfer 'sbs.com/AXFR/IN' denied
영역 전송에 성공했을 경우의 로그는 아래처럼 남는다.
Nov 15 20:20:55 www named[97191]: client @0x7fdc44042060 192.168.108.1#51676 (kbs.com): transfer of 'kbs.com/IN': AXFR started (serial 2021111101)
Nov 15 20:20:55 www named[97191]: client @0x7fdc44042060 192.168.108.1#51676 (kbs.com): transfer of 'kbs.com/IN': AXFR ended
실습> bind 버전 출력 금지하기
bind 패키지로 네임서버를 구성하면 bind 버전에 대한 출력이 기본값으로 모든 호스트에서 요청하면 응답을 해주게 설정되어 있다.
기본 값은 버전 정보를 확인할 수 있다. 그러므로 보안상 반드시 막아야 한다.
1. 버전 정보의 출력을 허용한 경우 (기본값)
클라이언트가 버전 정보를 요청하면 버전 정보를 응답해준다.
C:\Users\user1\Downloads\BIND9.16.22.x64>dig @192.168.108.3 txt chaos version.bind
; <<>> DiG 9.16.22 <<>> @192.168.108.3 txt chaos version.bind
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21132
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: b72f505fdeaa13b0eb735f946192455acfc11819b1874df8 (good)
;; QUESTION SECTION:
;version.bind. CH TXT
;; ANSWER SECTION:
version.bind. 0 CH TXT "9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.7"
;; AUTHORITY SECTION:
version.bind. 0 CH NS version.bind.
;; Query time: 0 msec
;; SERVER: 192.168.108.3#53(192.168.108.3)
;; WHEN: Mon Nov 15 20:32:39 ;; MSG SIZE rcvd: 133
C:\Users\user1\Downloads\BIND9.16.22.x64>dig @192.168.108.3 txt chaos version.bind +short
"9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.7"
2. 버전 정보의 출력을 금지한 경우
클라이언트가 버전 정보를 요청하면 NULL 값을 응답해주므로 버전정보가 출력되지 않는다.
[root@ns1 ~]# vi /etc/named.conf
:
options {
:
version "";
:
[root@ns1 ~]# rndc reload
server reload successful
C:\Users\user1\Downloads\BIND9.16.22.x64>dig @192.168.108.3 txt chaos version.bind +short
""
[root@ns1 ~]# vi /etc/named.conf
:
options {
:
version "bind version";
:
[root@ns1 ~]# rndc reload
server reload successful
C:\Users\user1\Downloads\BIND9.16.22.x64>dig @192.168.108.3 txt chaos version.bind
; <<>> DiG 9.16.22 <<>> @192.168.108.3 txt chaos version.bind
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 144
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 027a4cc72ed27e36b292f5d0619246f4ea51595272f03ad3 (good)
;; QUESTION SECTION:
;version.bind. CH TXT
;; ANSWER SECTION:
version.bind. 0 CH TXT "bind version"
;; AUTHORITY SECTION:
version.bind. 0 CH NS version.bind.
;; Query time: 1 msec
;; SERVER: 192.168.108.3#53(192.168.108.3)
;; WHEN: Mon Nov 15 20:39:29 ;; MSG SIZE rcvd: 108
KT DNS의 버전 정보를 확인한다.
C:\Users\user1\Downloads\BIND9.16.22.x64>dig @192.168.108.3 txt chaos version.bind +short
"bind version"
[root@ns2 ~]# dig @168.126.63.1 txt chaos version.bind +short
""
[root@ns2 ~]# dig @168.126.63.1 txt chaos version.bind +short
"Unknown"
[root@ns2 ~]# dig @168.126.63.1 txt chaos version.bind +short
"Cyber World Leader Kornet!"
'Linux > Linux 실습' 카테고리의 다른 글
| DNS 개념과 배경에 대한 정리 (Domain Name System) (0) | 2021.12.12 |
|---|---|
| [Linux] Python3 가상환경 사용하기 (0) | 2021.11.30 |
| [Linux] 2차 네임서버 구축 (0) | 2021.11.18 |
| [Linux] 도메인 SOA RR 분석 (0) | 2021.11.13 |
| [Linux] 도메인 정리 (0) | 2021.11.13 |