Domain IP Lookup

Os registros que você encontrará em quase toda zona

AHostname para um endereço IPv4
AAAAHostname para um endereço IPv6
CNAMEHostname para outro hostname
MXDomínio para seus servidores de e-mail, por prioridade
TXTDomínio para texto livre: SPF, DKIM, verificação
NSDomínio para os servidores de nomes que respondem por ele
Fundamentos de DNS

Por dentro de uma mensagem DNS: flags, seções e formato wire

5 min de leitura

Toda consulta DNS, de um navegador pedindo um endereço a um resolvedor seguindo uma delegação, é uma curta mensagem binária em um único formato comum. Raramente você vê os bytes, mas ferramentas como o dig exibem os campos do cabeçalho como texto, e saber o que eles significam transforma essa saída de ruído em evidência. O formato é especificado pela RFC 1035 desde 1987, refinando a RFC 883 de 1983, e desde então foi estendido, não substituído.

O cabeçalho de 12 bytes

Toda mensagem começa com os mesmos 12 bytes: um ID de 16 bits, uma palavra de 16 bits com flags e códigos, e quatro contagens de 16 bits.

CampoTamanhoSignificado
ID16 bitsEscolhido pelo cliente e copiado na resposta, para que o cliente possa associar as respostas às perguntas
QR1 bit0 para uma consulta, 1 para uma resposta
Opcode4 bitsO tipo de requisição; 0 é uma consulta padrão
AA1 bitResposta autoritativa: o servidor que responde é uma autoridade para o nome da pergunta
TC1 bitTruncada: a mensagem era maior do que o transporte permite
RD1 bitRecursão desejada: o cliente pede ao servidor que faça toda a consulta
RA1 bitRecursão disponível: o servidor oferece esse serviço
Z3 bitsReservado na RFC 1035; o DNSSEC depois tomou dois desses bits para AD e CD (RFC 2535, reafirmado na RFC 4035)
RCODE4 bitsCódigo de resposta: o resultado da consulta
QDCOUNT, ANCOUNT, NSCOUNT, ARCOUNT16 bits cadaQuantas entradas as seções de pergunta, resposta, autoridade e adicional contêm

Depois do cabeçalho vêm as quatro seções, nessa ordem. A seção de pergunta repete o que foi perguntado, a seção de resposta contém os registros que a respondem, a seção de autoridade aponta para os servidores de nomes responsáveis pela zona, e a seção adicional traz registros extras que o servidor espera que o cliente queira em seguida, como os endereços desses servidores de nomes.

Trate o AA com cuidado. Um resolvedor recursivo que responde a partir do seu cache não é uma autoridade para esses dados e não o ativa. No projeto original, um servidor marca uma resposta como autoritativa quando responde a partir de dados de zona que ele mantém, em oposição a dados em cache (Mockapetris e Dunlap, 1988). Ver aa em uma resposta de um dos servidores de nomes da própria zona é o caso normal, exceto no caso de uma referência a uma zona filha, que não o traz nem mesmo de um servidor autoritativo.

Lendo a linha de cabeçalho do dig

O dig imprime o cabeçalho em duas linhas. Uma resposta típica é assim:

O cabeçalho como o dig o imprime
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6891
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

opcode e status são os campos Opcode e RCODE. A linha flags lista os bits que estão ativados, aqui qr, rd e ra, que juntos significam: uma resposta, a uma consulta que pediu recursão, vinda de um servidor que a oferece. As quatro contagens são os tamanhos das seções. O ADDITIONAL: 1 costuma ser o pseudorregistro EDNS do servidor, devolvido porque o dig inclui um na sua consulta; não é um endereço extra.

O status é a coisa mais rápida de ler. A RFC 1035 define seis códigos de resposta.

CódigoNomeSignificado
0NOERRORA consulta foi processada sem erro
1FORMERRO servidor não conseguiu interpretar a consulta
2SERVFAILO servidor falhou ao processar a consulta
3NXDOMAINO nome não existe; a RFC 1035 chama isso de Name Error (erro de nome) e o define para servidores autoritativos
4NOTIMPO servidor não oferece suporte a esse tipo de consulta
5REFUSEDO servidor se recusa a responder por motivos de política

Um resultado comum não tem código próprio. Um nome que existe, mas não tem registro do tipo que você pediu, retorna NOERROR sem registros desse tipo na seção de resposta (um CNAME ainda pode aparecer), o que a RFC 2308 chama de NODATA. A diferença importa no diagnóstico; veja NXDOMAIN explicado e Timeout de DNS vs. SERVFAIL para saber o que fazer em cada caso.

Uma consulta, byte a byte

Esta é uma consulta completa pelo registro A de example.com em sua forma clássica, sem EDNS, como um cliente a enviaria com recursão solicitada. Ela tem 29 bytes.

Uma consulta DNS para example.com, tipo A, em hexadecimal
1a 2b 01 00 00 01 00 00 00 00 00 00 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 01 00 01
BytesSignificado
1a 2bID: um valor arbitrário escolhido pelo cliente
01 00Flags: apenas RD está ativada
00 01QDCOUNT: uma pergunta
00 00 00 00 00 00ANCOUNT, NSCOUNT e ARCOUNT: todos zero em uma consulta
07 65 78 61 6d 70 6c 65Um rótulo de comprimento 7, seguido das letras ASCII de “example”
03 63 6f 6dUm rótulo de comprimento 3, seguido de “com”
00O rótulo raiz de comprimento zero, que encerra o nome
00 01QTYPE 1: o registro A
00 01QCLASS 1: a classe Internet

Os mesmos bytes viajam dentro de transportes criptografados. No DNS sobre HTTPS (RFC 8484), por exemplo, a mesma mensagem viaja como o corpo bruto de um POST HTTP ou, em uma requisição GET, codificada em base64url em um parâmetro dns, e recomenda-se que os clientes definam o ID como 0; veja DNS sobre HTTPS e DNS sobre TLS explicados.

Nomes, limites e compressão

Um nome é uma sequência de rótulos, cada um precedido pelo seu comprimento, terminando em um byte zero. A RFC 1035 limita um rótulo a 63 octetos e um nome inteiro a 255. Como o byte de comprimento de um rótulo nunca passa de 63, seus dois bits mais significativos são sempre zero, e isso deixou espaço para a compressão: quando os dois bits mais significativos são ambos um, esse byte e o seguinte formam um ponteiro, e os 14 bits restantes dão um deslocamento a partir do início da mensagem. Em uma resposta, o nome da resposta é muito comumente representado pelos dois bytes c0 0c, um ponteiro para o deslocamento 12, onde o nome da pergunta começa logo depois do cabeçalho. Todo programa DNS deve entender ponteiros nas mensagens que recebe, embora possa optar por não os produzir.

Por que 512 bytes importavam e o que os substituiu

A RFC 1035 restringe as mensagens UDP a 512 bytes, sem contar os cabeçalhos IP e UDP. Uma mensagem mais longa é truncada e o bit TC é ativado, o que informa ao cliente que deve tentar de novo por TCP. Os projetistas originais consideraram o limite do datagrama um sucesso, e não um problema: o desempenho era muito melhor do que sobre circuitos TCP e os recursos do sistema operacional não ficavam presos, embora a escolha exigisse estratégias cuidadosas de retransmissão (Mockapetris e Dunlap, 1988).

À medida que as respostas cresceram com o IPv6 e o DNSSEC, o limite ficou apertado. O EDNS(0), definido na RFC 6891, permite que um cliente anuncie um tamanho de payload UDP maior em um pseudorregistro OPT. A RFC sugere 4096 octetos como ponto de partida e, se isso falhar, um recuo para uma faixa de cerca de 1280 a 1410 bytes. Desde a RFC 7766, em 2016, o suporte a TCP é uma parte obrigatória de uma implementação completa de DNS. Respostas UDP maiores também têm um custo de segurança, porque tornam os ataques de reflexão mais lucrativos; Ataques de amplificação de DNS e resolvedores abertos trata disso.

Ponto-chave

Leia o cabeçalho primeiro: QR diz se é consulta ou resposta, RCODE diz o que aconteceu, AA diz se a resposta veio de uma autoridade e TC diz para tentar de novo por TCP.

Fontes e leitura complementar

Precisa conferir os endereços DNS públicos de um domínio? Use a ferramenta Domain IP Lookup.

Perguntas frequentes

Leitura relacionada

Uma consulta DNS recursiva, um salto de cada vez

Navegador

quer example.com

Resolvedor

seu provedor / 1.1.1.1

Raiz + TLD

quem opera o .com?

Autoritativo

a resposta real

Cada salto desta cadeia é em si uma consulta DNS, depois armazenada em cache

Fundamentos de DNS

Como o DNS funciona: de um nome de domínio a um endereço IP

A lista telefônica da internet, acompanhada de ponta a ponta: o que acontece nos poucos milissegundos entre digitar um domínio e o primeiro pacote chegar a um servidor.

3 min de leitura

Quatro resultados, quatro próximos passos diferentes

NXDOMAINO nome não existe: nunca vale tentar de novo
TIMEOUTNenhuma resposta chegou a tempo: em geral é transitório
SERVFAILO servidor não conseguiu processar: às vezes é transitório
REFUSEDRecusado por política: raramente é falha, raramente é transitório
Solução de problemas

Timeout de DNS vs. SERVFAIL: qual é a diferença?

Os dois parecem uma consulta que falhou, mas um timeout e um SERVFAIL apontam para problemas diferentes e pedem próximos passos diferentes.

3 min de leitura

Os registros que você encontrará em quase toda zona

AHostname para um endereço IPv4
AAAAHostname para um endereço IPv6
CNAMEHostname para outro hostname
MXDomínio para seus servidores de e-mail, por prioridade
TXTDomínio para texto livre: SPF, DKIM, verificação
NSDomínio para os servidores de nomes que respondem por ele
Fundamentos de DNS

Tipos de registro DNS explicados: referência completa

Todos os tipos de registro que vale conhecer, o que cada um faz, qual é a sua aparência e o erro que as pessoas cometem com ele, em uma única página de referência.

4 min de leitura