"Domain Names Service" (DNS)

André Moreira (andre@dei.isep.ipp.pt)
Professor Adjunto do Departamento de Engenharia Informática do ISEP

O serviço de nomes de domínio permite uma associação global de nomes a recursos. O serviço é implementado de forma distribuída em servidores de nomes que permitem uma gestão hierarquica segundo sequências de domínios.

Os domínios constituem de uma estrutura em árvore universal, cada domínio possui um nome, concatenando ao nome de um recurso os nomes dos domínios que é necessário percorrer desde esse ramo da árvore até à raiz obtem-se uma designação universal para o recurso.

Os nomes de recursos e dominíos não devem exceder 63 caracteres e o nome de domínio vazio (zero caracteres) está reservado para a raiz da árvore. Como é do conhecimento geral, a concatenação de nomes de recursos e nomes de domínios efectua-se por adição de um ponto.

	Exemplo:	www.dei.isep.ipp.pt.

As bases de dados contendo os registos de recursos ("RESOURCE RECORDS") estão organizadas por zonas, regra geral faz-se corresponder a cada domínio uma zona, contudo é possivel a subdivisão de um domínio em várias zonas.

Os servidores de nomes ("NAME SERVERS") são programas servidores que detêm os registos de recursos de uma ou mais zonas, periodicamente actualizam as suas bases de dados recorrendo a ficheiros em disco local ou a outros servidores de nomes. Esta informação é conhecida por "authoritative".

Os servidores de nomes também podem manter em "cache" informações sobre outras zonas das quais não são autoridade, este procedimento aumenta a eficiência do mecanismo. Esta informação é conhecida por "non-authoritative", igualmente quando um servidor de nomes que é autoridade de uma zona não consegue refrescar as suas bases de dados passa a ser "non-authoritative".

Os clientes dos servidores de nomes implementam um programa de resolução de nomes ("RESOLVER"), este programa dirige pedidos das aplicações para os servidores de nomes locais. O "resolver" implementa habitualmente uma "cache" para evitar a emissão de pedidos repetidos.

Por segurança, cada zona deve ser replicada em vários servidores de nomes. Um dos servidores de nomes de uma dada zona é primário (ou "master"), os restantes são secundários. Geralmente o servidor primário obtém a informação relativa à zona em ficheiros locais, enquanto os servidores secundários recorrem obrigatoriamente ao servidor primário.

"RESOURCE RECORDS" (RRs)

Todos os registos de recursos possuem o mesmo formato genérico:

	NAME		comp. variável
	TYPE		16 bits
	CLASS		16 bits
	TTL		16 bits
	RDLENGTH	16 bits
	RDATA		comp. variável

O campo "NAME" contém a designação do proprietário do recurso, geralmente um nó.

O campo "TTL" especifica (em segundos) o tempo de vida do registo, ou seja o tempo durante o qual se mantém válido em "cache". Este limite não se aplica aos registos sobre os quais existe autoridade "authoritative data", para estes casos são definidas politicas de refrescamento especiais.

O campo "RDLENGTH" indica o comprimento em octetos do campo "RDATA".

O campo "RDATA" contém um "string" que descreve o registo, o seu formato varia com o tipo de registo ("TYPE") e respectiva classe ("CLASS").

Os principais tipos de registo são os seguintes:

DesignaçãoValor do campo TYPESignificado
A1Endereço de nó (host)
AAAA1Endereço de nó IPv6
NS2Servidor de Nomes "authoritative"
CNAME5Nome primário de um "alias"
SOA6Inicio de uma zona "authoritative"
WKS10Descrição de um serviço bem conhecido
PTR12Apontador para um domínio de nomes
HINFO13Informação sobre um "host"
MINFO14Informação sobre uma "mail box" ou "mail list"
MX15Informação de encaminhamento de correio
TXT16"String" de texto

O valor do campo "CLASS" indica a familia de protocolos, o valor tipico é "IN" (familia de protocolos "internet").

O campo "RDATA" é usado para armazenar os dados propriamente ditos, o seu formato depende do "TIPO" de registo, para a classe "IN" e para os tipos mais comuns, os dados são:

TIPORDATA
AEndereço IPv4
AAAAEndereço IPv6
CNAMEO nome do propriétário (especifica um "alias")
HINFO"String" que identifica o CPU + "String" que identifica o S.O.
MINFONome da "mailbox" + Nome da "mailbox" para erros
MXUm número de preferência de 16 bits (primeiro são escolhidos os menores valores) e um nome de uma máquina disponível para actuar como "mail-hub" do domínio proprietário
NSNome de uma máquina que é um servidor de nomes com autoridade sobre o domínio
PTRApontador para outra localização ("host")
SOAVários campos, ver adiante
TXT"String" de texto
WKSEndereço IP + Identificador de Protocolo (8 bits) + "Bitmap" indicando as portas com serviços implementados (1º bit = porta 0; 2º bit = porta 1; etc.)

Nota: Todos os nomes de máquinas são qualificados (incluem o domínio).

Os dados dos registos SOA são os seguintes:

MNAME		Nome do servidor primário onde tiveram origem os RR
		desta zona.
RNAME		"Mailbox" do administrador da zona.
SERIAL		Numero de versão dos RR gerado pelo servidor primário.
REFRESH		Intervalo de refrescamento da zona.
RETRY		Intervalo entre tentativas (em caso de falha).
EXPIRE		Intervalo de tempo após o qual os dados da zona deixam
		de ser "authoritative".
MINIMUM		A valor mínimo do campo TTL para os RR exportados.

O número de série gerado pelo servidor primário permite aos secundários saberam se os RR ainda estão actualizados, em cada refrescamento o servidor secundário consulta do valor SERIAL no servidor primário, os RR são carregados apenas se o valor é superior ao local.

O domínio IN-ADDR.ARPA

O domínio especial IN-ADDR.ARPA é usado como raiz de uma árvore contendo os endereços IP da internet, a existência deste domínio facilita a localização de endereços segundo a estruturação existente na internet. Cada octeto do endereço funciona como um sub-domínio, por exemplo:

	O endereço 193.136.62.3 corresponde nesta
	estrutura ao nome 3.62.136.193.IN-ADDR.ARPA

Note-se a inversão das posições dos octetos. A utilização desta estrutura e a utilização de apontadores (RRs do tipo PTR) facilita a resolução inversa de nomes (resolução de endereços) e permite localizar "routers" de redes.

Para IPv6 foi definido um dominio especial IP6.INT com funcionamento semelhante.

Ficheiros de Configuração

Não existem formatos definidos para os ficheiros base de configuração do servidor de nomes, contudo a definição das RR está normalizada. Tipicamente os RR de uma zona são armazenados num ficheiro que é invocado de forma associada à respectiva zona.

O formato dos ficheiros que contêm as RR está normalizado, trata-se de ficheiros de texto em que os RR possuem formatações dependentes do tipo:

SOA ("Start Of Authority")

Este registo define o inicio de uma zona, esta zona termina no próximo registo SOA.

name  [ttl]  [class]  SOA  origin  person  (
				serial
				refresh
				retry
				expire
				minimum )

Em "name" é especificado o nome da zona, o nome "@" pode ser usado para manter a zona anterior, por exemplo a especificada na invocação do ficheiro. O valor "serial" deve ser incrementado sempre que se procede a qualquer alteração nos RR da zona.

Exemplo:

@	IN	SOA	picasso.dei.isep.ipp.pt. root.groucho.dei.isep.ipp.pt. (
			1	; Serial
			3600	; Refresh
			300	; Retry
			3600000	; Expire
			3600 )	; Minimum

NS ("Name Server")

Este registo define um servidor de nomes com autoridade sobre um domínio:

domain   [ttl] [class]   NS   server

A ("Address")

Este registo define um endereço IP:

host   [ttl] [class]   A   address

CNAME ("Canonical Name")

Este registo define um "alias" para uma máquina:

alias   [ttl] [class]   CNAME   host

Em "host" será especificado o nome oficial da máquina ("Canonical Name").

HINFO ("Host Info")

Este registo define informações sobre uma máquina:

host   [ttl] [class]   HINFO   hardware software

Exemplo:

SRI-NIC.ARPA.           HINFO   DEC-2060 TOPS20
UCBARPA.Berkeley.EDU.   HINFO   VAX-11/780 UNIX