DNS
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.
(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.
- Resolvendo um nome DNS ... que registros DNS foram obtidos na resposta ? Quais seus significados ?
dig integrado.sj.ifsc.edu.br
- 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
- Obtendo outros registros: consulte os registros MX, TXT, NS, A associados a ifsc.edu.br. Interprete cada resposta obtida.
- 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: 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) ?
dig +trace www.polito.it;
- 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
- 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: Experimente usar essa opção com outros nomes DNS que você conheça. Como se devem interpretar as respostas ?
dig www.uol.com.br +norecurse
- 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
- 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.
- 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 ?
- Ainda sobre validade das respostas, use o dig para resolver o seguinte nome (registro A): Qual o prazo de validade máximo da resposta ? O que se pode concluir sobre esse nome DNS ?
mmsobral.no-ip.org
- 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