본문 바로가기
Tech Notes/Network & DNS

dig 명령어, DNS 쿼리 및 결과 분석 방법

by gbmin 2023. 7. 17.

dig는 Domain Information Groper의 약자로 DNS 서버에 질의를 보내는 데 사용되는 유용한 도구다. 웹호스팅과 시스템 관리를 하다 보면 도메인 DNS를 조회해야 할 일이 종종 생기는데, DNS의 문제를 파악하거나 도메인의 레코드등을 조회하는데 많이 사용된다. 윈도에서 쓸 수 있는 nslookup이라는 명령어도 있지만 주로 리눅스 OS에 기본 설치되어 있는 dig를 많이 사용하고 있다. 개인적인 생각으로 nslookup 보다 쿼리 결과가 직관적이며 보고 싶은 정보만 추려서 볼 수 있어 DNS 조회하는 도구 중 가장 활용도가 높은 명령어이다.


[목차]

1. dig 명령어 기본 사용법

2. 쿼리결과 섹션별 분석

3. dig 명령어 주요 옵션과 활용예제


1. dig 명령어 기본 사용법

dig [옵션] [도메인이름] [쿼리타입]
# dig gbminnote.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.13 <<>> gbminnote.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29617
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;gbminnote.com.                 IN      A

;; ANSWER SECTION:
gbminnote.com.          300     IN      A       27.0.236.139

;; Query time: 40 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Jul 17 22:58:56 KST 2023
;; MSG SIZE  rcvd: 58

 

 

2. 쿼리결과 섹션별 분석

Header Section

여기서 DiG 버전 및 사용한 명령어가 표시된다. "+cmd"는 dig 명령어를 보여주는 기본 옵션이다.

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.13 <<>> gbminnote.com
;; global options: +cmd

 

Got answer Section

이 섹션에서는 질의에 대한 응답 상태를 확인할 수 있다. "status: NOERROR"는 에러 없이 질의가 수행되었음을 나타낸다. "flags: qr rd ra"에서 qr은 질의응답을, rd는 재귀적 질의를, ra는 재귀적 답변을 나타낸다.

;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29617
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

 

OPT PSEUDOSECTION

이 섹션에서는 확장 DNS(EDNS)에 대한 정보를 확인할 수 있다. EDNS는 DNS 프로토콜의 확장으로, 크기가 큰 패킷 처리, DNSSEC 등 추가적인 기능을 제공한다.

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512

 

QUESTION SECTION

이 섹션에서는 실행한 질의에 대한 정보를 확인할 수 있다. 여기서는 "gbminnote.com." 도메인의 IPv4 주소(A 레코드)를 질의하였다.

;; QUESTION SECTION:
;gbminnote.com.                 IN      A

 

ANSWER SECTION

이 섹션에서는 질의에 대한 응답을 확인할 수 있다. "gbminnote.com." 도메인의 IPv4 주소는 "27.0.236.139" 임을 알 수 있다.

;; ANSWER SECTION:
gbminnote.com.          300     IN      A       27.0.236.139

 

Query time, Server, When, MSG SIZE rcvd

이 섹션에서는 질의에 소요된 시간, 사용한 DNS 서버, 질의 시간, 받은 메시지 크기 등을 확인할 수 있다. 이 쿼리의 질의 시간이 40ms, 사용한 DNS 서버는 "8.8.8.8", 질의 시간은 "Mon Jul 17 22:58:56 KST 2023", 받은 메시지 크기는 58바이트이다.

;; Query time: 40 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Jul 17 22:58:56 KST 2023
;; MSG SIZE  rcvd: 58

 

 

3. dig 명령어 주요 옵션과 활용예제

+short : 짧은 형태의 결과를 반환

# dig gbminnote.com +short
27.0.236.139

 

+dnssec : DNSSEC 관련 정보를 포함하여 결과를 출력

# dig gbminnote.com +dnssec

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.13 <<>> gbminnote.com +dnssec
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24823
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 512
;; QUESTION SECTION:
;gbminnote.com.                 IN      A

;; ANSWER SECTION:
gbminnote.com.          300     IN      A       27.0.236.139
gbminnote.com.          300     IN      RRSIG   A 13 2 300 20230718150807 20230716130807 34505 gbminnote.com. JaNyX2DTFoXicuwRMeaJKDZDZGAKvOrgyNJ9uUWEPs82eS4ax7cE6UWU NtwbwWZ39yjQTVa19OFEVwcG6PIxiw==

;; Query time: 35 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Jul 17 23:08:34 KST 2023
;; MSG SIZE  rcvd: 58

 

@서버이름 : 특정 DNS 서버

# dig  @168.126.63.1 gbminnote.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.13 <<>> @168.126.63.1 gbminnote.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10279
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;gbminnote.com.                 IN      A

;; ANSWER SECTION:
gbminnote.com.          300     IN      A       27.0.236.139

;; Query time: 3 msec
;; SERVER: 168.126.63.1#53(168.126.63.1)
;; WHEN: Mon Jul 17 23:10:08 KST 2023
;; MSG SIZE  rcvd: 58

 

mx : 메일 교환(MX) 레코드를 질의

# dig gbminnote.com mx

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.13 <<>> gbminnote.com mx
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36728
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;gbminnote.com.                 IN      MX

;; ANSWER SECTION:
gbminnote.com.          247     IN      MX      10 mail.gbminnote.com.

;; Query time: 34 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Jul 17 23:10:48 KST 2023
;; MSG SIZE  rcvd: 63

 

txt : 텍스트(TXT) 레코드를 질의

# dig gbminnote.com txt

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.13 <<>> gbminnote.com txt
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2223
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;gbminnote.com.                 IN      TXT

;; ANSWER SECTION:
gbminnote.com.          300     IN      TXT     "google-site-verification=CP9TX0cbjR7fRFr5MYoBWNqSDW6RcwX7BV0xg0YIjGM"
gbminnote.com.          300     IN      TXT     "v=spf1 ip4:211.37.179.216 ~all"

;; Query time: 35 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Jul 17 23:11:24 KST 2023
;; MSG SIZE  rcvd: 166

 

CNAME : CNAME 레코드 질의

# dig www.gbminnote.com cname

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.13 <<>>  www.gbminnote.com cname
; (6 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43631
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;www.gbminnote.com.             IN      CNAME

;; ANSWER SECTION:
www.gbminnote.com.      300     IN      CNAME   host.tistory.io.

;; Query time: 2 msec
;; SERVER: 108.162.193.168#53(108.162.193.168)
;; WHEN: Mon Jul 17 23:16:40 KST 2023
;; MSG SIZE  rcvd: 75

 

-x : ptr 레코드 (리버스 DNS) 조회, IP 주소로부터 그에 연결된 도메인 이름을 찾음.

 dig -x 8.8.8.8

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.13 <<>> -x 8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42820
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;8.8.8.8.in-addr.arpa.          IN      PTR

;; ANSWER SECTION:
8.8.8.8.in-addr.arpa.   19853   IN      PTR     dns.google.

;; Query time: 30 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Jul 17 23:21:53 KST 2023
;; MSG SIZE  rcvd: 73

 

옵션 별로 예제를 만들었지만 쿼리 타입과 옵션을 조합하여 쿼리 결과에서 보고 싶은 내용만 조합하여 출력해 낼 수 있다.

스크립트 처리로 한번의 실행 만으로 여러가지 를 한번에 조회할수도있다.

 

python 으로 만든 DNS 쿼리 스크립트

ChatGTP 코드 인터프리터 기능의 도움을 받아 python으로 작성한 DNS 쿼리 스크립트이다. dig를 이용해 DNS 조회하고, 여러 네트워크망에 DNS 쿼리를 한 번에 하여 현재 내 도메인의 DNS 설정값이 안정적

gbminnote.com