06 - Diagnóstico (dig, nslookup, host)
video: https://youtu.be/... no frontmatter da nota.Diagnóstico DNS: dig, nslookup, host
1. Visão Geral das Ferramentas
O diagnóstico de DNS é uma das habilidades mais frequentes em redes. As três ferramentas clássicas — dig, nslookup e host — foram desenvolvidas em épocas diferentes e têm propósitos sobrepostos. Complementam o toolkit ferramentas modernas como drill (ldns), kdig (Knot DNS) e dnsmasq (para testes locais).
| Ferramenta | Origem | Saída | Quando usar |
|---|---|---|---|
| dig | BIND (ISC), 1990s | Detalhada, parseable | Diagnóstico técnico |
| nslookup | BSD, 1980s | Verbosa, interativa | Compatibilidade Windows |
| host | BIND (ISC) | Compacta | Quick check |
| drill | NLnet Labs (ldns) | Detalhada, valida DNSSEC | Testes DNSSEC |
| kdig | Knot DNS | Detalhada, suporta DoT/DoH | Diagnóstico moderno |
2. dig (Domain Information Groper)
A sintaxe geral é dig [@server] name [type] [options]. O @server especifica o servidor DNS a consultar (default: /etc/resolv.conf). type pode ser A, AAAA, MX, NS, TXT, SOA, ANY, AXFR, etc. As options são flags começadas com +.
Exemplos Básicos
dig www.exemplo.com.br # consulta default (tipo A)
dig www.exemplo.com.br +short # apenas a resposta
dig exemplo.com.br MX +short # registros MX
dig exemplo.com.br NS # registros NS
dig exemplo.com.br TXT # registros TXT
dig exemplo.com.br AAAA # endereço IPv6
dig @1.1.1.1 www.exemplo.com.br # servidor específico (Cloudflare)
dig -x 203.0.113.10 # reverse DNS (PTR)
dig exemplo.com.br A +noall +answer # apenas a seção ANSWER
dig exemplo.com.br A +noall +stats # apenas estatísticas
Opções Mais Úteis
| Opção | Função |
|---|---|
+short |
Apenas a resposta compacta |
+trace |
Resolve recursivamente a partir da raiz |
+noall +answer |
Suprime cabeçalhos, mostra só a seção ANSWER |
+stats |
Mostra estatísticas (tempo, tamanho) |
+dnssec |
Solicita DNSSEC (set DO bit) |
+multi |
Saída em formato human-readable multi-line |
+tcp / +ignore |
Força TCP / ignora truncamento (não tenta TCP) |
+nsid |
Solicita NSID (identificação do servidor respondendo) |
+subnet=1.2.3.0/24 |
ECS — envia subnet do cliente (para CDNs) |
Trace: O Modo Mais Educativo
dig +trace www.exemplo.com.br resolve recursivamente mostrando cada etapa: (1) consulta aos root servers; (2) referência aos servidores do TLD .br (a.dns.br, etc.); (3) referência aos autoritativos do domínio; (4) resposta final. Esse modo é indispensável para diagnosticar problemas de delegação, glue records ausentes, ou respostas divergentes entre servidores.
Consulta a DNSSEC com dig
dig +dnssec www.exemplo.com.br A
# Saída incluirá registros RRSIG e a flag "ad" (Authentic Data) se validado.
# ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, ...
# Validar cadeia completa desde a raiz com delv (parte do pacote BIND):
delv @1.1.1.1 www.exemplo.com.br A
3. nslookup
A ferramenta mais antiga (1980s), disponível em quase todos os sistemas (incluindo Windows). Tem modo interativo e não-interativo. No modo não-interativo, usa-se nslookup -type=MX exemplo.com.br, nslookup -type=NS exemplo.com.br, nslookup -type=TXT exemplo.com.br, nslookup 203.0.113.10 (reverse) e nslookup www.exemplo.com.br 1.1.1.1 (servidor específico).
Modo Interativo
nslookup
> server 1.1.1.1 # troca servidor
> set type=MX # tipo MX
> exemplo.com.br # consulta
> set debug # saída verbosa
> exemplo.com.br
> exit
A desvantagem do nslookup é que em algumas distribuições Linux ele foi declarado obsoleto (no BIND 9) em favor do dig e host, mas continua disponível por compatibilidade.
4. host
Versão mais compacta e human-readable, do pacote BIND. Ideal para scripts rápidos. Comandos comuns: host www.exemplo.com.br (A e AAAA), host -t MX exemplo.com.br (MX), host -t NS exemplo.com.br (NS), host -t TXT exemplo.com.br (TXT), host -t SOA exemplo.com.br (SOA), host -t AAAA exemplo.com.br (IPv6), host -a exemplo.com.br (saída detalhada), host 203.0.113.10 (reverse), host www.exemplo.com.br 1.1.1.1 (servidor específico).
5. dnsmasq para Testes Locais
O dnsmasq é um servidor DNS+DHCP leve, frequentemente usado em laboratório para interceptar consultas, forjar respostas para testes, ou como caching resolver.
# /etc/dnsmasq.conf
listen-address=127.0.0.1
server=8.8.8.8
# Forjar domínios para testes
address=/meuteste.local/192.168.1.100
address=/blocked.exemplo.com/0.0.0.0
systemctl start dnsmasq
dig @127.0.0.1 meuteste.local +short # 192.168.1.100
6. Drill e kdig (Modernos)
drill (ldns)
Mais limpo que o dig, com suporte DNSSEC nativo. Comandos: drill www.exemplo.com.br, drill -S www.exemplo.com.br (valida DNSSEC explicitamente), drill -D www.exemplo.com.br (dnssec), drill -T www.exemplo.com.br (via TCP).
kdig (Knot DNS)
Suporta DoT (DNS over TLS), DoH (DNS over HTTPS) e DoQ (DNS over QUIC). Comandos: kdig www.exemplo.com.br, kdig @1.1.1.1 +tls www.exemplo.com.br (DoT na porta 853), kdig @1.1.1.1 +https www.exemplo.com.br (DoH na porta 443), kdig @dns.google +quic www.exemplo.com.br (DoQ), kdig +dnssec www.exemplo.com.br (DNSSEC).
7. Diagnóstico Passo a Passo
Cenário 1: Site não abre, suspeita de DNS
dig www.exemplo.com.br +short # 1. resolve?
dig www.google.com +short # 2. isolar falha local
dig @1.1.1.1 www.exemplo.com.br +short # 3. servidor alternativo
dig exemplo.com.br NS +short # 4. autoritativos
dig @ns1.exemplo.com.br www.exemplo.com.br # 5. consultar autoritativo
dig +trace www.exemplo.com.br # 6. trace completo
Cenário 2: E-mail não chega, suspeita de MX/SPF
dig exemplo.com.br MX +short
dig exemplo.com.br TXT +short | grep spf
dig _dmarc.exemplo.com.br TXT +short
dig google._domainkey.exemplo.com.br TXT +short
Cenário 3: Suspeta de sequestro de DNS
# Comparar recursivos públicos
dig @1.1.1.1 www.exemplo.com.br +short
dig @8.8.8.8 www.exemplo.com.br +short
dig @9.9.9.9 www.exemplo.com.br +short
# Se divergentes, validar com DNSSEC
dig +dnssec @1.1.1.1 www.exemplo.com.br A
# Verificar com autoritativo diretamente
dig @a.dns.br exemplo.com.br NS +short
dig @ns1.exemplo.com.br www.exemplo.com.br +short
Cenário 4: Lentidão para resolver
dig www.exemplo.com.br +stats | grep "Query time" # medir tempo
dig +tcp www.exemplo.com.br # forçar TCP
dig +notcp www.exemplo.com.br # forçar UDP
dig +nsid www.exemplo.com.br # identificar servidor
8. Boas Práticas e Dicas
Use +short para scripts: evite parsear a saída verbosa do dig. Em vez de IP=$(dig www.exemplo.com.br | awk '/ANSWER SECTION/{getline; print $5}'), use IP=$(dig +short www.exemplo.com.br | head -1).
Verifique o AD bit em consultas DNSSEC: dig @1.1.1.1 +dnssec www.exemplo.com.br | grep "flags:" deve mostrar ;; flags: qr rd ra ad; se a validação DNSSEC foi bem-sucedida.
Teste o tamanho da resposta: dig www.exemplo.com.br TXT +stats | grep "MSG SIZE". Se passar de 512 bytes sem EDNS0, há problema em firewalls antigos.
Use ECS para testar CDNs: dig +subnet=200.143.0.0/24 www.exemplo.com.br +short simula consulta vinda de São Paulo; dig +subnet=8.8.8.0/24 www.exemplo.com.br +short simula consulta vinda de outro país.
9. Tabela Resumo de Comandos
| Objetivo | Comando |
|---|---|
| IP de um host | dig host +short |
| MX de um domínio | dig dominio MX +short |
| NS autoritativos | dig dominio NS +short |
| TXT (SPF, DKIM, DMARC) | dig dominio TXT +short |
| Reverse DNS | dig -x IP +short |
| Traçar hierarquia | dig +trace dominio |
| Validar DNSSEC | dig +dnssec dominio A |
| Forçar TCP | dig +tcp dominio |
| Resposta formatada | dig dominio +multi |
| Estatísticas | dig dominio +stats |
10. Conclusão
As ferramentas de diagnóstico DNS são o canivete suíço do engenheiro de redes. Dominar dig é particularmente importante por sua flexibilidade e parsing facilitado; nslookup mantém utilidade em ambientes Windows e scripts legados; host oferece concisão para quick checks. Para cenários modernos com DoT, DoH, DoQ e validação DNSSEC detalhada, kdig e drill são complementos essenciais. Em conjunto, essas ferramentas permitem diagnosticar qualquer problema de DNS — desde falhas simples de resolução até problemas sutis de delegação, cache, DNSSEC e CDN routing. A regra prática é: nunca confie em uma única consulta; sempre trace, valide a cadeia e compare servidores.