dig 소개
dig(Domain Information Groper)는 DNS 정보를 조회할 수 있는 네트워크 관리 도구입니다.
dig는 DNS 네임서버에 쿼리하고, 받은 응답을 출력하는 방식으로 DNS 정보를 조회(lookup)합니다.
여기까지 들으면, nslookup과 매우 유사하지만, nslookup보다 더 상세한 정보를 제공한다는 점이 특징입니다.
실제로 비슷한 DNS명령어인 host, nslookup 명령어에 레코드 옵션을 똑같이 지정해서 실행하면 dig가 가장 긴 답변을 출력하는 것을 볼 수 있습니다.
host -t ns lifeoncloud.kr
nslookup -type=ns lifeoncloud.kr
dig -t ns lifeoncloud.kr
dig 출력 결과가 얼마나 구체적이길래 어떤 의미를 갖고 있는지 궁금해서 간단히 분석해보았습니다.
dig 출력 결과
dig lifeoncloud.kr
; <<>> DiG 9.10.6 <<>> lifeoncloud.kr
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60658
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;lifeoncloud.kr. IN A
;; ANSWER SECTION:
lifeoncloud.kr. 600 IN CNAME host.tistory.io.
host.tistory.io. 272 IN CNAME blog-tistory-l51ybqnn.kgslb.com.
blog-tistory-l51ybqnn.kgslb.com. 28 IN A 211.249.222.34
;; Query time: 15 msec
;; SERVER: 1.214.68.2#53(1.214.68.2)
;; WHEN: Fri Dec 15 21:09:30 KST 2023
;; MSG SIZE rcvd: 133
헤더 섹션 (Header Section)
; <<>> DiG 9.10.6 <<>> lifeoncloud.kr
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60658
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
'DiG 9.10.6'는 DNS 쿼리에 사용된 dig 도구의 버전을 나타냅니다.
dig -v 명령어를 실행하여 현재 설치된 dig 버전이라는것을 확인할 수 있습니다.
;; global options: +cmd
기본적으로 cmd 옵션이 사용되었다는 것을 의미합니다.
;; Got answer:
DNS 서버로부터의 응답 받았다는 것을 의미합니다.
이후부터는 DNS 응답의 헤더에 대한 정보가 표시됩니다.
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60658
- opcode: DNS에 의해 수행된 작업
- status: DNS 응답 상태 코드
- id: DNS 메시지 식별자
DNS에 의해 수행된 작업(opcode)인 질의(QUERY)를 수행하여 정상적으로 응답을 받았다(NOERROR)는 id 60658의 DNS메시지라고 해석할 수 있습니다.
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
- flags: DNS 메시지 특성
- qr: 질의 응답 메시지
- rd: 재귀 필요(Recursion Desired)
- ra: 재귀 가능(Recursion Available)
- QUERY: 질의
- ANSWER: 응답
- AUTHORITY: 권한
- ADDITIONNAL: 추가
옵션 섹션 (OPT PSEUDOSECTION)
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
- OPT: DNS 메시지에 대한 옵션 정보를 나타네는 레코드
- EDNS: Extension Mechanisms for DNS
- version: EDNS의 버전
- flags:DNS 확장 플래그
- udp: 요청을 전달하는 UDP 패킷 크기
'OPT'는 Extension Mechanisms for DNS (EDNS)에서 사용되는 가상 레코드입니다. 여기서 'OPT'는 Option을 나타내며, 'OPT' 레코드는 DNS 메시지의 부가적인 정보를 포함하는 데 사용되며, 주로 DNS 확장 기능을 활성화하거나 특정 기능을 사용하도록 지시하는 데에 쓰입니다. 'OPT' 레코드는 표준 DNS 레코드 타입이 아니라서 가상 레코드 라는 뜻으로 'virtual record'또는 'pseudo-record'로도 불립니다.
flags:; 와 같이, 본 메시지처럼 OPT PSEUDOSECTION에 플래그가 없는 경우는 일반적으로 EDNS의 확장 플래그가 설정되지 않았음을 나타냅니다. 확장 플래그의 예시로는 'DNSSEC OK'라는 의미의 'DO'플래그가 있습니다.
질문 섹션 (QUESTION SECTION)
;; QUESTION SECTION:
;lifeoncloud.kr. IN A
왼쪽부터 Name, Class, Type입니다.
Name | Class | Type |
lifeoncloud.kr. | IN | A |
dig 명령어는 별도로 옵션을 지정하지 않으면 A레코드에 대해 질의합니다.
아래 두 명령어는 같은 출력 결과를 보여줍니다.
dig lifeoncloud.kr
dig -t a lifeoncloud.kr
응답 섹션 (ANSWER SECTION)
;; ANSWER SECTION:
lifeoncloud.kr. 600 IN CNAME host.tistory.io.
host.tistory.io. 272 IN CNAME blog-tistory-l51ybqnn.kgslb.com.
blog-tistory-l51ybqnn.kgslb.com. 28 IN A 211.249.222.34
왼쪽부터 Name, TTL, Class, Type, Value 순서로 보시면 됩니다.
Name | TTL | Class | Type | Value |
lifeoncloud.kr. | 600 | IN | CNAME | host.tistory.io. |
host.tistory.io. | 272 | IN | CNAME | blog-tistory-l51ybqnn.kgslb.com. |
blog-tistory-l51ybqnn.kgslb.com. | 28 | v | A | 211.249.222.34 |
분명 질문 섹션에는 A레코드만 있는데 응답에 CNAME레코드가 나오는 이유는 제가 티스토리 블로그에 개인 도메인을 설정하려고 DNS 설정에 CNAME레코드를 추가했기 때문입니다.
참고: CNAME 레코드를 이용하여 티스토리 블로그에 개인 도메인 설정하기
그래서 아래와 같은 순서로 질의가 진행되어 A 레코드를 찾았다고 보면 됩니다.
[lifeoncloud.kr] → [host.tistory.io] → [blog-tistory-l51ybqnn.kgslb.com] → [211.249.222.34]
말로 표현하면 이렇습니다다.
"[lifeoncloud.kr]는 [host.tistory.io]의 별칭이고,
[host.tistory.io]는 [blog-tistory-l51ybqnn.kgslb.com]의 별칭이다.
[blog-tistory-l51ybqnn.kgslb.com]의 A레코드는 [211.249.222.34]이므로,
결국 [lifeoncloud.kr]의 A레코드는 [211.249.222.34]이다."
더 쉽게 비유하면 외국 방송국 관계자가 유퀴즈 보고 '큰 자기'의 소속사에 연락하고 싶어서 검색하다가 아래 순서대로 알게되는 거라고 보면 됩니다.
[큰 자기] → [유느님] → [유재석] → 유재석의 소속사는 [안테나]
만약 제가 CNAME을 설정해두지 않았다면 응답 세션이 아래처럼 깔끔하게 나왔을 겁니다.
;; ANSWER SECTION:
lifeoncloud.kr. 28 IN A 211.249.222.34
쿼리 시간 및 서버 정보 섹션
;; Query time: 15 msec
;; SERVER: 1.214.68.2#53(1.214.68.2)
;; WHEN: Fri Dec 15 21:09:30 KST 2023
- Query time: DNS 쿼리에 소요된 시간
- SERVER: 응답을 받은 DNS 서버의 주소 및 포트
- WHEN:명령어 실행 시간
메시지 크기 섹션 (Message Size)
;; MSG SIZE rcvd: 133
- MSG SIZE: 메시지 크기
- rcvd: 수신(recieved)
수신된 전체 메시지의 크기가 133bytes임을 나타낸다.
이 부분은 주로 네트워크 트래픽 모니터링 같은 목적에 활용할 수 있습니다.
참고 링크
- https://datatracker.ietf.org/doc/html/rfc1035
- https://en.wikipedia.org/wiki/Dig_(command)
- https://en.wikipedia.org/wiki/List_of_DNS_record_types
- https://en.wikipedia.org/wiki/Extension_Mechanisms_for_DNS
- https://jjeongil.tistory.com/1386
- https://linux.die.net/man/1/dig
- https://serverfault.com/questions/1018425/what-does-opt-pseudosection-mean-in-dig-response/1018678#1018678
마무리하며
host, nslookup, dig 명령어로 같은 쿼리를 던져도 dig가 제일 긴 출력 결과를 주는 것이 신기해서 포스팅을 쓰게 되었습니다.
2024-01-23 수정
dig 명령어가 디그다의 Dig(파다)란 뜻도 맞다고 합니다.
알려주신 리눅서님과 자니님 감사합니다 :)
'Network' 카테고리의 다른 글
한빛앤 MSA <주니어가 알아야 할 '네트워크' 이야기> 세미나 후기 (0) | 2024.03.24 |
---|