Como usar dig e nslookup para diagnosticar problemas de DNS

Introdução às Ferramentas de Diagnóstico DNS

O DNS (Domain Name System) é um dos pilares fundamentais da internet, e quando algo dá errado, os usuários enfrentam lentidão ou impossibilidade de acesso a sites. Duas ferramentas essenciais para diagnosticar problemas de DNS são dig e nslookup. Embora ambas realizem consultas DNS, existem diferenças fundamentais entre elas.

dig (Domain Information Groper) é uma ferramenta mais moderna e flexível, oferecendo saída detalhada e controle granular sobre as consultas. Já nslookup é mais antiga e simples, disponível em praticamente todos os sistemas operacionais. Para diagnósticos avançados, dig é superior; para verificações rápidas, nslookup é suficiente.

Para verificar se as ferramentas estão instaladas:

which dig
which nslookup

Em sistemas Debian/Ubuntu, instale com:

sudo apt-get install dnsutils

No CentOS/RHEL:

sudo yum install bind-utils

A sintaxe geral do dig é:

dig [@servidor] [domínio] [tipo] [opções]

Consultas Básicas de Registros DNS

Resolvendo Registros A e AAAA

O registro A mapeia um nome de domínio para um endereço IPv4. O registro AAAA faz o mesmo para IPv6.

dig google.com A

Para uma saída mais limpa:

dig google.com A +short

Para IPv6:

dig google.com AAAA +short

Consultando Registros MX e CNAME

Registros MX indicam os servidores de email do domínio:

dig gmail.com MX +short

Registros CNAME são aliases:

dig www.exemplo.com CNAME

Controle de Saída

Use +noall +answer para exibir apenas a seção de resposta:

dig google.com A +noall +answer

Diagnóstico de Problemas de Resolução

Verificando Servidores DNS Configurados

No Linux, o arquivo /etc/resolv.conf contém os servidores DNS configurados:

cat /etc/resolv.conf

Exemplo de saída:

nameserver 192.168.1.1
nameserver 8.8.8.8

Testando Contra Servidores Específicos

Para testar contra um servidor DNS específico, como o Google Public DNS:

dig @8.8.8.8 exemplo.com A

Isso é útil para verificar se o problema está no servidor DNS local ou no serviço DNS do domínio.

Interpretando Erros Comuns

  • NXDOMAIN: O domínio não existe
  • SERVFAIL: O servidor DNS encontrou um erro interno
  • REFUSED: O servidor recusou a consulta
  • timeout: O servidor não respondeu no tempo esperado
dig dominio-inexistente.com A

Saída típica de erro:

; <<>> DiG 9.16.1-Ubuntu <<>> dominio-inexistente.com A
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 12345

Análise de Cache e TTL

Interpretando o Campo TTL

O TTL (Time To Live) indica por quanto tempo um registro pode ser armazenado em cache:

dig google.com A +noall +answer

Saída:

google.com.     299     IN      A       142.250.218.78

O valor 299 é o TTL em segundos (aproximadamente 5 minutos).

Detectando Registros Expirados

Se um registro apresenta TTL muito baixo ou inconsistente, pode indicar problemas de configuração:

dig exemplo.com A

Compare o TTL com o esperado para o domínio.

Usando +trace para Seguir a Cadeia

A opção +trace segue toda a cadeia de delegação DNS:

dig exemplo.com +trace

Isso mostra a consulta passando por root servers, TLD servers e servidores autoritativos, permitindo identificar onde ocorre a falha.

Depuração de Registros Específicos e Zonas

Consultas Inversas (PTR)

Para descobrir o nome de domínio associado a um IP:

dig -x 8.8.8.8 +short

Resultado:

dns.google.

Verificando Registros SOA e NS

O registro SOA contém informações administrativas da zona:

dig exemplo.com SOA +short

Registros NS indicam os servidores de nomes autoritativos:

dig exemplo.com NS +short

Testando Transferências de Zona (AXFR)

Transferências de zona não autorizadas são um risco de segurança. Para testar se um servidor permite:

dig @ns1.exemplo.com exemplo.com axfr

Se funcionar, o servidor está mal configurado.

Comparação de Resultados entre Diferentes Servidores

Consultas Simultâneas

Execute consultas contra diferentes servidores para comparar:

dig @8.8.8.8 exemplo.com A +short
dig @1.1.1.1 exemplo.com A +short
dig @208.67.222.222 exemplo.com A +short

Automatizando com Scripts

Use dig +short em scripts para monitoramento:

#!/bin/bash
SITE="exemplo.com"
IP_ESPERADO="192.0.2.1"
IP_ATUAL=$(dig $SITE A +short)

if [ "$IP_ATUAL" != "$IP_ESPERADO" ]; then
    echo "Alerta: IP do $SITE mudou para $IP_ATUAL"
fi

Identificando Divergências

Se servidores diferentes retornam IPs distintos, pode haver:

  • Problemas de propagação
  • DNS hijacking
  • Configuração incorreta de servidores autoritativos

Rastreamento Completo com +trace

Entendendo a Hierarquia

O comando dig +trace mostra:

  1. Consulta aos root servers (.)
  2. Consulta aos TLD servers (.com, .org, etc.)
  3. Consulta aos servidores autoritativos do domínio
dig exemplo.com +trace

Detectando Falhas Intermediárias

Se um servidor na cadeia não responde, o +trace mostra exatamente onde:

dig exemplofalso.com +trace

Exemplo Prático

Para diagnosticar um domínio que não resolve:

dig meudominio.com A

Se retornar SERVFAIL, use +trace:

dig meudominio.com +trace

Identifique onde a cadeia quebra — pode ser um servidor NS offline ou configuração incorreta.

Dicas Avançadas e Integração com Outras Ferramentas

Combinando com grep e awk

Para extrair apenas IPs de uma consulta:

dig google.com A +noall +answer | awk '{print $5}'

Script para Monitorar Mudanças

#!/bin/bash
DOMINIO="meusite.com"
ARQUIVO_LOG="dns_changes.log"
IP_ANTERIOR=$(cat $ARQUIVO_LOG 2>/dev/null || echo "")
IP_ATUAL=$(dig $DOMINIO A +short)

if [ "$IP_ANTERIOR" != "$IP_ATUAL" ]; then
    echo "$(date): $DOMINIO mudou de $IP_ANTERIOR para $IP_ATUAL" >> $ARQUIVO_LOG
    echo "$IP_ATUAL" > $ARQUIVO_LOG
fi

Uso em Conjunto com ping e traceroute

Diagnóstico completo de conectividade:

dig exemplo.com A +short
ping -c 4 $(dig exemplo.com A +short)
traceroute $(dig exemplo.com A +short)

Isso permite verificar se o DNS resolve corretamente, se o host responde e qual o caminho de rede até ele.

Referências