네트워크 공부 & 실습/네트워크 실습

[Network] dig 명령어는 왜 쓰는걸까?

강_토발즈 2025. 4. 7. 18:21

1. 이 명령어는 왜 필요할까?

도메인 주소를 입력했는데 사이트가 안 열릴 때, 또는 메일이 안 간다거나, CDN이 이상하게 작동할 때… 이럴 때 가장 먼저 확인해야 할 건 DNS가 제대로 작동하는지 여부 다.

dig 명령어는 DNS 서버에 직접 질의하고 응답을 분석할 수 있는 도구로, 네트워크 문제를 추적하거나 도메인 설정이 잘 되었는지 확인할 때 실무에서 매우 자주 사용된다고 한다.

 

-> 웹사이트에 접속하거나 메일을 보내는 거의 모든 인터넷 서비스는 DNS를 거친다. 그래서 DNS 오류는 곧바로 서비스 장애로 이어진다.

 


 

2. 실제 어떤 문제가 생겼을 때 dig 명령어로 문제를 파악할 수 있을까?

 

 

2-1. 웹사이트 접속 불가 시 -> A 레코드 오류 확인

dig address.com A
  • 사용자가 도메인을 입력했는데, 웹 사이트가 열리지 않는다.
    -> A 레코드가 잘못된 IP 를 가르키고 있어서 다른 서버로 연결
  • IP 가 변경되었는데도 예전 IP 로 응답한다.
    -> TTL 설정 문제

2-2. 메일 수신 및 발신 장애 시 -> MX / SPF 레코드 오류 확인

dig address.com MX
dig address.com TXT(SPF)
  • 외부에서 메일이 들어오지 않는다.
    -> MX레코드가 없거나 오타가 있을 가능성이 있다.
  • 내가 보낸 메일이 스팸으로 분류된다.
    -> SPF 설정이 누락되었거나 오류일 가능성이 있다.
  • 메일 서버를 이전했는데 적용이 안된다
    -> MX TTL 문제일 가능성이 높다.

2-3. 도메인 연결 지연 / 불안정 시 -> DNS 전파 상태 확인

dig @8.8.8.8 address.com
dig @1.1.1.1 address.com
  • 도메인을 구입하거나 IP 를 바꿨는데, 일부 지역에서 접속이 안되는 경우
  • DNS가 여러 서버에 제대로 전파되지 않아 접속 여부가 랜덤하게 바뀔 수 있음
  • DNS TTL 이 너무 길어 변경 사항이 늦게 반영될 수 있음

2-4. 내부망 전용 서비스의 오작동 -> 내,외부 DNS 응답차이 비교

dig @내부DNS
dig @8.8.8.8
  • 내부에서만 열려야 하는 서비스가 외부에서 노출 될 수 있다.
  • 내부에서는 접속되지만 외부에서는 "도메인 없음" 오류가 발생
  • VPN 접속 사용자에게 내부 리소스 연결이 DNS 문제로 불가할 수 있음

 

3. 명령어를 직접 입력해보자!

 

 
3-1. dig google.com ( dig google.com A )
dig google.com
  • <<>> DiG 9.18.30-0ubuntu0.24.04.2-Ubuntu <<>> google.com
    -> 사용한 dig 명령어의 버전과 옵션이 출력된다. ubuntu 24.02.2 에 설치된 9.18.30 의 dig 명령어가 사용되었고, 'google.com' 에 대한 기본 질의( A 레코드) 가 수행 됨.

  • global options: +cmd
    -> dig 의 글로벌 옵션을 의미. 지금은 +cmd(기본명령)만 사용되었다. 다른 옵션들도 있음.(+short, +trace, +noall)

  • Got answer:
    -> DNS 서버로부터 응답을 성공적으로 받았음을 나타낸다.

  • ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56371
    -opcode : QUERY -> 일반적인 DNS 질의 유형 (조회 요청)
    -status : NOERROR -> 오류 없이 질의가 성공적으로 처리됨
    -id:56371 -> 요청 - 응답을 매칭하기 위한 식별자(ID), 래덤 값임.

  • flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
    - flags : qr ( 이 메시지는 응답 ), rd ( 재귀 질의 요청), ra (서버가 재귀 질의 허용)
    - QUERY: 1 : 요청한 레코드는 1개 ( google.com 의 A 레코드 1 개를 요청함)
    - ANSWER: 1 : 요청에 대한 응답된 레코드 1개
    - AUTHORITY:0 : 권한 있는 네임서버 정보는 포함되지 않음
    - ADDITIONAL:1 : 추가 정보가 하나 있음

  • OPT PSEUDOSECTION:
    EDNS: version: 0, flags:; udp: 65494- EDNS(확장 DNS) 의 0 버전 사용 중
    - udp: 65494 :  이 클라이언트는 최대 65494바이트까지 UDP 응답을 받을 수 있음. (기본 DNS 512 b, EDNS 65494 b)

  • QUESTION SECTION:
    google.com.                       IN     A

    - 질의한 내용 : google.com
    - 클래스는 IN : Internet
    - 타입 : A -> IPv4 주소 요청 (AAA -> IPv6 주소)
  • ANSWER SECTION:
    google.com.             119     IN      A       142.250.206.206
    - 도메인 이름 : google.com
    - 이 응답은 119초간 로컬에서 캐시 가능
    - 클래스는 IN : Internet
    - 타입 A -> IPv4 주소
    - 응답 값 : 142.250.206.206 (실제 google.com 의 ip 주소)

  • Query time: 3 msec
    - DNS 질의 후 응답까지 걸린 시간 ( 보통 1~100ms 사이)

  • SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
    - 실제 DNS 질의를 처리한 서버 ( 로컬 DNS 리졸버 주소임 / system-resolved 가 사용 됨) 
    - #53 번 포트가 사용 됨. ( DNS 기본 포트)

  • WHEN: Mon Apr 07 16:49:43 KST 2025
    - 제일 쉽다. 질의를 한 시점 

  • MSG SIZE  rcvd: 55
    - 응답 메시지의 크기 ( 55 바이트 )

3-2. dig google.com MX

 

 
 
  •  명령어에 대한 결과는 비슷하지만 질의문에 MX 를 입력하여 질의 하였더니, 응답에서 smtp.google.com 을 통해 응답이 왔다. 네트워크 관리사 및 정보처리기사 시험 문제를 공부하며 맨날 봤던 메일 프토토콜이다!
  • 지금은 메일과 관련된 에러가 없으니 정상적으로 질의를 주고 받았지만, 문제가 생기면 해당 명령어로 DNS 에 대해 문제가 있는지 확인할 수 있다.

 3-3. dig @8.8.8.8 naver.com 

  •  @8.8.8.8 로 DNS 를 명시하는 것. 기본적으로 로컬 DNS 리졸버( 127.0.0.53) 에게 질의하지만, @ 를 사용하여 특정 DNS 서버IP 를 사용하면, 특정 DNS 서버에게 질의 하겠다. 라고 명시하는 것. 
  • 따라서 naver.com 이라는 도메인을 google의 퍼블릭 DNS (8.8.8.8) 에 질의한 것.
  • 4개의 ANSWER 이 응답했고, 이는 naver.com 도메인을 여러 서버에서 분산하여 처리하고 있다는 의미이다 (로드 밸런싱)
  • 4개의 각기 다른 IP 주소에서 naver.com 이라는 요청에 대해 분산하여 응답을 보내주고 있다.
  • 기본적으로 dig address.com 으로 질의를 하면 로컬 DNS 서버에 질의하게 되는데, 이 경우 IP 주소가 바뀌었음에도 캐시 하고 있을 수 있기 때문에 최신 도메인 정보가 반영되지 않았을 수 있다. 따라서 최신 DNS 가 제대로 전파(업데이트) 되었는지 확인하기 위해 특정 도메인을 google DNS 나 기타 퍼블릭 DNS 에 질의하여 확인해 보는 것 이다. 

3-4. dig @8.8.8.8

 

  • 도메인명을 입력하지 않으면 -> 기본값으로 루트 도메인에 대한 질의가 자동으로 들어간다.
  • 즉, 인터넷 DNS의 가장 최상위 계층에 대한 DNS 레코드 잘의를 한 것.
  • 그 결과로 루트 도메인을 관리하는 13개의 네임 서버 주소를 반환 받았다.
  • 전 세계에 분산된 a.root-servers.net ~ m.root-servers.net 은 수십~수백 대의 물리 서버로 운영된다고 한다.
  • 내부 도메인의 경우는 "나만 사용하고, 아무에게도 공개되지 않는 도메인" 이기 때문에, 퍼블릭 DNS 에게 질의한다고 해도 아무런 정보가 없어야 한다. (dig @8.8.8.8 내부도메인) 
  • 내부 도메인(ex. my.nas) 으로 dig my.domain 으로 질의할 경우 내부 DNS 로 응답이 와야 한다. (192.168.0.20)
  • 이렇기 설정에 따른 기대 응답이 올바르지 않을 경우 DNS 설정 오류 여부 및 VPN 환경 구성 필요 여부를 알아낼 수 있다.


4. 마무리 및 보충사항 (로컬 네임 서버)

  • dig는 단순한 명령어 같지만, 정말 많은 정보를 담고 있다.
  • DNS를 보면 서비스가 왜 안 되는지가 보이고, 구성상의 문제도 잡아낼 수 있다.
  • nslookup에 비해 더 상세하고, 구조화된 응답을 주기 때문에 서버나 네트워크 담당자들이 더 선호한다고 한다.

    << 로컬 네임 서버는 퍼블릭 네임 서버에서 정보를 학습하고 저장하는가? >>
  • 로컬 네임 서버는 재귀적 질의를 통해 퍼블릭 네임서버 또는 상위 DNS 서버에서 도메인 정보를 가져오고, 캐시에 저장한다.
  • naver.com 이라는 도메인에 접속하려고 하면
  • 로컬 네임서버가 먼저 질의를 받는다. ( 보통 공유기나 내부 DNS )
  • naver.com 에 처음 접속하는 경우 ip 주소를 모르니, 상위 DNS 서버나 퍼블릭 DNS 서버에게 차례대로 물어본다.
  • 응답을 받아오면, 그 IP 정보를 캐시에 저장해두고, 다시 naver.com 을 질의할 경우 로컬 캐시에서 바로 응답한다.


 

5. 주의사항 및 기타

  • dig 결과는 캐시 상태나 DNS 서버 위치에 따라 다르게 나올 수 있다.
    → 그래서 +trace 옵션이나 @dns서버를 붙여서 확인하는 게 중요할 때도 있다
  • TXT, MX 레코드는 보안 설정(SPF, DMARC 등)과도 관련 있으니 민감한 서비스에서는 반드시 확인 필요하다.
  • 개인 NAS 에 있는 DNS 서버를 구축한다면?
    -> NAS 의 주소 (192.168.0.20) 를 IP 로 외우지 않고, home.nas 식으로 도메인 설정 가능
    -> 자주 방문하는 사이트는 외부 DNS 를 거치지 않기 때문에 응답 속도가 빨라진다.
    -> 광고차단 DNS 나 도메인 필터링도 사용 가능