만쥬의 개발일기
article thumbnail

dig란?

dig는 Domain Information Groper의 약자로, DNS 정보를 조회하고 진단하기 위한 커맨드 라인 도구이다.

dig의 영단어 뜻이 ‘파헤치다’ 인 것처럼 말 그대로 정보를 파헤치는 명령어다.

디그다도 그래서 디그다다

dig 명령어의 장점

  • nslookup 명령어로는 얻기 어려운 상세한 DNS 조회 결과를 얻을 수 있다.
  • DNS 구성에 문제가 생겼을 때 원인을 찾는데 유용하다.
  • 특정 IP의 도메인 이름을 찾거나, 특정 도메인 이름이 사용 중인 IP들을 찾을 수 있다.

우분투를 사용할 경우 다음 명령어로 설치가 가능하다.

apt-get install dnsutils

dig 사용법

dig 도메인 네임 [레코드명] [@네임서버명] [기타 옵션]

기본 사용 예시

dig 도메인네임

가장 간단한 명령어로,

QUESTION SECTION은 자신의 질의한 내용을 나타내고,

ANSWER SECTION은 서버가 응답한 내용을 나타낸다.

답변으로는 4가지의 A레코드 값이 반환되는데, 여기서 나타난 4개의 IP주소 모두 naver.com 으로 연결된다. 아마 로드 밸런싱을 위함일 것이다.

DNS 서버 지정

dig 도메인네임 @서버주소

기본 네임 서버가 아닌 특정 네임 서버를 지정할 때 사용한다.

@서버주소에 IP주소를 기재해도 되고 호스트명을 기재해도 된다.

기타 옵션

+dnssec

dig 도메인네임 @서버주소 +dnssec

DNSSEC 검증을 수행한다.

만일 네임서버가 DNSSEC 검증을 수행하면 RRSIG 레코드가 붙고

DNSSEC 검증을 수행하지 않는 네임서버면 RRSIG 레코드가 붙지 않는다.

위 예시처럼 @8.8.8.8 (구글 public DNS IP) 를 통해 확인해보면, 같은사이트여도 DNSSEC 검증을 수행함을 확인할 수 있다. 이는 외국 DNS Resolver가 보통 DNSSEC 검증을 시행하기 때문이다. (DNS Resolver란?)

+trace

dig 도메인네임 @서버주소 +trace

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

가끔 DNS 질의가 어디에서 실패하는지 확인해야할 경우가 있는데 이때 유용하다.

+short

dig 도메인네임 +short

필요한 최소한의 결과만 출력한다.

역방향 DNS 질의

dig -x ip주소

 

도메인 이름 → ip주소로 탐색하는 것이 아닌

ip 주소 → 도메인 이름을 탐색할 수 있다.

이때는 dig 명령어의 -x 옵션을 활용한다.

단, 역방향 DNS 조회 시 사용되는 PTR 유형의 레코드가 등록되어 있어야 한다.

ec2의 인스턴스의 ip로 테스트 해보니 ec2의 도메인네임이 정상적으로 나온다.

HEADER와 comment 읽기

->>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 (중요!!!)

  • 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 : 부가적인 정보

comments

Query Time : 총 소요 시간

SERVER : 질의한 서버

WHEN : UTC +0 기준 시간

MSG SIZE : DNS 메시지의 크기(IP, TCP or UDP Header를 제외한 byte)

 

reference

 

profile

만쥬의 개발일기

@KangManJoo

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!