우분투 실전 명령어 | dig/nslookup으로 DNS 조회 장애 진단

서버는 살아 있는데 도메인만 안 열릴 때가 많습니다. 이럴 때는 앱 로그부터 보기보다 DNS 경로를 먼저 쪼개서 확인하는 편이 빠릅니다. dig, nslookup, resolvectl 조합만 익혀도 문제 구간을 거의 바로 좁힐 수 있습니다.

언제 쓰는가

  • 특정 도메인만 접속 실패할 때
  • 서버에서만 DNS 조회가 느리거나 실패할 때
  • 사내 DNS와 공용 DNS 결과가 다를 때
  • A 레코드는 보이는데 서비스 연결이 안 될 때

바로 쓰는 명령어

# 기본 A 레코드 조회
dig example.com +short

# NS/MX/TXT 등 레코드 타입 지정 조회
dig example.com NS +short
dig example.com MX +short
dig example.com TXT +short

# 특정 DNS 서버로 강제 질의
# 사내 DNS와 공용 DNS 결과 비교할 때 유용
dig @8.8.8.8 example.com A +short
dig @1.1.1.1 example.com A +short

# +trace로 위임 경로 확인
# 루트 -> TLD -> 권한 DNS 순서로 확인
dig example.com +trace
# nslookup으로 빠른 점검
nslookup example.com
nslookup -type=mx example.com

# 시스템이 실제로 쓰는 resolver 상태 확인
resolvectl status
resolvectl query example.com

# getent는 glibc name service 경로를 타므로 실제 앱 동작에 가깝다
getent hosts example.com

핵심 옵션/패턴

  • +short: 결과를 짧게 출력해 스크립트 처리에 좋다.
  • @DNS서버IP: 어떤 DNS 서버에 질의할지 강제로 지정한다.
  • +trace: 위임 체인 전체를 따라가서 어느 구간에서 깨지는지 찾는다.
  • +time=2 +tries=1: 느린 환경에서 타임아웃 기준을 줄여 빠르게 재시도한다.
  • dig +nocmd +noall +answer: 답변 섹션만 출력해 로그 노이즈를 줄인다.

명령 출력 예시

$ dig example.com A +short
93.184.216.34

$ dig @8.8.8.8 example.com A +short
93.184.216.34

$ dig @10.0.0.53 example.com A +short
# 
$ resolvectl query example.com
example.com: 93.184.216.34                 -- link: eth0
             (example.com)

-- Information acquired via protocol DNS in 12.3ms.
-- Data is authenticated: no

자주 하는 실수

  • 브라우저 캐시 문제를 DNS 장애로 오인한다.
    • 서버에서 dig/getent로 먼저 재현해야 판단이 정확하다.
  • A 레코드만 보고 정상이라고 결론낸다.
    • 실제 서비스는 CNAME, AAAA, TXT(SPF), MX 등 다른 레코드 영향도 크다.
  • 로컬 PC 결과만 보고 서버도 같을 거라고 가정한다.
    • 서버 resolver 설정, VPC DNS, 사내 DNS 포워더가 다르면 결과가 달라진다.
  • +trace 결과를 끝까지 읽지 않고 중간에서 멈춘다.
    • delegation 끊김은 마지막 권한 구간에서 드러나는 경우가 많다.

검증 방법

# 1) 서버가 쓰는 DNS 서버 확인
resolvectl status | sed -n '/DNS Servers/,+2p'

# 2) 공용 DNS와 사내 DNS 결과 비교
dig @8.8.8.8 myservice.example.com A +short
dig @1.1.1.1 myservice.example.com A +short
dig @10.0.0.53 myservice.example.com A +short

# 3) 애플리케이션 관점 확인
getent hosts myservice.example.com

# 4) IPv6 영향 확인
dig myservice.example.com AAAA +short

운영 팁

장애 대응 때는 조회 결과를 타임스탬프와 함께 남기는 습관이 좋습니다. 같은 도메인이라도 전파 구간에 따라 분 단위로 값이 바뀔 수 있어서, 나중에 원인 분석할 때 증거가 됩니다. 팀 내에서 공용 DNS 2개와 사내 DNS 1개를 고정해 비교하는 플레이북을 만들어두면 대응 속도가 눈에 띄게 빨라집니다.

출처

  • ISC BIND 9 Administrator Reference Manual
  • Ubuntu Server Guide
  • Cloudflare Learning Center
  • Google Public DNS Documentation