Compartilhar via


Entendendo o serviço DNS (pt-BR)

Introdução

Embora as redes de computadores TCP/IP dependam basicamente do endereço IP e do endereço MAC, esses dados seriam muito difíceis para um ser humano gerenciar ou memorizar. Por exemplo, você precisa fazer uma pesquisa para um trabalho de escola, então você abre o browser e acessa um site de busca qualquer: http://200.45.80.74. Após algumas pesquisas, você acha três sites que aborda exatamente o assunto que você procura para fazer seu trabalho: http://67.40.80.100, http://200.90.0.10 e http://201.61.50.55. Para ajudar, o trabalho é em grupo, ou seja, você tem que enviar esses sites para seus colegas opinarem, há três colegas em seu grupo: joao.carlos@114.20.10.20, msilva@40.50.60.10 e marcelo.af@20.0.6.21. Isso seria muito complexo, afinal, ficar decorando números é totalmente inviável. Uma forma de solucionar esse problema é utilizar um sistema de resolução de nomes. A resolução de nomes permite que determinado endereço IP seja vinculado a um nome de fácil entendimento e administração, assim, quando precisar acessar algum site, enviar e-mail ou qualquer outra atividade em uma rede privada ou na internet basta inserir os nomes que o sistema responsável pela resolução de nomes se encarregará de resolver para o seu respectivo endereço IP.

Em 1980, quando a ARPANET começou a crescer rapidamente foi necessário criar uma sistema de resolução de nomes mais aprimorado já que anteriormente era utilizado um arquivo de texto simples que fazia o mapeamento de nomes para endereços de rede (Tanembaum A., 2003, p. 59). Esse sistema mais aprimorado chama-se DNS (Domain Name System) e ajudou muito na evolução da rede, tanto que hoje em dia é o principal modo de resolução de nomes utilizado nas redes domésticas, corporativas e principalmente na rede mundial, a internet.

O DNS (do inglês, Domain Name System) é definido principalmente nas RFCs 1034 (Conteitos e Recursos) e 1035 (Implementação e Especificação) e é a principal forma de revolver nomes hoje em dia, seja na Internet ou na rede interna de uma empresa. O DNS é um sistema de resolução de nomes hierárquico, pois divide o nome DNS em fragmentos conhecidos como espaços de nomes. Os espaços de nomes ajudam no desempenho e na organização da estrutura de nomes DNS conhecida também como árvore de nomes DNS. De forma análoga, imagine o espaço de nomes como o endereço de sua residência, por exemplo:

País: Brasil
Estado: São Paulo
Cidade: Osasco
Bairro: Jardim José
Rua: Mariana
Número: 500

Se uma pessoa que morasse nos Estados Unidos quisesse chegar ao endereço informado acima, bastaria ela seguir de forma hierárquica o endereço, começando do país até chegar ao número da residência. Se o sistema de endereçamento não fosse hierárquico seria muito difícil chegar a qualquer lugar. O DNS funciona de forma semelhante, mas ao invés de termos endereços físicos, temos os espaços de nomes DNS. O exemplo a seguir mostra a estrutura hierárquica do websiteinfrasemmisterios.wordpress.com:

Domínio Superior: .com
Subdomínio: .wordpress.com.br
Host do Web Site: infrasemmisterios.wordpress.com

Quando um nome precisa ser resolvido para um endereço IP é seguida uma ordem hierárquica no espaço de nomes até chegar ao nome do host, isso também é conhecido como sistema distribuído de nomes.

Para obter um novo domínio, em geral, é necessário consultar no domínio superior se o nome esta disponível. Por exemplo, quando o domínio fiap.com.br foi criado uma consulta foi feita no domínio com.br para verificar se o nome fiap já não estava sendo utilizado.

Principais componentes do DNS

Conforme definido pela RFC 1034, o DNS possui três componentes principais:

- Espaço de nomes e Registros de Recursos:

O espaço de nomes são as partes de um domínio inteiro, em outras palavras, eles são como os galhos da árvore de nomes DNS enquanto os registros de recurso são as folhas desses galhos. Os Registros de Recursos (também conhecidos como Resource Records ou RRs) são um conjunto de dados que retornam determinadas informações de acordo com o tipo de consulta. O conjunto de registros de recursos de um domínio que fica alocado um servidor DNS é conhecido como Zona DNS. As zonas DNS podem ser do tipo Primária, Secundária ou Stub. Uma zona primária (ou master) possui a base completa dos registros de recursos e aceita alterações. A zona secundária (ou slave) é uma cópia da zona primária e não permite alterações. A zona stub é uma zona de referência, assim, ela possui apenas os registros NS e A (explicados mais a frente) dos Servidores de Nomes do respectivo domínio (a zona stub também não permite alterações). Geralmente, as zonas DNS são armazenadas em um arquivo de texto simples, com execeção dos servidores DNS Windows que permitem, opcionalmente, armazenar os dados das zonas dentro da base do Active Directory (caso o serviço de DNS esteja instalado em um Controlador de Domínio). Os registros possuem as seguintes propriedades:

  • Proprietário: Indica quem é o criador do registro.
  • TTL: Informa por quanto tempo o registro será armazenado em Cache.
  • Classe: Indica a classe de registro.
  • Tipo: Indica o tipo de registro.
  • Dados: Contém os dados do registro.

Já os principais registros de recursos são:

- SOA: Define propriedades, como: intervalo de atualização, TTL e expiração.

  • NS: Indica o servidor de nome de determinado domínio.
  • A e AAAA: Resolve nomes para endereços IP.
  • CNAME: Resolve um apelido (ou alias) para um registro do tipo A ou AAAA.
  • MX: Fornece informações de e-mail para o roteamento de mensagens.
  • PTR: resolve um endereço IP para um registro de tipo A ou AAAA.
  • SRV: Define a localização e prioridade de um serviço na rede.

- Servidores de Nomes:

Também conhecido como servidor DNS, é o serviço que armazena e gerencia as informações sobre a estrutura de nomes de um ou mais domínios. Um servidor DNS pode armazenar essas informações na memória (também conhecido como Cache) ou então ter as informações completas (através das zonas DNS). Além disso, um servidor de nomes pode não responder a consulta, mas pode saber informar quem pode responder.

- Resolvedores:

Conhecido também como Resolver ou Cliente DNS é o serviço que identifica que determinado aplicativo necessita resolver um nome e encaminha essa solicitação a um servidor DNS. Quando o servidor DNS responde a consulta, o Resolver armazena a resposta no Cache do cliente e encaminha a resposta para o aplicativo que solicitou a resolução do nome.

Processo de Resolução e Tipos de Respostas

O processo de resolução de nomes DNS é algo longo e complexo, pois inclui diversas variáveis que podem mudar de acordo com o cenário e a situação em que uma consulta ocorre. A seguir será descrito de modo geral como ocorre essa consulta:

01 – O Resolver identifica que um aplicativo necessita resolver um nome.
02 – O Resolver envia a consulta para o servidor DNS que foi configurado.
03 – O servidor DNS pode responder de quatro formas:
a) Autoritativa: Quando o domínio a ser consultado pertence a uma das zonas do servidor DNS.
b) Positiva: Quando o servidor responde a consulta, mas não de forma   autoritativa. Geralmente uma reposta positiva é feita utilizando o Cache local, iteração ou recursividade. Ambas as maneiras serão detalhadas na próxima seção.
c) Negativa: Uma resposta negativa pode indicar duas possibilidades:

  • O domínio informado em uma consulta não existe.
  • O servidor autoritativo não localizou o registro solicitado na consulta.
    d) Referência: Uma resposta de referência ocorre quando o servidor de nome   não pode responder a consulta, mas pode indicar quem pode responder   baseado em informações que ele possui localmente.
    04 – Quando o servidor DNS consegue a resposta para a consulta do cliente ele armazena essa resposta em seu Cache e devolve para o Resolver.
    05 – O Resolver armazena a resposta no Cache do cliente e envia a resposta para a aplicação que solicitou a resolução do nome.

Formas de Resolução de Nomes

Quando um servidor DNS não consegue resolver um nome com base nas suas zonas DNS ele pode tentar resolver utilizando o Cache, recursão ou iteração.

- Cache:

Cache DNS é utilizado para aprimorar as consultas que já foram efetuadas anteriormente dispensando o processo de recursão e iteração. Há uma pequena diferença entre o Cache do Resolver e do Cache do servidor DNS. Ambos são armazenados na Memória RAM da máquina, porém, o Cache do resolver armazena os registros que o DNS respondeu e o escopo de sua utilização limita-se a ele mesmo. Já oCache do DNS armazena as consultas que ele obteve no processo de recursão ou iteração e é utilizado para todos os clientes DNS que repetirem essa consulta. O tempo que cada registro ficará armazenado no Cache é definido pelo campo TTL (Time-To-Live) configurado no próprio registro.

- Recursão:

Uma consulta recursiva é quando o servidor DNS tenta resolver a consulta totalmente em nome do cliente solicitante. O servidor DNS pode tentar resolver essa consulta utilizando o recurso de encaminhamento. Um encaminhamento pode ser do tipo geral, onde qualquer consulta que não puder ser resolvida será encaminhada a determinado servidor ou do tipo condicional, que encaminha determinados domínios para os servidores DNS que desejar (geralmente servidores DNS autoritativos para o domínio em questão).

- Iteração:

Uma consulta iterativa é quando o cliente espera a melhor resposta que puder receber do servidor DNS com base nas informações que ele possui localmente, e com essas informações, o próprio cliente refaz a consulta para os servidores DNS adicionais. Uma consulta iterativa ocorre quando:

  • O cliente solicita a recursão, mas não esta habilitado no servidor DNS.
  • O cliente não solicita o uso de recursão ao consultar o servidor DNS.

O que geralmente ocorre é o cliente solicitar uma consulta recursiva para o seu servidor DNS primário e esse iniciar uma consulta iterativa com os servidores raiz da internet até que encontre uma resposta e devolva ao cliente solicitante.

Arquitetura DNS

A seguir é exibido o pacote DNS em IPv4:

http://infrasemmisterios.files.wordpress.com/2012/05/dns3.jpg

Os principais campos pertinentes ao serviço DNS são:

- Protocol: Define o protocolo que será utilizado, por exemplo: TCP ou UDP.
- Source / Destination IP address: Informa o endereço IP do cliente e servidor DNS.
- Source / Destination port numbers: Informa as portas de origem e destino que o DNS irá utilizar.
- Query ID: Identificador único para a consulta que esta sendo feita. Permite o servidor vincular uma resposta à determinada consulta. Também é conhecido como Transaction ID (TXID).
- QR (Query / Response): Informa se é uma consulta feita pelo cliente (valor 0) ou uma resposta do servidor (valor 1).
- Opcode: Informa o tipo de consulta, geralmente é uma consulta padrão (valor 0).
- AA (Authoritative Answer): Informa se a resposta é autoritativa (valor 1) ou não (valor 0).
- TC (Truncated): Utilizado pelo servidor para informar ao cliente se o pacote truncou devido ter ultrapassado o limite de 512 bytes do protocolo UDP. Nesse caso, o cliente refaz a consulta utilizando o protocolo TCP.
- RD (Recursion Desired): O cliente utiliza para solicitar se o servidor irá fazer uma consulta recursiva (valor 1) ou iterativa (valor 0).
- RA (Recursion Available): Utilizado pelo servidor para informar se a recursão esta disponível (valor 1) ou não (valor 0).
- Z: Conhecido como *DO, *é utilizado para informar se o cliente suporta DNSSEC.
*- *rcode: Código de resposta do servidor e informa sucesso ou falha na resposta.
- Question record count: Contador da consulta. Como na maioria das vezes é feita uma consulta para diversas respostas seu valor geralmente é 1.
- Answer / Authority / Additional Record Count: Definido pelo servidor, fornece a contagem das respostas para a consulta do cliente.
- DNS Question / Answer Data: Contém as informações das consultas e respostas.

Por padrão, o DNS utiliza o protocolo de transporte UDP na porta 53 para efetuar as consultas. O motivo disso é aumentar o desempenho da consulta já que o UDP não é orientado a conexão e com isso não precisa estabelecer, gerenciar e fechar as conexões (sem contar outras funcionalidades do TCP como controle de fluxo e garantia de entrega).

Existe uma exceção para essa regra (definido na RFC 5966), quando o tamanho de um pacote UDP excede o limite de 512 bytes o servidor DNS devolve a consulta para o cliente com o flag TC ativada, indicando que a resposta esta truncada. O cliente então refaz a consulta utilizando TCP.

Há também uma atualização do mecanismo de resolução do DNS chamada EDNS0 (RFC 2671) que permite negociar o tamanho de consulta UDP sem ter que usar o protocolo TCP. O problema dessa funcionalidade é a maioria dos firewalls bloqueia pacotes UDP superiores a 512 bytes, o que significaria ter que alterar essas configurações no firewall de seu ambiente.

Além de tráfego de consultas DNS, existe também o tráfego de transferência de zonas. A Transferência de Zona é o processo de replicação entre as zonas DNS para garantir a disponibilidade da resolução de nomes, por exemplo, podemos ter uma zona primária para o domínio fiap.com.br na unidade da Vila Mariana e uma zona secundária na unidade de Alphaville. A cada intervalo configurado previamente pelo Administrador de Rede, a zona secundária contata a zona primária para solicitar a transferência dos registros. Uma transferência pode ser do tipo AXFR (transferência completa) ou IXFR (transferência incremental). A transferência incremental é a melhor opção, pois economiza tempo e largura de banda.

Ao contrário das consultas DNS, as transferências de zonas utilizam o protocolo de transporte TCP, pois é necessário saber se todos os dados foram replicados com sucesso para evitar que haja diferenças entre as zonas ou alguma informação corrompida.

Fonte:

IETF
GNULinuxBR – Domain Name System
Technet: How DNS Works