본문 바로가기

리눅스

BIND(named)와 queryperf(성능 점검)를 설치하고 사용하는 방법

728x90

BIND(named)와 queryperf(성능 점검)를 설치하고 사용하는 방법

BIND (Berkeley Internet Name Domain)를 사용하여 DNS 서버의 성능을 테스트하려면 "queryperf" 도구를 사용할 수 있습니다. 이 도구는 DNS 쿼리를 생성하고 보내어 서버의 응답 시간 및 성능을 측정합니다.

bind 9.12(bind-9.12.4-P2) 이후 버전에서는 queryperf 툴이 보이지 않는다.

테스트 환경

서버 역할 서버 아이피 비고
클라이언트(queryperf) 192.168.0.62  
DNS 서버 192.168.0.63  
  • 운영체제 버전 정보
$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 22.04.1 LTS
Release:	22.04
Codename:	jammy

queryperf 설치 및 사용법

bind-9.12.4-P2 소스 파일 다운로드

bind 소스 파일 다운로드 URL : https://downloads.isc.org/isc/

cd /usr/local/src
wget https://downloads.isc.org/isc/bind9/9.12.4-P2/bind-9.12.4-P2.tar.gz
tar xfz bind-9.12.4-P2.tar.gz

/usr/local/src/bind-9.12.4-P2/contrib/queryperf 이동

cd bind-9.12.4-P2/contrib/queryperf
./configure
$ ./configure
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for library containing res_mkquery... none required
checking for library containing __res_mkquery... no
checking for library containing res_9_mkquery... no
checking for socket in -lsocket... no
checking for inet_ntoa in -lnsl... yes
checking for gethostbyname2... yes
checking for getaddrinfo... yes
checking for getnameinfo... yes
checking for socklen_t... yes
checking for sa_len... no
configure: creating ./config.status
config.status: creating Makefile
config.status: creating config.h
make
$ make
gcc  -DHAVE_CONFIG_H -c queryperf.c
gcc  -DHAVE_CONFIG_H  queryperf.o  -lnsl  -lm -o queryperf
$ ls
config.h     config.log     configure     input     Makefile.in  queryperf    queryperf.o  utils
config.h.in  config.status  configure.in  Makefile  missing      queryperf.c  README
file queryperf
$ file queryperf
queryperf: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=3ab23f0cf5b2e0c306521d34e9ac23801b575319, for GNU/Linux 3.2.0, not stripped

queryperf 복사

cp queryperf /usr/local/bin/.

queryperf 사용법

$ queryperf -h

DNS Query Performance Testing Tool
Version: $Id: queryperf.c,v 1.12 2007/09/05 07:36:04 marka Exp $


Usage: queryperf [-d datafile] [-s server_addr] [-p port] [-q num_queries]
                 [-b bufsize] [-t timeout] [-n] [-l limit] [-f family] [-1]
                 [-i interval] [-r arraysize] [-u unit] [-H histfile]
                 [-T qps] [-e] [-D] [-R] [-c] [-v] [-h]
  -d specifies the input data file (default: stdin)
  -s sets the server to query (default: 127.0.0.1)
  -p sets the port on which to query the server (default: 53)
  -q specifies the maximum number of queries outstanding (default: 20)
  -t specifies the timeout for query completion in seconds (default: 5)
  -n causes configuration changes to be ignored
  -l specifies how a limit for how long to run tests in seconds (no default)
  -1 run through input only once (default: multiple iff limit given)
  -b set input/output buffer size in kilobytes (default: 32 k)
  -i specifies interval of intermediate outputs in seconds (default: 0=none)
  -f specify address family of DNS transport, inet or inet6 (default: any)
  -r set RTT statistics array size (default: 50000)
  -u set RTT statistics time unit in usec (default: 100)
  -H specifies RTT histogram data file (default: none)
  -T specify the target qps (default: 0=unspecified)
  -e enable EDNS 0
  -D set the DNSSEC OK bit (implies EDNS)
  -R disable recursion
  -c print the number of packets with each rcode
  -v verbose: report the RCODE of each response on stdout
  -h print this usage

sample 파일 생성

find / -name gen-data-queryperf.py
$ find / -name gen-data-queryperf.py
/usr/local/src/bind-9.12.4-P2/contrib/queryperf/utils/gen-data-queryperf.py

/usr/local/src/bind-9.12.4-P2/contrib/queryperf/utils 이동

cd utils

실행 권한 할당

chmod +x gen-data-queryperf.py

gen-data-queryperf 실행

python3 ./gen-data-queryperf.py -n 10 -p 100 -t com > domainquery.txt
cat domainquery.txt
$ cat domainquery.txt
www.oq3nf.com     A
www.6.com     A
www.e0ddg-.com     A
www.dmyfeh.com     A
www.7b.com     A
www.4ro-.com     A
www.af.com     A
www.d.com     A
www.is8.com     A
www.fr21yi.com     A
728x90

queryperf 사용 방법

queryperf -d inputfile -s server [-p port] [-t runtime]
  • -d inputfile: DNS 쿼리를 생성하고 보낼 입력 파일을 지정합니다. 이 파일에는 테스트할 도메인 및 쿼리 유형이 포함되어 있어야 합니다.
  • -s server: 테스트할 DNS 서버의 주소를 지정합니다.
  • -p port (선택 사항): DNS 서버의 포트 번호를 지정합니다. 기본값은 53입니다.
  • -t runtime (선택 사항): 테스트 실행 시간을 초 단위로 지정합니다. 기본값은 60초입니다.

queryperf 테스트 방법

domainquery.txt 파일에 정의된 DNS 쿼리를 서버 192.168.0.63의 포트 53으로 전송하고, 테스트를 30초 동안 실행합니다.

queryperf -d domainquery.txt -s 192.168.0.63 -p 53 -t 30
$ queryperf -s 192.168.0.63 -p 53 -d domainquery.txt

DNS Query Performance Testing Tool
Version: $Id: queryperf.c,v 1.12 2007/09/05 07:36:04 marka Exp $

[Status] Processing input data
[Status] Sending queries (beginning with 192.168.0.63)
[Status] Testing complete

Statistics:

  Parse input file:     once
  Ended due to:         reaching end of file

  Queries sent:         10 queries
  Queries completed:    10 queries
  Queries lost:         0 queries
  Queries delayed(?):   0 queries

  RTT max:         	0.008005 sec
  RTT min:              0.002793 sec
  RTT average:          0.006675 sec
  RTT std deviation:    0.001482 sec
  RTT out of range:     0 queries

  Percentage completed: 100.00%
  Percentage lost:        0.00%

  Started at:           Mon Nov 28 21:57:23 2022
  Finished at:          Mon Nov 28 21:57:23 2022
  Ran for:              0.014676 seconds

  Queries per second:   681.384573 qps
통계 항목 설명
Parse input file: once 입력 파일을 한 번만 처리했음을 나타냅니다.
Ended due to: reaching end of file 테스트가 입력 파일의 끝에 도달하여 종료되었음을 나타냅니다.
Queries sent: 10 queries 전체 10개의 DNS 쿼리를 보냈습니다.
Queries completed: 10 queries 모든 10개의 DNS 쿼리가 성공적으로 완료되었습니다.
Queries lost: 0 queries 어떤 쿼리도 실패하지 않았으며, 0개의 쿼리가 손실되지 않았습니다.
Queries delayed(?): 0 queries 지연된 쿼리가 없었음을 나타냅니다.
RTT max: 0.008005 sec 응답 시간 (Round Trip Time) 중 최대 값은 0.008005 초입니다.
RTT min: 0.002793 sec 응답 시간 중 최소 값은 0.002793 초입니다.
RTT average: 0.006675 sec 응답 시간의 평균은 0.006675 초입니다.
RTT std deviation: 0.001482 sec 응답 시간의 표준 편차는 0.001482 초입니다.
RTT out of range: 0 queries 응답 시간이 범위를 벗어난 경우가 없음을 나타냅니다.
Percentage completed: 100.00% 모든 쿼리가 완료되어 100%가 성공적으로 완료되었습니다.
Percentage lost: 0.00% 어떤 쿼리도 손실되지 않았으므로 0%의 쿼리 손실이 있었음을 나타냅니다.
Started at: Mon Nov 28 21:57:23 2022 테스트가 시작된 날짜와 시간을 표시합니다.
Finished at: Mon Nov 28 21:57:23 2022 테스트가 종료된 날짜와 시간을 표시합니다.
Ran for: 0.014676 seconds 테스트가 총 소요된 시간은 0.014676 초입니다.
Queries per second: 681.384573 qps 초당 평균 쿼리 수는 681.384573로 나타납니다.
queryperf -s 192.168.0.63 -p 53 -d domainquery.txt -T 1000
queryperf -s 192.168.0.63 -p 53 -d domainquery.txt -T 1000 -t 2

dns server query logging(dns server : 192.168.0.63)

b1

 

참고URL

- DNS 성능 점검(queryperf) : https://anti1346.tistory.com/115

- BIND Logging : https://kb.isc.org/docs/aa-01526

- BIND GITHUB : https://gitlab.isc.org/isc-projects/bind9

- ISC Download : https://downloads.isc.org/isc/

 

728x90