dig 명령어 간단 사용법

DIG Command usage

DNS를 직접 질의시, nslookup 커맨드를 사용해도 되지만 dig 커맨드를 사용해보자

nslookup 커맨드에 비해 매우 편리하다. 글자수도 적고, 더 다양한 정보 확인이 가능하다.


0. 기본 세팅

dig 유틸리티는 bind-utils에 포함되어 있다. 설치를 해야 한다.
1
sudo yum install bind-utils
cs
Redhat 계열 기준(RHEL, CentOS, Fedora, Amazon Linux 등)


별도의 옵션을 설정하지 않으면 기본 네임서버에다가 질의를 하게 된다.
유닉스 계열이면, /etc/resolv.conf 일 것이다.
윈도우 계열이면, ncpa.cpl을 열어 설정을 변경해주면 된다.


1. 기본 사용법

1
dig 질의명 [레코드명] [@네임서버명] [기타 옵션들]
cs

인자 순서는 크게 상관없다. 자신이 편한대로 사용하자.
필자는 dig example.com A @1.1.1.1 +dnssec +trace 과 같은 순으로 사용한다.


dig 질의명
가장 간단한 케이스

QUESTION SECTION은 자신의 질의한 내용을 나타내고,
ANSWER SECTION은 서버가 응답한 내용을 나타낸다.
두 SECTION 위 아래에 부가적인 정보들이 존재한다.

위 사진의 경우, 필자가 naver.com A 를 질의했고,
4가지의 A레코드 값이 응답으로 돌아왔다.


dig 질의명 [레코드명]
특정 레코드를 질의하고 싶을 때 사용한다.

A, AAAA, CNAME, MX, TXT, NS, SOA, SRV, CAA, PTR, NSEC, NSEC3, RRSIG, RP 등 대부분 레코드(Resource Record)가 지원된다.
기본값은 A이다.


dig 질의명 [@서버 주소] 
기본 네임서버가 아닌 특정 네임서버를 지정할 때 사용한다.

@서버주소에 IP주소를 기재해도 되고, 호스트명(ns1.~~~~~ 등)을 기재해도 된다.


다양한 옵션들은 이렇게 섞어서 사용할 수 있다.
옵션 순서는 상관 없다. 자신이 편한 순서대로 기재하면 된다.

이정도만 알아도 nslookup을 쓰는 것보단 편하게 사용할 수 있다.


2. 활용

dig -h
모든 dig 커맨드 옵션은 여기서 확인이 가능하다.


그 중 필자가 자주 쓰는 옵션들을 소개한다.
+dnssec
DNSSEC 검증을 수행한다.

만일 네임서버가 DNSSEC 검증을 수행하면 RRSIG 레코드가 붙고(첫 사진)
DNSSEC 검증을 수행하지 않는 네임서버면 RRSIG 레코드가 붙지 않는다.(두번째 사진)


+trace
DNS 질의과정을 Root DNS부터 모두 표시해준다.

가끔 DNS 질의가 어디에서 실패하는지 확인해야할 경우가 있는데 이때 유용하다.
(Registry에서 막혔나? 자체 네임서버에서 막혔나? 등을 확인할 때)


-p 포트번호
기본 53번 포트가 아닌, 특정 포트번호를 지정할 때 사용한다.

주로 테스트용으로 사용한다.


AXFR
해당 도메인이 Zone-Transfer를 허용하는지 체크하는 용도로 사용한다.

보안상 다음과 같이 실패해야 정상이다.


+recurse +norecurse
Recursive한 질의를 할 지 안할지 명시하는 옵션

Authoritative 함을 확인할 때 주로 사용한다.
(Hint : 두 옵션의 flags 차이를 확인!)


+multiline
예쁘게 출력해주는 옵션이다.

answer가 무진장 길 때 보기 편해지라고 사용한다.



3. 고급 활용 - 헤더 읽어보기

dig 커맨드시 SECTION 위 아래로 다양한 정보가 출력된다.

DNS에 대해 자세히 공부할 경우, 이 다양한 정보를 알고 있는 것이 좋다.
DNS 헤더에 대한 정보가 출력된다.


->>HEADER<<-
opcode : 유형
QUERY : Standard Query (정상 질의응답)
IQUERY : Inverse Query
STATUS : Status
NOTIFY : NOTIFY 메시지
UPDATE : Dynamic UPDATE 메시지

status : 응답 코드
NOERROR : 정상
FORMERR : Format 에러. (잘못된 Field 값을 집어넣은 경우)
SERVFAIL : 서버 에러. (HTTP의 500계열 에러 느낌)
NXDOMAIN : 없는 도메인(Non-Existent Domain). 해당 네임서버에 해당 Zone 없음.
REFUSED : 거절. (해당 Client 요청 무시)

flags (중요!!!)
필자가 dig 쿼리를 사용하는 가장 큰 이유중 하나. flag 정보는 알아두면 정말 유용하다.

qr : Query/Response (Query->0 / Response->1, DNS 헤더 참고)
aa : Authoritative (해당 응답은 Authoritative 서버로부터 온 응답)
tc : Truncated (DNS 헤더의 tc bit)

rd : Recursion Desired (해당 질의가 Recursive 한 경우)
ra : Recursion Available (해당 질의가 RD 가능한지)

QUERY / ANSWER / AUTHORITY / ADDTIONAL
각각 DNS 헤더의 SECTION 값을 출력한다. 자세한 건 DNS 헤더 참고
QUERY : 질의
ANSWER : 응답
AUTHORITY : 해당 Zone의 Authoritative Server 정보
ADDITIONAL : 부가적인 정보

Query Time : 총 소요 시간
SERVER : 질의한 서버
WHEN : UTC +0 기준 시간
MSG SIZE : DNS 메시지의 크기(IP, TCP or UDP Header를 제외한 byte)

댓글