Módulo 1 · 1.4
A viagem de um pedido DNS
Módulo 1: O que é o DNS? · Tempo de leitura: 8 minutos
Objetivo de aprendizagem: Após esta lição, saberá explicar passo a passo como um resolver encontra uma resposta, e onde pelo caminho as respostas são memorizadas.
Conceitos-chave: resolver (recursivo), servidor raiz, servidor de TLD, servidor de nomes autoritativo, referência (delegação), cache
Dois tipos de servidores DNS
Na lição 1.1 viu que o DNS está repartido: ninguém sabe tudo. Como é então que o seu navegador consegue obter o endereço de www.example.com? Para isso, trabalham em conjunto dois tipos de servidores:
- Servidores de nomes autoritativos (em inglês authoritative) conhecem a resposta para a sua própria parte. Os servidores de nomes de
example.comconhecem os registos deexample.com. Não procuram nada para terceiros. - Resolvers (também chamados resolvers recursivos) procuram a resposta por si. Perguntam sucessivamente até a obterem. O seu fornecedor de internet tem um resolver, e existem resolvers públicos como os da Quad9, Cloudflare ou Google.
O seu computador, por si só, quase não procura nada. Tem um pequeno stub resolver que passa o pedido ao resolver da sua rede e recebe a resposta de volta.
A viagem, passo a passo
Suponha que o resolver ainda não memorizou nada e você pede o registo A de www.example.com.
- O seu computador pergunta ao resolver: "Qual é o registo A de www.example.com?"
- O resolver pergunta a um servidor raiz. Cada resolver tem uma lista incorporada com os endereços dos servidores raiz. O servidor raiz não sabe nada sobre
example.com, mas sabe quem gere.com. Responde com uma referência: "Para isso tem de ir aos servidores de nomes de com: a.gtld-servers.net, b.gtld-servers.net, e assim por diante." - O resolver pergunta a um servidor de nomes de .com. Esse também não sabe o endereço IP de
www.example.com, mas sabe quais os servidores de nomes deexample.com. Novamente uma referência: "Pergunte a ns1.hosting.example ou ns2.hosting.example." - O resolver pergunta a um servidor de nomes de example.com. Esse é autoritativo para este domínio e dá a resposta: "www.example.com tem o registo A 192.0.2.10."
- O resolver dá a resposta ao seu computador. O seu navegador liga-se a 192.0.2.10.
Uma referência de um nível superior para os servidores de nomes de um nível inferior chama-se uma delegação. A raiz delega .com à Verisign, .com delega example.com aos servidores de nomes que o titular do domínio indicou. Para um domínio .nl o processo é exatamente o mesmo, só que a raiz remete então para os servidores de nomes de .nl (SIDN, a entidade gestora do registo de domínios .nl na Holanda, por exemplo ns1.dns.nl). Isso vai verificar por si mesmo no exercício no final desta lição. Por isso é tão importante que os servidores de nomes estejam corretos junto da registry (lição 2.1).
A cache: nem sempre a viagem completa
Se cada resolver tivesse de começar sempre do zero junto da raiz a cada pedido, a raiz receberia uma quantidade inimaginável de pedidos. Isso não acontece, porque o resolver memoriza as respostas durante algum tempo. Essa memória chama-se cache.
Quanto tempo uma resposta pode ser memorizada consta da própria resposta: o TTL (time to live), em segundos. Um TTL de 3600 significa: esta resposta pode ser memorizada durante uma hora. Também as referências são memorizadas. Um resolver que acabou de saber quais são os servidores de nomes de .com não precisa de o perguntar de novo à raiz da próxima vez.
Se outra pessoa no mesmo fornecedor perguntar um minuto depois por www.example.com, o resolver responde de imediato a partir da sua cache. Sem viagem, sem tempo de espera.
Existem caches em vários locais:
- no resolver do seu fornecedor ou no resolver público que utiliza;
- no seu sistema operativo (Windows, macOS, o seu telemóvel);
- no seu navegador;
- por vezes no seu router.
Isto é rápido e eficiente, mas tem uma consequência que irá encontrar frequentemente mais adiante: se alterar um registo, as caches continuam a dar a resposta antiga até o seu TTL terminar. Por isso é que uma pessoa já vê uma alteração e outra ainda não. O módulo 6 trata disto em detalhe.
Os servidores raiz
Existem 13 nomes para os servidores raiz: de a.root-servers.net a m.root-servers.net. São geridos por doze organizações diferentes. Por trás de cada nome há, em todo o mundo, muitos servidores, em centenas de locais, que partilham o mesmo endereço (a isso chama-se anycast). O seu resolver chega automaticamente a um que esteja próximo. Também os servidores de nomes de TLD, como os de .com e .nl, funcionam assim. Por isso o DNS é rápido e continua a funcionar mesmo que algures um servidor falhe.
Onde pode correr mal
Conhecendo a viagem, consegue situar melhor os problemas:
- A delegação está incorreta. Na registry constam servidores de nomes que já não conhecem (ou nunca conheceram) o domínio. O resolver não consegue avançar no passo 4. A resposta é um erro ou não há resposta de todo.
- O servidor autoritativo dá uma resposta diferente da esperada. Nesse caso alterou o registo noutro local diferente daquele onde os servidores de nomes realmente estão (lição 2.1).
- A cache ainda tem a resposta antiga. Nesse caso nada está estragado. Tem de esperar até o TTL terminar, ou limpar a sua própria cache.
- O DNSSEC não está correto. Um resolver validador verifica assinaturas pelo caminho. Se a cadeia não estiver correta, recusa a resposta (lição 8.1).
Com a ferramenta dig +trace pode reproduzir a viagem você mesmo, desde a raiz até ao servidor autoritativo. Isso vai aprender na lição 8.2. Ferramentas online também o permitem fazer.
Resumo
- Os servidores de nomes autoritativos conhecem a resposta para o seu próprio domínio; os resolvers procuram a resposta por si.
- Um resolver começa na raiz, recebe uma referência para a TLD, depois para os servidores de nomes do domínio, e aí obtém a resposta.
- Essa referência chama-se uma delegação.
- As respostas são memorizadas em caches, durante o tempo que o TTL indicar; por isso as alterações não são visíveis em todo o lado de imediato.
- Existem 13 nomes de servidores raiz, mas graças ao anycast há muitos servidores em todo o mundo por trás deles.
Quiz
Exercício
Exercício Z1.4: Seguir a viagem. Siga a viagem para www.sidn.nl, com dig +trace www.sidn.nl ou uma ferramenta online que mostre um trace. Indique: (1) um servidor de nomes de nl. que encontrou pelo caminho, (2) um servidor de nomes autoritativo de sidn.nl.
Leitura complementar
Estes artigos descrevem a situação na WebOké. Noutros fornecedores o funcionamento é semelhante.
