nslookup e dig: Diagnóstico e Validação de Registos DNS para Sysadmins
nslookup · dig · DNS · Diagnóstico · Registros · Zonas · MX · SPF · DKIM · DMARC · Sysadmin · Redes | ✎ Duarte Spínola | 2026-07-08
O DNS (Domain Name System) é a espinha dorsal da Internet — cada email, cada site, cada ligação VPN depende de registos DNS correctos. Para um sysadmin, saber diagnosticar problemas de DNS com nslookup (Windows) e dig (Linux/macOS) é uma competência fundamental. Este guia prático mostra como validar todos os tipos de registos DNS (A, AAAA, MX, TXT, CNAME, NS, SOA, PTR, SRV, DKIM, DMARC, CAA) em diferentes serviços (Cloudflare, Google, Azure, Amazon Route53, on-premises BIND), com base na RFC 1035, Microsoft DNS documentation e ISC BIND documentation. Para diagnóstico de conectividade geral, consulta Diagnóstico de Conectividade Linux Avançado.
dig (Domain Information Groper) está disponível em todos os Linux e macOS via pacote dnsutils (Debian/Ubuntu) ou bind-utils (RHEL/CentOS). nslookup está disponível nativamente em todos os Windows e também em Linux. Para diagnóstico em Windows Server, consulta Diagnóstico de Conectividade Windows Server.
Conteúdos
- 1. Registos DNS: Tipos e Quando Usar Cada Um
- 2. nslookup vs dig: Qual a Diferença
- 3. Consultar Registos A e AAAA (IPv4/IPv6)
- 4. Consultar Registos MX (Email)
- 5. Consultar Registos TXT (SPF, DKIM, DMARC)
- 6. Consultar Registos NS (Name Servers)
- 7. Consultar Registos SOA (Start of Authority)
- 8. Consultar Registos CNAME (Aliases)
- 9. Consultar Registos PTR (Reverse DNS)
- 10. Consultar Registos SRV (Serviços)
- 11. Consultar Servidores DNS Específicos
- 12. Troubleshooting: Problemas Comuns
- 13. Cenário Prático PME (migração email)
- 14. Checklist de Validação DNS
1. Registos DNS: Tipos e Quando Usar Cada Um
O DNS tem dezenas de tipos de registos, mas os 10 mais usados em diagnóstico de sysadmin são:
| Tipo | Função | Exemplo |
|---|---|---|
| A | Hostname → IPv4 | empresa.pt → 192.0.2.1 |
| AAAA | Hostname → IPv6 | empresa.pt → 2001:db8::1 |
| MX | Mail exchange (servidor email) | empresa.pt → mail.empresa.pt (prio 10) |
| TXT | Texto arbitrário (SPF, DKIM, DMARC) | “v=spf1 include:_spf.google.com ~all” |
| CNAME | Alias para outro hostname | www.empresa.pt → empresa.pt |
| NS | Name servers autoritativos | empresa.pt → ns1.cloudflare.com |
| SOA | Start of Authority (metadados zona) | serial, refresh, retry, expire, TTL |
| PTR | Reverse DNS (IP → hostname) | 1.2.0.192.in-addr.arpa → empresa.pt |
| SRV | Serviços (AD, SIP, XMPP) | _ldap._tcp.empresa.pt → dc01.empresa.pt |
| CAA | Certificate Authority Authorization | 0 issue “letsencrypt.org” |
2. nslookup vs dig: Qual a Diferença
Ambos servem para consultar DNS, mas têm diferenças importantes:
| Característica | nslookup | dig |
|---|---|---|
| Disponibilidade | Windows (nativo), Linux | Linux, macOS (dnsutils/bind-utils) |
| Modo | Interactivo e não-interactivo | Apenas não-interactivo |
| Output | Mais verboso, menos parseable | Formato estruturado, ideal para scripts |
| Mostrar TTL | Sim (com set debug) | Sim (sempre visível) |
| Trace delegação | Não | Sim (+trace — mostra caminho completo) |
# Instalar dig em diferentes sistemas
# Ubuntu/Debian:
sudo apt install dnsutils
# RHEL/CentOS/Fedora:
sudo dnf install bind-utils
# macOS: já incluído nativamente
# Windows: instalar via WSL ou usar nslookup nativo
# Verificar versão
dig -v
nslookup -version
3. Consultar Registos A e AAAA (IPv4/IPv6)
# === REGISTO A (IPv4) ===
# dig: consulta registo A
dig empresa.pt A +noall +answer
# empresa.pt. 300 IN A 192.0.2.1
# dig: consulta curta (apenas IP)
dig +short empresa.pt A
# 192.0.2.1
# nslookup: consulta registo A
nslookup empresa.pt
# Name: empresa.pt
# Address: 192.0.2.1
# nslookup: especificar tipo
nslookup -type=A empresa.pt
# === REGISTO AAAA (IPv6) ===
dig +short empresa.pt AAAA
# 2001:db8::1
nslookup -type=AAAA empresa.pt
# dig: mostrar TTL e detalhes completos
dig empresa.pt A
# ; <<>> DiG 9.18.0 <<>> empresa.pt A
# ;; ANSWER SECTION:
# empresa.pt. 300 IN A 192.0.2.1
# ^^ TTL = 300 segundos (5 min)
# dig: mostrar apenas TTL
dig empresa.pt A +noall +answer | awk '{print $2}'
# 300
# Verificar se site tem IPv6 (importante para compatibilidade)
dig +short google.com AAAA
# 2a00:1450:4001:830::200e
# Resolver todos os IPs (round-robin)
dig +short github.com A
# 140.82.121.3
# 140.82.121.4
4. Consultar Registos MX (Email)
Os registos MX indicam quais os servidores que recebem email para um domínio. A RFC 5321 (SMTP) define que o MX com prioridade mais baixa é tentado primeiro.
# === REGISTO MX ===
# dig: consultar MX
dig empresa.pt MX +noall +answer
# empresa.pt. 3600 IN MX 10 mail.empresa.pt.
# empresa.pt. 3600 IN MX 20 mail2.empresa.pt.
# ^^^^ ^ ^^^^^^^^^^^^^^^^^^^
# TTL prio servidor
# dig: formato curto
dig +short empresa.pt MX
# 20 mail2.empresa.pt.
# 10 mail.empresa.pt.
# nslookup: consultar MX
nslookup -type=MX empresa.pt
# empresa.pt mail exchanger = 10 mail.empresa.pt.
# empresa.pt mail exchanger = 20 mail2.empresa.pt.
# Verificar MX de provedores conhecidos
dig +short gmail.com MX
# 5 gmail-smtp-in.l.google.com.
# 10 alt1.gmail-smtp-in.l.google.com.
dig +short outlook.com MX
# 10 outlook-com.olc.protection.outlook.com.
# Verificar se domínio tem MX (sem MX = não recebe email)
dig +short sem-email.pt MX
# (vazio = não tem MX)
5. Consultar Registos TXT (SPF, DKIM, DMARC)
Os registos TXT são usados para SPF (Sender Policy Framework), DKIM (DomainKeys Identified Mail) e DMARC. Para uma análise completa de email, consulta os artigos sobre SPF, DKIM e DMARC no kbase.pt. A especificação SPF está em RFC 7208, DKIM em RFC 6376 e DMARC em RFC 7489.
# === SPF (Sender Policy Framework) ===
# Consulta registo TXT do domínio raiz
dig +short empresa.pt TXT
# "v=spf1 include:_spf.google.com include:_spf.empresa.pt ~all"
nslookup -type=TXT empresa.pt
# Verificar SPF de provedores
dig +short google.com TXT
# "v=spf1 include:_netblocks.google.com include:_netblocks2.google.com ..."
# === DKIM (DomainKeys Identified Mail) ===
# DKIM é consultado como TXT no selector._domainkey.dominio
# Selector normalmente: google, selector1, selector2, default
dig +short google._domainkey.empresa.pt TXT
# "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBA..."
# Selector Microsoft 365 (default)
dig +short selector1._domainkey.empresa.pt CNAME
# selector1._domainkey.empresa.pt.cloudflare.net.
# Lista de selectors comuns para testar:
# default, google, selector1, selector2, s1, s2, k1
# === DMARC ===
# DMARC é consultado como TXT em _dmarc.dominio
dig +short _dmarc.empresa.pt TXT
# "v=DMARC1; p=quarantine; rua=mailto:[email protected]; pct=100"
nslookup -type=TXT _dmarc.empresa.pt
# === Validação completa de email (SPF + DKIM + DMARC) ===
# Script bash para validar config email de um domínio
DOMAIN="empresa.pt"
echo "=== DNS Email Validation for $DOMAIN ==="
echo -e "\n--- MX Records ---"
dig +short $DOMAIN MX
echo -e "\n--- SPF (TXT root) ---"
SPF=$(dig +short $DOMAIN TXT | grep spf)
if [ -z "$SPF" ]; then
echo "⚠️ SPF NÃO ENCONTRADO!"
else
echo "✅ SPF: $SPF"
fi
echo -e "\n--- DMARC ---"
DMARC=$(dig +short _dmarc.$DOMAIN TXT | grep DMARC)
if [ -z "$DMARC" ]; then
echo "⚠️ DMARC NÃO ENCONTRADO!"
else
echo "✅ DMARC: $DMARC"
fi
echo -e "\n--- DKIM (selector: default) ---"
DKIM=$(dig +short default._domainkey.$DOMAIN TXT)
if [ -z "$DKIM" ]; then
echo "⚠️ DKIM selector 'default' não encontrado"
else
echo "✅ DKIM: ${DKIM:0:60}..."
fi
6. Consultar Registos NS (Name Servers)
# === REGISTO NS ===
# dig: consultar NS
dig +short empresa.pt NS
# ns1.cloudflare.com.
# ns2.cloudflare.com.
# nslookup:
nslookup -type=NS empresa.pt
# empresa.pt nameserver = ns1.cloudflare.com.
# Verificar NS de diferentes provedores DNS
dig +short google.com NS
# ns1.google.com.
# ns2.google.com.
dig +short microsoft.com NS
# ns1-39.azure.com.
# ns2-39.azure.net.
# Comparar NS com WHOIS (deve coincidir)
whois empresa.pt | grep "Name Server"
7. Consultar Registos SOA (Start of Authority)
O registo SOA contém metadados da zona: serial number, refresh, retry, expire e TTL mínimo. É essencial para diagnosticar problemas de replicação DNS. Documentação: RFC 1035.
# === REGISTO SOA ===
dig empresa.pt SOA +noall +answer
# empresa.pt. 3600 IN SOA ns1.cloudflare.com. admin.empresa.pt. (
# 2026070801 ; serial
# 10000 ; refresh (2h46m)
# 2400 ; retry (40m)
# 604800 ; expire (7 dias)
# 3600 ; minimum TTL (1h)
# )
# nslookup:
nslookup -type=SOA empresa.pt
# Verificar serial number (importante para replicação AD DNS)
# Se o serial não incrementar, há problema de replicação
# Comparar SOA entre servidores DNS autoritativos
dig @ns1.cloudflare.com empresa.pt SOA +short
dig @ns2.cloudflare.com empresa.pt SOA +short
# Os seriais devem ser iguais
# Para AD DNS: verificar serial em todos os DCs
dig @dc01.empresa.pt empresa.pt SOA +short
dig @dc02.empresa.pt empresa.pt SOA +short
8. Consultar Registos CNAME (Aliases)
# === REGISTO CNAME ===
# dig: consultar CNAME
dig +short www.empresa.pt CNAME
# empresa.pt.
# dig: resolver CNAME completo (mostra cadeia + IP final)
dig www.empresa.pt +noall +answer
# www.empresa.pt. 300 IN CNAME empresa.pt.
# empresa.pt. 300 IN A 192.0.2.1
# nslookup:
nslookup -type=CNAME www.empresa.pt
# Verificar CNAME de serviços cloud
dig +short mail.empresa.pt CNAME
# empresa.pt.mail.protection.outlook.com.
# Verificar CNAME de validação de certificados
dig +short acme-challenge.empresa.pt CNAME
9. Consultar Registos PTR (Reverse DNS)
O reverse DNS (PTR) resolve IP → hostname. É crítico para email — muitos servidores SMTP rejeitam email se o PTR do IP não coincidir com o HELO/EHLO. Para mais detalhes sobre email, consulta Postfix SMTP Relay para PME.
# === REGISTO PTR (Reverse DNS) ===
# dig: consulta reverse (IP → hostname)
dig -x 192.0.2.1 +short
# mail.empresa.pt.
# nslookup: consulta reverse
nslookup 192.0.2.1
# Name: mail.empresa.pt
# Address: 192.0.2.1
# Verificar reverse DNS de IP público (importante para email)
dig -x 185.0.2.1 +short
# mail.empresa.pt.
# Verificar reverse DNS do Google
dig -x 8.8.8.8 +short
# dns.google.
# Para ranges IP: usar formato in-addr.arpa
dig 1.2.0.192.in-addr.arpa PTR +short
# Para IPv6: usar formato ip6.arpa
dig -x 2001:4860:4860::8888 +short
# dns.google.
10. Consultar Registos SRV (Serviços)
Os registos SRV indicam a localização de serviços (AD Domain Controllers, SIP, XMPP, Kerberos). Para gestão de AD, consulta Segurança do Active Directory.
# === REGISTO SRV ===
# Procurar Domain Controllers via SRV
dig +short _ldap._tcp.empresa.pt SRV
# 0 100 389 dc01.empresa.pt.
# 0 100 389 dc02.empresa.pt.
# ^ ^^^ ^^^ ^^^^^^^^^^^^^^^^
# prio weight port target
# Procurar Global Catalog
dig +short _gc._tcp.empresa.pt SRV
# Procurar Kerberos
dig +short _kerberos._tcp.empresa.pt SRV
# 0 100 88 dc01.empresa.pt.
# nslookup:
nslookup -type=SRV _ldap._tcp.empresa.pt
# Verificar SIP (VoIP)
dig +short _sip._tcp.empresa.pt SRV
# Verificar Autodiscover Exchange
dig +short _autodiscover._tcp.empresa.pt SRV
11. Consultar Servidores DNS Específicos
Uma das funções mais importantes do dig/nslookup é consultar um servidor DNS específico — isto permite comparar respostas entre provedores e detectar caching problems.
# dig: consultar servidor DNS específico (@servidor)
dig @8.8.8.8 empresa.pt A +short # Google DNS
dig @1.1.1.1 empresa.pt A +short # Cloudflare DNS
dig @9.9.9.9 empresa.pt A +short # Quad9 DNS
dig @208.67.222.222 empresa.pt A +short # OpenDNS
# Comparar resposta entre servidores
echo "Google DNS:"
dig @8.8.8.8 empresa.pt A +short
echo "Cloudflare DNS:"
dig @1.1.1.1 empresa.pt A +short
echo "DNS local (AD):"
dig @192.168.1.10 empresa.pt A +short
# nslookup: especificar servidor
nslookup empresa.pt 8.8.8.8
nslookup empresa.pt 1.1.1.1
# Forçar consulta ao servidor autoritativo (sem cache)
dig @ns1.cloudflare.com empresa.pt A +short
> DiG 9.18 <<>> +trace empresa.pt
# ;; ROOT SERVERS:
# a.root-servers.net. 518400 IN NS ...
# ;; COM TLD:
# a.gtld-servers.net. 172800 IN NS ...
# ;; Authoritative:
# ns1.cloudflare.com. 86400 IN NS ...
# ;; Answer:
# empresa.pt. 300 IN A 192.0.2.1
# +trace é excelente para diagnosticar problemas de delegação
# e caches envenenadas (DNS poisoning)
# Verificar tempo de resposta (+stats)
dig empresa.pt A +stats | grep "Query time"
# ;; Query time: 4 msec
# Forçar TCP em vez de UDP (+tcp)
dig +tcp empresa.pt A
# Forçar DNSSEC (+dnssec)
dig +dnssec empresa.pt A
12. Troubleshooting: Problemas Comuns
Sintomas típicos: site não resolve, email não chega, VPN não liga, AD login lento. Causas: TTL alto com registo errado, propagação incompleta, TTL cache em resolver local, delegação incorrecta, registo em falta.
# === PROBLEMA 1: Site não resolve ===
# Verificar se registo existe no autoritativo
dig @ns1.cloudflare.com empresa.pt A +short
# Se vazio: registo não existe → adicionar na zona
# Se existe mas não resolve localmente: cache ou propagação
# Verificar cache local (Windows)
ipconfig /displaydns | findstr empresa.pt
# Limpar cache local (Windows)
ipconfig /flushdns
# Verificar cache local (Linux systemd-resolved)
resolvectl statistics
# Limpar cache (Linux)
sudo systemd-resolve --flush-caches
# ou
sudo rndc flush # se BIND
# === PROBLEMA 2: Email não chega ===
# 1. Verificar MX
dig +short empresa.pt MX
# Se vazio: não tem MX → email não funciona
# 2. Verificar SPF
dig +short empresa.pt TXT | grep spf
# Se vazio: email vai para spam
# 3. Verificar DMARC
dig +short _dmarc.empresa.pt TXT
# Se vazio: sem proteção DMARC
# 4. Verificar reverse DNS (PTR) do IP de envio
dig -x 185.0.2.1 +short
# Se não coincidir com HELO: email rejeitado
# === PROBLEMA 3: AD login lento ===
# Verificar SRV records (Domain Controllers)
dig +short _ldap._tcp.empresa.pt SRV
# Se vazio: SRV não registados → verificar Dynamic Updates
# Se DCs em falta: verificar registo dinâmico DNS no AD
# Verificar SOA serial (replicação)
dig @dc01.empresa.pt empresa.pt SOA +short
dig @dc02.empresa.pt empresa.pt SOA +short
# Se seriais diferentes: problema de replicação AD DNS
# === PROBLEMA 4: CNAME não resolve ===
# Verificar se CNAME aponta para registo que existe
dig +short www.empresa.pt CNAME
# empresa.pt.
dig +short empresa.pt A
# Se vazio: o alvo do CNAME não tem registo A
# === PROBLEMA 5: Propagação DNS ===
# Verificar propagação global (usando diferentes resolvers)
for dns in 8.8.8.8 1.1.1.1 9.9.9.9 208.67.222.222; do
echo -n "$dns: "
dig @$dns empresa.pt A +short
done
# Para verificação global: whatsmydns.net ou dig.fun
# Para reduzir TTL antes de mudança: baixar TTL para 300 (5min)
# 48h antes da mudança
13. Cenário Prático PME (migração email)
Cenário real: PME a migrar email de Google Workspace para Microsoft 365. Antes de mudar o MX, validar que todos os registos estão correctos no novo provedor.
# === MIGRAÇÃO EMAIL: Google Workspace → Microsoft 365 ===
# Antes de mudar MX, validar registos novos
DOMAIN="empresa.pt"
echo "=== Validação pré-migração M365 ==="
# 1. Verificar MX actual (Google)
echo -e "\n--- MX Actual (Google) ---"
dig +short $DOMAIN MX
# 1 aspmx.l.google.com.
# 5 alt1.aspmx.l.google.com.
# 2. Verificar MX novo (M365) — ainda não deve estar ativo
echo -e "\n--- MX Novo (M365) ---"
dig +short $DOMAIN.mail.protection.outlook.com MX
# 10 empresa-pt.mail.eo.outlook.com.
# 3. Verificar SPF — atualizar para incluir M365
echo -e "\n--- SPF ---"
dig +short $DOMAIN TXT | grep spf
# Antes: "v=spf1 include:_spf.google.com ~all"
# Depois: "v=spf1 include:spf.protection.outlook.com ~all"
# 4. Verificar DKIM M365 (selector1)
echo -e "\n--- DKIM M365 ---"
dig +short selector1._domainkey.$DOMAIN CNAME
# selector1._domainkey.empresa.pt.mail.onmicrosoft.com.
# 5. Verificar autodiscover
echo -e "\n--- Autodiscover ---"
dig +short autodiscover.$DOMAIN CNAME
# autodiscover.outlook.com.
# 6. Verificar Lync/Skype (SRV)
echo -e "\n--- SIP SRV ---"
dig +short _sipfederationtls._tcp.$DOMAIN SRV
# 100 1 5061 sipfed.online.lync.com.
echo -e "\n✅ Tudo validado. Pode mudar MX."
echo "⚠️ Reduzir TTL para 300 (5min) 48h antes da mudança."
14. Checklist de Validação DNS
| Validação | Comando | Estado |
|---|---|---|
| Registo A existe | dig +short dominio.pt A |
☐ |
| Registo AAAA (IPv6) | dig +short dominio.pt AAAA |
☐ |
| MX configurado | dig +short dominio.pt MX |
☐ |
| SPF configurado | dig +short dominio.pt TXT |
☐ |
| DMARC configurado | dig +short _dmarc.dominio.pt TXT |
☐ |
| DKIM configurado | dig +short selector._domainkey.dominio.pt TXT |
☐ |
| NS correctos | dig +short dominio.pt NS |
☐ |
| SOA serial consistente | dig @ns1 dominio.pt SOA |
☐ |
| PTR (reverse DNS) | dig -x IP +short |
☐ |
| SRV (AD/SIP) | dig +short _ldap._tcp.dominio.pt SRV |
☐ |
| Propagação global | dig @8.8.8.8 / @1.1.1.1 / @9.9.9.9 |
☐ |
| Flush cache local | ipconfig /flushdns / systemd-resolve --flush |
☐ |