/엔지니어/트러블슈팅/DNS 해석 오류 진단 — nslookup · di
트러블슈팅초급UbuntuDebianCentOSdnsnslookupdig

DNS 해석 오류 진단 — nslookup · dig · systemd-resolved

DNS 조회 실패, 캐시 오염, 잘못된 nameserver 설정 등 DNS 관련 문제를 nslookup·dig·host·systemd-resolved로 진단하고 해결하는 방법을 설명합니다.

DNS 오류 증상

  • curl: Could not resolve host: example.com
  • ssh: Could not resolve hostname
  • 브라우저에서 특정 사이트만 접속 안 됨
  • ping은 되는데 도메인으로 접속 안 됨

기본 확인 도구

Bash
# 현재 DNS 서버 확인
cat /etc/resolv.conf
# nameserver 8.8.8.8
# nameserver 1.1.1.1

# 기본 DNS 조회 (nslookup)
nslookup google.com
nslookup google.com 8.8.8.8    # 특정 DNS 서버로 조회

# host 명령
host google.com
host google.com 1.1.1.1

# 역방향 조회 (IP → 도메인)
nslookup 8.8.8.8
host 8.8.8.8

dig — 상세 DNS 분석

Bash
# A 레코드 조회
dig google.com

# 특정 레코드 타입
dig google.com A
dig google.com AAAA      # IPv6
dig google.com MX        # 메일 서버
dig google.com TXT       # SPF, DKIM 등
dig google.com NS        # 네임서버
dig google.com CNAME     # 별칭

# 특정 DNS 서버로 조회 (@)
dig @8.8.8.8 google.com
dig @1.1.1.1 google.com

# 짧은 출력 (+short)
dig +short google.com
dig +short google.com MX

# 전파 확인 (여러 DNS에서 조회)
for ns in 8.8.8.8 1.1.1.1 9.9.9.9 208.67.222.222; do
  echo -n "$ns: "; dig +short @$ns example.com
done

# 추적 (루트 → TLD → 권한 서버 순서)
dig +trace google.com

systemd-resolved (Ubuntu 22.04+)

Bash
# 현재 DNS 설정 확인
resolvectl status
resolvectl dns

# 특정 도메인 조회
resolvectl query google.com

# DNS 캐시 초기화
sudo resolvectl flush-caches

# 통계
resolvectl statistics

# DNS 서버 임시 변경
sudo resolvectl dns eth0 8.8.8.8 1.1.1.1

흔한 DNS 문제와 해결

문제 1: /etc/resolv.conf가 비어있거나 잘못됨

Bash
cat /etc/resolv.conf

# 임시 수정
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
echo "nameserver 1.1.1.1" | sudo tee -a /etc/resolv.conf

# Ubuntu 영구 설정 (systemd-resolved 사용)
sudo nano /etc/systemd/resolved.conf
# [Resolve]
# DNS=8.8.8.8 1.1.1.1
# FallbackDNS=9.9.9.9
sudo systemctl restart systemd-resolved

문제 2: 특정 도메인만 안 됨 (캐시 오염)

Bash
# DNS 캐시 초기화
sudo resolvectl flush-caches             # systemd-resolved
sudo systemd-resolve --flush-caches

# nscd 캐시 초기화 (설치된 경우)
sudo systemctl restart nscd

# 직접 DNS 서버로 조회해서 비교
dig @8.8.8.8 example.com
dig @로컬DNS서버 example.com

문제 3: 내부 DNS 서버 못 찾음

Bash
# VPN/사내망에서 내부 도메인 해석 안 될 때
# search 도메인 설정 확인
cat /etc/resolv.conf | grep search

# 특정 도메인에 다른 DNS 사용 (systemd-resolved)
# /etc/systemd/resolved.conf.d/internal.conf
# [Resolve]
# DNS=10.0.0.1
# Domains=internal.example.com

문제 4: TTL 전파 대기

Bash
# TTL 확인 (레코드 만료까지 대기 시간)
dig google.com | grep -A1 "ANSWER SECTION"
# google.com. 299 IN A 142.250.196.110
#             ↑ 299초 후 캐시 만료

# 새 레코드 전파 확인
dig +short @ns1.registrar.com yourdomain.com
dig +short @8.8.8.8 yourdomain.com

점검 체크리스트

Bash
# 1. 기본 인터넷 연결 확인
ping -c 3 8.8.8.8

# 2. DNS 해석 확인
dig +short @8.8.8.8 google.com

# 3. 로컬 DNS 서버 확인
dig +short google.com

# 4. /etc/hosts 확인 (강제 오버라이드 여부)
cat /etc/hosts | grep -v "^#" | grep -v "^$"

# 5. DNS 서버 응답 속도
dig @8.8.8.8 google.com | grep "Query time"
#dns#nslookup#dig#트러블슈팅#systemd-resolved#네트워크
편집 안내 · Editorial Note

이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.

관련 공식 문서GNU/Linux man 페이지

질문 & 답변 (Q&A)

이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.