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
출력은 다음과 같아야 합니다.
섹션별로 이동하고 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
'SW > 리눅스' 카테고리의 다른 글
Ubuntu 18.04 : OpenVPN Server 설정하는 방법, 예제, 명령어 (2) | 2021.02.09 |
---|---|
CentOS 7 : Docker Compose 설치, 사용하는 방법, 예제, 명령어 (0) | 2021.02.08 |
Ubuntu 18.04 : VMware Workstation Player 설치하는 방법, 예제, 명령어 (0) | 2021.02.06 |
Linux : Cat Command 사용하는 방법, 예제, 명령어 (0) | 2021.02.05 |
Ubuntu 18.04 : Odoo 12 배포하는 방법, 예제, 명령어 (0) | 2021.02.04 |