DNS

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

DNS (Domain Name System) é uma base de dados distribuída e hierárquica. Nela se armazenam informações para mapear nomes de máquinas da Internet para endereços IP e vice-versa, informação para roteamento de email, e outros dados utilizados por aplicações da Internet.

A informação armazenada no DNS é identificada por nomes de domínio que são organizados em uma árvore, de acordo com as divisões administrativas ou organizacionais. Cada nodo dessa árvore, chamado de domínio, possui um rótulo. O nome de domínio de um nodo é a concatenação de todos os rótulos no caminho do nodo até a raiz. Isto é representado como uma string de rótulos listados da direita pra esquerda e separados por pontos (ex: ifsc.edu.br, sj.ifsc.edu.br). Um rótulo precisa ser único somente dentro do domínio pai a que pertence.

Por exemplo, um nome de domínio de uma máquina no IFSC pode ser mail.ifsc.edu.br, em que br é o domínio do topo da hierarquia ao qual mail.sj.ifsc.edu.br pertence. Já edu é um subdomíno de br, ifsc um subdomínio de edu, e mail o nome da máquina em questão.

Por razões administrativas, o espaço de nomes é dividido em áreas chamadas de zonas, cada uma iniciando em um nodo e se estendendo para baixo para os nodos folhas ou nodos onde outras zonas iniciam. Os dados de cada zona são guardados em um servidor de nomes, que responde a consultas sobre uma zona usando o protocolo DNS.

Clientes buscam informação no DNS usando uma biblioteca de resolução (resolver library), que envias as consultas para um ou mais servidores de nomes e interpreta as respostas.

Hierarquia-DNS.gif

(obtido do manual do BIND9)


Ver também o livro sobre DNS e BIND da O'Reilly.

Registros DNS

Cada rótulo na hierarquia DNS possui um conjunto de informações associadas a si. Essas informações são guardas em registros de diferentes tipos, dependendo de seu significado e propósito. Cada consulta ao DNS retorna assim as informações do registro pedido associado ao rótulo. Por exemplo, para ver o registro de endereço IP associado a www.ifsc.edu.br pode-se executar esse comando (o resultado teve alguns comentários removidos):

msobral@dell-iron:~$ dig sj.ifsc.edu.br mx

;; QUESTION SECTION:
;sj.ifsc.edu.br.			IN	MX

;; ANSWER SECTION:
sj.ifsc.edu.br.		3600	IN	MX	10 hendrix.sj.ifsc.edu.br.

;; AUTHORITY SECTION:
sj.ifsc.edu.br.		3600	IN	NS	ns.pop-udesc.rct-sc.br.
sj.ifsc.edu.br.		3600	IN	NS	ns.pop-ufsc.rct-sc.br.
sj.ifsc.edu.br.		3600	IN	NS	hendrix.sj.ifsc.edu.br.

;; ADDITIONAL SECTION:
hendrix.sj.ifsc.edu.br.	3600	IN	A	200.135.37.65
ns.pop-ufsc.rct-sc.br.	11513	IN	A	200.135.15.3
ns.pop-udesc.rct-sc.br.	37206	IN	A	200.135.14.1

Cada uma das informações acima mostra um determinado registro e seu conteúdo, como descrito na tabela abaixo:

Nome TTL Classe Registro Conteúdo do registro
hendrix.sj.ifsc.edu.br. 3600 IN A 200.135.37.65
sj.ifsc.edu.br. 3600 IN NS hendrix.sj.ifsc.edu.br.
sj.ifsc.edu.br. 3600 IN MX 10 hendrix.sj.ifsc.edu.br.

Obs: TTL é o tempo de validade (em segundos) da informação retornada do servidor de nomes, e classe é o tipo de endereço (no caso IN equivale a endereços Internet).

Os tipos de registros mais comuns são:

Registro Descrição Exemplo
A Endereço (Address) www.sj.ifsc.edu.br IN A 200.135.37.66
NS Servidor de nomes (Name Server) sj.ifsc.edu.br IN NS hendrix.sj.ifsc.edu.br.
CNAME Apelido (Canonical Name) mail.sj.ifsc.edu.br IN CNAME hendrix.sj.ifsc.edu.br.
MX Roteador de email (Mail Exchanger) sj.ifsc.edu.br IN MX mail.sj.ifsc.edu.br.
SOA dados sobre o domínio (Start of Authority) sj.ifsc.edu.br IN SOA hendrix.sj.ifsc.edu.br. root.sj.ifsc.edu.br. 2009120102 1200 120 604800 3600
PTR Ponteiro para nome (Pointer) 65.37.135.200.in-addr.arpa IN PTR hendrix.sj.ifsc.edu.br.
TXT Texto genérico (Text) sj.ifsc.edu.br IN TXT "v=spf1 a mx ~all"

Uma zona assim é composta de um conjunto de registros com todas as informações dos domínios nela contidos. O conteúdo de uma zona conforme armazenado em servidores DNS que usam o software BIND, contendo o domínio example.com, pode ser visualizado abaixo:

example.com  86400  IN	 SOA ns1.example.com.	hostmaster.example.com. (
			      2002022401 ; serial
			      10800 ; refresh
			      15 ; retry
			      604800 ; expire
			      10800 ; minimum
			     )
       IN  NS     ns1.example.com.
       IN  NS     ns2.smokeyjoe.com.
       IN  MX  10 mail.another.com.
       IN  TXT   "v=spf1 mx -all"

ns1    IN  A      192.168.0.1
www    IN  A      192.168.0.2
ftp    IN  CNAME  www.example.com.

bill   IN  A      192.168.0.3
fred   IN  A      192.168.0.4

Exercícios: entendendo o serviço DNS

Usando a ferramenta dig execute os seguintes comandos.

  1. Resolvendo um nome DNS ... que registros DNS foram obtidos na resposta ? Quais seus significados ?
    dig integrado.sj.ifsc.edu.br
    
  2. Para obter um registro específicos associado a um nome, deve-se indicá-lo ao executar o dig:
    # consulta o registro NS associado a integrado.sj.ifsc.edu.br
    dig ns integrado.sj.ifsc.edu.br
    
  3. Obtendo outros registros: consulte os registros MX, TXT, NS, A associados a ifsc.edu.br. Interprete cada resposta obtida.
  4. A obtenção de uma resposta DNS pode envolver bastante esforço dos programas envolvidos (o cliente, representado pelo dig nestes exercícios, e o servidor DNS, que reside em um computador do campus). Você pode ter uma ideia das etapas necessárias para realizar uma tradução de nome DNS se especificar a opção +trace do dig:
    dig +trace www.polito.it;
    
    O que significam as respostas sucessivas obtidas durante a execução do dig ? Como elas podem ser relacionadas à figura que representa uma hierarquia de domínios DNS (mostrada no início desse artigo) ?
  5. Descubra que servidores DNS são consultados para resolver os seguintes nomes:
    integrado.sj.ifsc.edu.br
    das.ufsc.br
    www.uol.com.br
    ciram.epagri.sc.gov.br
    receita.fazenda.gov.br
    windguru.cz
    www.cister.isep.ipp.pt
    www.surfline.com
    www.youtube.com
    www.cackletv.com
    
  6. As consultas normalmente são realizadas de forma que o servidor DNS traduza um nome, memso que para isso precise consultar outros servidores DNS. Esse modo de operação se chama consulta recursiva, e pode ser desativado (se bem que para os clientes não se vê utilidade nisso ;-). A opção +norecurse do dig desativa o modo recursivo, e a consequência pode ser vista com o seguinte teste:
    dig www.uol.com.br +norecurse
    
    Experimente usar essa opção com outros nomes DNS que você conheça. Como se devem interpretar as respostas ?
  7. Escolha um nome DNS e faça sua tradução em modo não recursivo. Note que serão necessárias várias consultas com o dig para que enfim se consiga traduzir o nome escolhido. Dica: para que o dig use um determinado servidor DNS, especifique-o da seguinte forma:
    # Consulta diretamente o servidor DNS heremes.ifsc.edu.br para traduzir o nome www.ifsc.edu.br
    dig @hermes.ifsc.edu.br www.ifsc.edu.br +norecurse
    
  8. Usando o dig desenhe a hierarquia de domínios e servidores DNS correspondente aos seguintes campi do IFSC: São José (sj.ifsc.edu.br), Chapecó (chapeco.ifsc.edu.br), Jaraguá do Sul (jaragua.ifsc.edu.br) e Joinville (joinville.ifsc.edu.br). O desenho deve iniciar no domínio raiz, de forma semelhante à figura mostrada no início deste artigo.
  9. As respostas a consultas DNS têm prazo de validade (campo TTL) ... qual das respostas obtidas no exercício 5 irá expirar primeiro ? O que deve acontecer quando ela expirar ?
  10. Ainda sobre validade das respostas, use o dig para resolver o seguinte nome (registro A):
    mmsobral.no-ip.org
    
    Qual o prazo de validade máximo da resposta ? O que se pode concluir sobre esse nome DNS ?
  11. Assim como se podem traduzir nomes DNS para endereços IP (registro A), é possível o contrário. A tradução de endereço IP para nome DNS se chama DNS reverso. Usando a opção -x do dig pode-se descobrir qual o nome DNS associado a um determinado endereço IP. Experimente os seguintes endereços IP:
    150.162.12.3
    200.221.2.45
    69.63.190.14
    200.137.35.65