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 omí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.
(tirado 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:
dig -x 200.135.37.65; dig www.das.ufsc.br; dig +trace www.polito.it; dig @200.135.37.65 www.polito.it.