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
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)
참고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/
'리눅스' 카테고리의 다른 글
[draft] CentOS 7에서 YUM 패키지 매니저를 사용하여 MySQL을 설치하는 방법 (0) | 2022.11.29 |
---|---|
BIND(named)의 로깅을 설정하는 방법(bind logging) (0) | 2022.11.28 |
Well Known Ports (0) | 2022.11.28 |
[리눅스] BIND(named)에서 $GENERATE 지시어를 사용하는 방법 (0) | 2022.11.28 |
MySQL에서 원격 접속을 허용하는 방법 (0) | 2022.11.26 |