Tutorial DNS - Parte 1 - Introdução
Autor: João Lucas B. Macedo | Publicado: 2016-10-28T21:29:00-07:00

DNS(Domain name System) é um serviço criado para resolver os nomes na 
Internet, "traduzi-los" para endereços IP, e vice versa. Por exemplo o 
endereço "www.Exemplo.com.br" deve corresponder à um determinado 
endereço IP. Isso facilita a vida do usuário, na verdade a Internet 
seria impossível sem este serviço muito simples.



&nbsp;Um pouquinho de história

Nos primórdios da Internet era muito fácil se lembrar dos endereços IP 
de outros servidores já que havia muito poucos hosts na rede. Conforme a
 rede cresceu este trabalho se tornou cada vez mais dispendioso. A 
solução seguinte foi criar um arquivo de texto chamado "hosts" onde era 
colocado todos os nomes conhecidos e os respectivos endereços IP. Este 
arquivo era atualizado periodicamente com um número de versão para 
controle. A cada acesso a aplicação poderia checar o arquivo para saber 
qual o endereço IP correspondente ao host. Naturalmente isto também 
ficou absolutamente insustentável com o crescimento da rede. Então foi 
criado um serviço próprio para o mapeamento dos nomes em um sistema 
distribuído em várias zonas e domínios diferentes, o DNS.


O arquivo hosts 

O arquivo hosts até hoje é usado. Na verdade ele é o primeiro a ser consultado quando digitamos um nome de domínio qualquer para acessar qualquer coisa na rede. No Windows o seu endereço é "C:\Windows\System32\Drivers\etc\hosts" e no Linux, e familiares, "/etc/hosts".
 Você pode abrir o arquivo e dar uma olhada. Ele quase sempre está vazio
 ou apenas com linhas comentadas. É possível adicionar entradas 
manualmente nele, para o bem ou para o mal, como descrito neste artigo aqui.


Os Root Servers

O protocolo DNS funciona mapeando zonas de cima para baixo. Cada servidor pode ser o dono, chamado servidor Autoritativo, de uma ou mais zonas. Em primeiro lugar existem os root servers, que são os servidores raiz do sistema. Ele são responsáveis pela zona primária que é referenciada com um ponto, ou melhor Root Zone.
 São 13 no total e cada um recebe uma letra como nome, de A até M. Eles 
são administrados pela IANA e distribuídos pelo globo. No site oficial
 é possível ver um mapa de onde eles estão localizados. Cada servidor 
pode ter várias cópias. No Brasil, por exemplo, temos vários exemplares 
do J e do L.




Você pode se perguntar o porque de ter "clones" dos root servers pelo
 mundo e não novos servidores até completar o alfabeto. A questão é que a
 cada novo servidor, seu endereço deveria ser divulgado para todos os 
outros no mundo. Sem falar que um único root "B", por exemplo, estando 
apenas em uma localidade poderia receber muito tráfego. Eles são 
"clonados" para manter coerência dos 13 nomes históricos e balancear o 
tráfego global. Seus endereços são configurados em anycast, de forma que se você precisa do root "C", chegará sempre ao mais próximo.

O trabalho dos root servers, sendo donos da zona raiz, é delegar autoridade à outros servidores das zonas do topo, chamadas Top Level Domains(TLDs).
 Dentro das TLDs podemos ter várias categorias como os códigos de 
países. Brasil com o ".br", Japão com ".jp" e assim por diante, além de 
outros domínios genéricos como ".com", ".gov" e ".net", etc. Repare que 
todo o funcionamento da Internet depende desses domínios e do trabalho 
dos root servers. Todo servidor DNS deve saber de cor os endereços dos 
root servers para iniciarem as pesquisas.
Uma questão bem atual na governança da Internet é justamente a 
liberação de novos TLDs. Países mais conservadores tentem à proibir 
domínios ".xxx" por exemplo, e outras discussões como alocação de TLDs 
para grandes empresas como Google e Audi. Veja na lista
 que várias empresas já reservaram domínios com seus nomes ou mesmo de 
seus produtos. A zona ".br" é de responsabilidade do Comitê gestor da 
Internet no Brasil e administrada pelo Nic.Br. Isto significa, 
basicamente, que todo domínio ".br" deve ser registrado lá.
Para ficar mais claro você pode fazer uma consulta DNS rápida para entender. Use o comando "nslookup -type=NS br.".
 Traduzindo você está perguntando para o seu servidor DNS quem é o 
NS(name server) da zona "br."(com ponto no final). Ele vai te responder 
com os nomes dos servidores responsáveis do Brasil.



Repare que na imagem acima, nas primeiras linhas, que quem me responde é o servidor do Google, e com o aviso "Não é resposta de autorização".
 Na tradução tosca do Windows, isto significa que este servidor do 
Google está te respondendo mas ele não é o dono da zona. Você pode 
perguntar diretamente para os donos e receber uma resposta autoritativa,
 basta adicionar o endereço de um dos servidores logo no final do 
comando:


Repare que quem responde é o próprio servidor dono da zona, e não há mensagem de "Não é resposta de autorização".


Servidores Autoritativos

Um servidor DNS pode ser o autoritativo de uma determinada zona. 
Isto significa que o servidor responsável pela zona superior lhe delegou
 esta autoridade. Por exemplo a empresa ABC para registrar o domínio 
"ABC.com.br" precisa requerer o registro da zona com a autoridade do 
domínio superior e indicar quais serão os servidores autoritativos da 
zona "ABC.com.br". Uma vez configurado o administrador pode criar os 
hosts dentro desta zona no arquivo do servidor autoritativo, como "www",
 "blog", "mail" ou "loja". Cada registro desse vai corresponder ao 
endereço IP do servidor que hospeda o serviço.
Por exemplo:
mail.abc.com.br&nbsp; 192.0.2.25&nbsp;&nbsp;&nbsp;&nbsp; #Servidor de email
www.abc.com.br &nbsp; 198.51.100.42&nbsp; #Servidor web
blog.abc.com.br&nbsp; 203.0.113.89 &nbsp; #Servidor do blog


&nbsp;
Servidores Recursivos

Os servidores chamados recursivos não respondem apenas por suas próprias
 zonas(se houver), mas fazem a pesquisa recursivamente em toda árvore de
 domínios até chegar na resposta e entregar ao usuário, sobre qualquer 
nome. Tudo que ele precisa saber são os endereços dos root servers, o 
resto flui naturalmente. É o caso dos servidores públicos do Google ou 
OpenDNS, que qualquer pessoa pode usar. A ideia é distribuir o volume 
das consultas nos servidores autoritativos já que em uma rede, ou 
região, vários usuários vão fazer as mesmas perguntas várias vezes. Um 
servidor recursivo armazena em cache cada resposta que obtém para 
entregar mais rápido quando solicitado novamente sobre os mesmos nomes e
 não ter de fazer o processo todo de novo. Geralmente usamos os DNS 
recursivos do nosso provedor de acesso ou mesmo através do nosso 
roteador doméstico, que pode fazer o mesmo papel.

Servidores autoritativos podem fazer o trabalho recursivo também e vice 
versa. Mas geralmente os servidores autoritativos na Internet são somente autoritativos. Isto é, respondem apenas o sobre os hosts e subdomínios dentro de sua zona.



Para fazer um teste rápido, pergunte ao servidor DNS de "globo.com" 
sobre o endereço IP de "www.facebook.com", e receberá uma resposta 
negativa de "Query refused". Mas se você perguntar sobre o "g1.globo.com", que é um host dentro de sua zona, responderá normalmente com máxima autoridade:
&nbsp;&nbsp; nslookup www.facebook.com ns01.globo.com&nbsp;
#Pergunta para ns01.globo.com quem é www.facebook.com


&nbsp;&nbsp; nslookup g1.globo.com ns01.globo.com
#Pergunta para ns01.globo.com quem é g1.globo.com

Um servidor atuando como recursivo também pode ser o autoritativo de uma
 ou mais zonas sem problema algum. Por fim, veja a animação abaixo de 
uma pesquisa solicitada por um cliente sobre o nome "www.exemplo.com.br"
 ao seu servidor recursivo:








&nbsp;&nbsp;

Quando um cliente recebe uma resposta sobre determinado nome ele também armazena em um cache
 temporariamente, para que não volte a perguntar ninguém sobre os mesmos
 nomes por um tempo. Você pode checar o cache DNS do seu computador com o
 comando:

&nbsp;ipconfig /DisplayDNS



Ou mesmo limpá-lo:

ipconfig /FlushDNS



A resolução de nomes em geral funciona assim: