SW/리눅스

Linux : Dig 명령어 사용하는 방법, 예제, 명령어 (DNS Lookup)

얇은생각 2021. 2. 7. 07:30
반응형

Dig(Domain Information Groper)는 DNS 이름 서버를 쿼리하는 강력한 명령줄 도구입니다.

dig 명령을 사용하면 호스트 주소, 메일 교환 및 이름 서버를 비롯한 다양한 DNS 레코드에 대한 정보를 쿼리할 수 있습니다. 이 도구는 유연성과 사용 편의성 때문에 DNS 문제를 해결하는 데 시스템 관리자 중 가장 많이 사용되는 도구입니다. 

이 튜토리얼에서는 가장 일반적인 디지 옵션에 대한 실제 예와 자세한 설명을 통해 디지 유틸리티를 사용하는 방법을 설명합니다.

 

 

 

디그 설치

시스템 유형에서 dig 명령을 사용할 수 있는지 확인하려면 다음을 수행합니다.

dig -v

 

 

출력은 다음과 같아야 합니다.

# DiG 9.11.3-1ubuntu1.1-Ubuntu

 

 

시스템에 dig가 없는 경우 위 명령은 "dig: 명령을 찾을 수 없음"으로 인쇄됩니다. 디스트로의 패키지 관리자를 사용하여 디스트로를 설치할 수 있습니다.

 

 

 

Dig on Ubuntu와 Debian 설치

sudo apt update && sudo apt install dnsutils

 

 

CentOS 및 Fedora에 dig 설치

sudo yum install bind-utils

 

 

Arch Linux에 dig 설치

sudo pacman -S bind-tools

 

 

 

Dig 출력 이해

간단한 형식으로 추가 옵션 없이 단일 호스트(도메인)를 쿼리하는 데 사용할 경우 dig 명령은 매우 상세합니다.

다음 예에서는 linux.org 도메인에서 작업을 수행합니다.

dig linux.org

 

 

출력은 다음과 같아야 합니다.

Linux : Dig 명령어 사용하는 방법, 예제, 명령어 (DNS Lookup) 1

 

 

섹션별로 이동하고 dig 명령의 출력에 대해 설명하겠습니다.

출력의 첫 번째 줄은 설치된 디지 버전과 쿼리된 도메인 이름을 인쇄합니다. 두 번째 줄은 글로벌 옵션(기본적으로 cmd만)을 표시합니다.

; <<>> DiG 9.13.3 <<>> linux.org
;; global options: +cmd

 

 

출력에 해당 라인을 포함하지 않으려면 +nocmd 옵션을 사용합니다. 이 옵션은 dig 명령 뒤에 나오는 첫 번째 옵션이어야 합니다.

다음 섹션에는 요청한 권한(DNS 서버)에서 받은 답변에 대한 기술 세부 정보가 포함되어 있습니다. 헤더는 opcode(디그에 의해 수행된 작업)와 작업 상태를 표시합니다. 이 예에서 상태는 NOERROR(NOERROR)이며, 이는 요청된이 문제 없이 쿼리를 처리했음을 의미합니다.

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

 

 

+nocomments을 사용하여 이 섹션을 제거할 수 있습니다. 이 옵션은 다른 섹션의 헤더도 비활성화합니다. 

"OPT" 의사 섹션은 최신 버전의 dig 유틸리티에만 표시됩니다. 여기서 DNS(EDNS)에 대한 확장 메커니즘에 대해 자세히 알아볼 수 있습니다.

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

 

 

출력에서 이 섹션을 제외하려면 +nesns 옵션을 사용합니다.

"질문" 섹션에 쿼리(질문)가 표시됩니다. 기본적으로 dig는 A 레코드를 요청합니다.

;; QUESTION SECTION:
;linux.org.			IN	A

 

 

+ noquestion을 사용하여 이 섹션을 비활성화할 수 있습니다.

"응답" 섹션은 질문에 대한 답변을 제공합니다. 이미 언급한 바와 같이 기본적으로 dig는 A 레코드를 요청합니다. 여기서 도메인 linux.org이 104.18.59.123 IP 주소를 가리킨다는 것을 알 수 있습니다.

;; ANSWER SECTION:
linux.org.		300	IN	A	104.18.59.123
linux.org.		300	IN	A	104.18.58.123

 

 

일반적으로는 응답을 끄지 않지만 +no 응답 옵션을 사용하여 출력에서 이 섹션을 제거할 수 있습니다.

권한 섹션에는 쿼리된 도메인에 대한 DNS 쿼리에 응답하는 권한이 있는 서버가 나와 있습니다.

;; AUTHORITY SECTION:
linux.org.		86379	IN	NS	lia.ns.cloudflare.com.
linux.org.		86379	IN	NS	mark.ns.cloudflare.com.

 

 

+ no authority 옵션을 사용하여 출력의 이 섹션을 비활성화할 수 있습니다.

ADDAL 섹션은 권한 있는 DNS 서버의 IP 주소에 대한 정보를 제공합니다.

;; ADDITIONAL SECTION:
lia.ns.cloudflare.com.	84354	IN	A	173.245.58.185
lia.ns.cloudflare.com.	170762	IN	AAAA	2400:cb00:2049:1::adf5:3ab9
mark.ns.cloudflare.com.	170734	IN	A	173.245.59.130
mark.ns.cloudflare.com.	170734	IN	AAAA	2400:cb00:2049:1::adf5:3b82

 

 

+noadditional 옵션을 사용하면 응답의 추가 섹션을 사용할 수 없습니다. 

dig 출력의 마지막 섹션에는 쿼리에 대한 통계가 포함됩니다.

;; Query time: 58 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Fri Oct 12 11:46:46 CEST 2018
;; MSG SIZE  rcvd: 212

 

 

+nostats 옵션을 사용하여 이 파트를 비활성화할 수 있습니다.

 

 

 

답변만 출력

일반적으로 dig 쿼리에 대한 짧은 답변만 받을 수 있습니다.

 

 

1. 짧은 답변 얻기

쿼리에 대한 짧은 대답을 얻으려면 +short 옵션을 사용합니다.

dig linux.org +short
104.18.59.123
104.18.58.123

 

 

출력에는 A 레코드의 IP 주소만 포함됩니다.

 

 

2. 자세한 응답을 받기

자세한 응답을 보려면 +no all 옵션을 사용하여 모든 결과를 끈 다음 + answer 옵션이 있는 답변 섹션만 켜십시오.

dig linux.org +noall +answer

# ; <<>> DiG 9.13.3 <<>> linux.org +noall +answer
# ;; global options: +cmd
# linux.org.		67	IN	A	104.18.58.123
# linux.org.		67	IN	A	104.18.59.123

 

 

 

특정 이름 서버 쿼리

기본적으로 이름 서버가 지정되지 않은 경우 다음을 수행합니다.

기본적으로 이름 서버가 지정되지 않은 경우 dig는 /etc/resolv.conf 파일에 나열된 서버를 사용합니다.

쿼리를 실행할 이름 서버를 지정하려면 @(at) 기호 뒤에 이름 서버 IP 주소 또는 호스트 이름을 사용하십시오.

예를 들어, Google 이름 서버(8.8.8.8)에서 linux.org 도메인에 대한 정보를 쿼리하려면 다음을 사용합니다.

dig linux.org @8.8.8.8

# ; <<>> DiG 9.13.3 <<>> linux.org @8.8.8.8
# ;; global options: +cmd
# ;; Got answer:
# ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39110
# ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
# 
# ;; OPT PSEUDOSECTION:
# ; EDNS: version: 0, flags:; udp: 512
# ;; QUESTION SECTION:
# ;linux.org.			IN	A
# 
# ;; ANSWER SECTION:
# linux.org.		299	IN	A	104.18.58.123
# linux.org.		299	IN	A	104.18.59.123
# 
# ;; Query time: 54 msec
# ;; SERVER: 8.8.8.8#53(8.8.8.8)
# ;; WHEN: Fri Oct 12 14:28:01 CEST 2018
# ;; MSG SIZE  rcvd: 70

 

 

레코드 유형 쿼리

Dig를 사용하면 쿼리 끝에 레코드 유형을 추가하여 유효한 DNS 쿼리를 수행할 수 있습니다. 다음 섹션에서는 A(IP 주소), CNAME(공통 이름), TXT(텍스트 레코드), MX(메일 교환기) 및 NS(이름 서버)와 같은 가장 일반적인 레코드를 검색하는 방법에 대한 예를 보여드리겠습니다.

 

 

1. A 레코드 쿼리

도메인 이름에 대한 모든 주소 목록을 가져오려면 다음 옵션을 사용합니다.

dig +nocmd google.com a +noall +answer

# google.com.		128	IN	A	216.58.206.206

 

 

이미 알고 있듯이 DNS 레코드 유형이 지정되지 않은 경우 dig에서 A 레코드를 요청합니다. 옵션을 지정하지 않고 A 레코드를 쿼리할 수도 있습니다.

 

 

 

2. CNAME 레코드 쿼리

별칭 도메인 이름을 찾으려면 cname 옵션을 사용합니다.

dig +nocmd mail.google.com cname +noall +answer

# mail.google.com.	553482	IN	CNAME	googlemail.l.google.com.

 

 

 

3. TXT 레코드 쿼리

특정 도메인에 대한 모든 TXT 레코드를 검색하려면 txt 옵션을 사용합니다.

dig +nocmd google.com txt +noall +answer

# google.com.		300	IN	TXT	"facebook-domain-verification=22rm551cu4k0ab0bxsw536tlds4h95"
# google.com.		300	IN	TXT	"v=spf1 include:_spf.google.com ~all"
# google.com.		300	IN	TXT	"docusign=05958488-4752-4ef2-95eb-aa7ba8a3bd0e"

 

 

 

4. MX 레코드 쿼리

특정 도메인의 모든 메일 서버 목록을 가져오려면 mx 옵션을 사용합니다.

dig +nocmd google.com mx +noall +answer

# google.com.		494	IN	MX	30 alt2.aspmx.l.google.com.
# google.com.		494	IN	MX	10 aspmx.l.google.com.
# google.com.		494	IN	MX	40 alt3.aspmx.l.google.com.
# google.com.		494	IN	MX	50 alt4.aspmx.l.google.com.
# google.com.		494	IN	MX	20 alt1.aspmx.l.google.com.

 

 

 

5. NS 레코드 쿼리

특정 도메인에 대한 권한 있는 이름 서버를 찾으려면 ns 옵션을 사용합니다.

dig +nocmd google.com ns +noall +answer

# google.com.		84527	IN	NS	ns1.google.com.
# google.com.		84527	IN	NS	ns2.google.com.
# google.com.		84527	IN	NS	ns4.google.com.
# google.com.		84527	IN	NS	ns3.google.com.

 

 

 

6. 모든 레코드 쿼리

특정 도메인에 대한 모든 DNS 레코드 목록을 가져오려면 임의 옵션을 사용합니다.

dig +nocmd google.com any +noall +answer

# google.com.		299	IN	A	216.58.212.14
# google.com.		299	IN	AAAA	2a00:1450:4017:804::200e
# google.com.		21599	IN	NS	ns2.google.com.
# google.com.		21599	IN	NS	ns1.google.com.
# google.com.		599	IN	MX	30 alt2.aspmx.l.google.com.
# google.com.		21599	IN	NS	ns4.google.com.
# google.com.		599	IN	MX	50 alt4.aspmx.l.google.com.
# google.com.		599	IN	MX	20 alt1.aspmx.l.google.com.
# google.com.		299	IN	TXT	"docusign=05958488-4752-4ef2-95eb-aa7ba8a3bd0e"
# google.com.		21599	IN	CAA	0 issue "pki.goog"
# google.com.		599	IN	MX	40 alt3.aspmx.l.google.com.
# google.com.		3599	IN	TXT	"facebook-domain-verification=22rm551cu4k0ab0bxsw536tlds4h95"
# google.com.		21599	IN	NS	ns3.google.com.
# google.com.		599	IN	MX	10 aspmx.l.google.com.
# google.com.		3599	IN	TXT	"v=spf1 include:_spf.google.com ~all"
# google.com.		59	IN	SOA	ns1.google.com. dns-admin.google.com. 216967258 900 900 

 

 

 

 

역 DNS 조회

특정 IP 주소와 연결된 호스트 이름을 쿼리하려면 -x 옵션을 사용합니다.

예를 들어 208.118.235.148에 대해 역방향 조회를 수행하려면 다음을 입력합니다.

dig -x 208.118.235.148 +noall +answer

 

 

 

아래 출력에서 볼 수 있듯이 IP 주소 208.118.dv.dv.dv는 hostname wildebeest.gnu.org과 연결되어 있습니다.

# ; <<>> DiG 9.13.3 <<>> -x 208.118.235.148 +noall +answer
# ;; global options: +cmd
# 148.235.118.208.in-addr.arpa. 245 IN	PTR	wildebeest.gnu.org.

 

 

 

대량 쿼리

많은 수의 도메인을 쿼리하려면 해당 도메인을 파일에 추가하고(행당 하나의 도메인) -f 옵션 뒤에 파일 이름을 사용할 수 있습니다. 

다음 예에서는 도메인에 나열된 도메인을 쿼리하고 있습니다.

# domains.txt
lxer.com
linuxtoday.com
tuxmachines.org

 

dig -f domains.txt +short

# 108.166.170.171
# 70.42.23.121
# 204.68.122.43

 

 

 

.digrc 파일

dig 명령의 동작은 ${HOME}/.digrc 파일에서 사용자별 옵션을 설정하여 제어할 수 있습니다.

사용자의 홈 디렉터리에 .digrc 파일이 있는 경우 파일에 지정된 옵션이 명령줄 인수 앞에 적용됩니다.

예를 들어 답변 섹션만 표시하려면 텍스트 편집기를 열고 다음 ~/.digrc 파일을 생성하십시오.

# ~/.digrc

+nocmd +noall +answer
반응형