DNS - Domain Name System

Introdução

Na Internet, para que as máquinas possam comunicar é necessário que os routers de comunicação (encaminhadores) saibam para onde direccionar as mensagens de comunicação. Para isso, na internet usa-se o protocolo IP (Internet Protocol). Duma forma muito simples, este protocolo baseia-se num mecanismo de identificação de máquinas denominado endereço IP. Um endereço IP, na versão mais comum (IPv4) tem a seguinte forma: XXX.XXX.XXX.XXX sendo XXX um número decimal entre 0 e 255. (Na versão IPv6 o endereço tem entre outras a forma XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX, em que XXXX é um número hexadecimal entre 0 e FFFF).

Seja um endereço IPv4 ou IPv6, este não é de fácil memorização pelo ser humano, uma vez que não é por si só representativo do serviço que presta ou da "organização que representa".
Torna-se portanto necessário atribuir nomes significativos a máquinas na internet, e desenvolver mecanismos que permitam ao ser humano usá-los com o máximo de abstração possível.

Nos primordios do uso do IP, o número de máquinas era pequeno, pelo que era simples e pouco trabalhoso gerir centralizadamente os nomes e endereços IPs das máquinas. Na realidade, cada máquina detinha informação acerca de todas as máquinas com que comunicava num ficheiro estático (no sistema Unix este ficheiro é o /etc/hosts).

Com o aumento do número de máquinas com que cada uma comunica, tal solução tornou-se impraticável quer do ponto de vista de conhecimento de todas as máquinas quer na gestão de nomes e endereços.

Em 1983 é inventado o DNS (Domain Name System).
O DNS é o sistema de gestão de nomes de máquinas (hosts) na Internet, e tem por objectivos fundamentais:

O primeiro objectivo é necessário para que os seres humanos se possam abstrair da forma de endereços de máquinas na Internet, e ao invés se possam referir de forma natural a serviços (WWW, mail, ftp).  Por exemplo, o nome www.dei.isep.ipp.pt corresponde ao endereço IP 192.136.62.3. Além disso, permite que a máquina (ou máquinas) que disponibiliza o serviço possa mudar de endereço sem que o ser-humano tenha que saber dessa alteração para continuar a usar o serviço. Na realidade o tipo de informação gerida pelo DNS não se limita a um mapa entre nomes e IPs, mas outro tipo de informação (registo de recurso).

O segundo objectivo permite que as máquinas e seus nomes sejam geridos distribuidamente, por forma que não seja necessário contactar uma suposta entidade central sempre que uma alteração ou adição duma máquina é feita à Internet. Este processo baseia-se no princípio da delegação de autoridade, e determina que uma entidade delega noutra a responsabilidade de definição de IPs e nomes às máquinas que tem sob sua autoridade.
Por exemplo, a entidade responsável pelas máquinas em Portugal (pt), delegou no IPP a autoridade para gerir os IPs e nomes das máquinas dum novo domínio denominado IPP. Assim, foi criado o domínio ipp.pt. O IPP fica ainda com autoridade para criar domínios dentro do domínio IPP, e se for caso disso delegar autoridade desses sub-domínios a outras entidades. Assim, o IPP delegou no ISEP a autoridade de gerir os IPs e nomes das máquinas dum domínio que se denomina isep.ipp.pt. O mesmo acconteceu entre o ISEP e o DEI, criando-se assim o domínio dei.isep.ipp.pt.

Com esta possibilidade (e necessidade) de delegação de autoridade, deixa de haver uma única entidade que saiba o nome de todas as máquinas, pelo que surge o problema de saber em que uma máquina se deve dirigir para traduzir o nome duma máquina num endereço IP. Este processo denomina-se resolução.

Componentes dum sistema DNS

Um sistema DNS tem portanto por missão traduzir os nomes em IPs. Para isso é necessário que essa informação seja armazena e organizada de acordo com as necessidades do sistema.

O Servidores de Nomes (Name Servers) são as máquinas responsáveis pelo armazenamento desta informação, e são também as máquinas a quem as outras máquinas (Hosts) se dirigem para traduzirem/procurarem informação.

Registos de recursos

A informação a guardar é organizada e armazenada segundo um registo diferente conforme o tipo de informação ou entidade do sistema a que diz respeito. Alguns dos mais importantes tipos de registos de recursos são:

Abreviatura Tipo Significado
A (IPv4) Address Relaciona FQDN com o endereço IP (versão IPv4)
AAAA IPv6 Address Relaciona FQDN com o endereço IP (versão IPv6)
CNAME Canonical Name Alias de um nome de domínio
SOA Start Of Authority Início de uma zona de autoridade delegada (especificado no novo domínio com autoridade delegada pelo seu superior)
NS Name Server Indicação do servidor de nomes responsável pela gestão da informação do domínio delegado (especificado no super-domínio)
PTR Pointer Relaciona o IP com o registo A ou CNAME duma máquina (usado em reverse lookup)
MX Mail Exchange Relaciona um domínio com as servidores responsáveis pelo serviço de mail do domínio
SRV Service Location Registo genérico utilizado para definir a localização de máquinas
TXT Text Permite armazena texto

Existem outros tipos de registos mais recentes, mas que no contexto deste documento não são fundamentais.

Ficheiros de Domínio

Tradicionalmente os servidores de nomes guardam essa informação em ficheiros de texto organizados segundo os tipos de registos de recursos anteriores.

Assim, por exemplo, um servidor de nomes dum domínio xy.dei.isep.ipp.pt deverá ter sempre informação respitante ao domínio (Start Of Authority) do qual é servidor de nomes (primário ou secundário):

;
;  Database file xy.dei.isep.ipp.pt.dns for xy.dei.isep.ipp.pt zone.
;      Zone version:  6
;
@                       IN  SOA w2k3s-a.  hostmaster. (
                        	6            ; serial number
                        	900          ; refresh
                        	600          ; retry
                        	86400        ; expire
                        	3600       ) ; default TTL

E também informação acerca dos servidores de nomes do domínio:

;
;  Zone NS records
;
@                       NS	w2k3s-a.

O caracter "@" significa que a informação respeita ao domínio do próprio servidor de nomes.

Tem também informação acerca das máquinas (hosts) que se encontram registadas no domínio.

;
;  Zone records
;
a1                      A		192.168.1.155
ns                      CNAME	w2k3s-a.xy.dei.isep.ipp.pt.
soa                     CNAME	xy.dei.isep.ipp.pt.

Zonas e Domínios

Dentro dum domínio podem ser criados sub-domínios, formando assim um hierarquia de domínios (ex. pt delegou autoridade em ipp que por sua vez delegou autoridade em isep que por sua vez delegou autoridade em dei).

Representa-se esta hierarquia na forma:

dom4.dom3.dom2.dom1

Em que dom1, dom2, dom3 são nomes dos domínios, e dom4 tanto pode ser um nome de domínio como de uma máquina. Um endereço é composto por até 127 níveis, sendo que o endereço completo não pode ultrapassar 255 caracteres.

Os domínios à direita são hierarquicamente superiores aos da esquerda. Isto é, os da direita delegam autoridade nos da esquerda.

No topo da hierarquia está um e um só domínio, denominado "root domain". Na realidade, um endereço internet deveria terminar sempre num ponto:

xy.dei.isep.ipp.pt.

sendo o último ponto correspondente ao "root domain", que não necessita de ter nome uma vez que é único.

A existência dum sub-domínio não implica forçosamente a delegação de autoridade. Na realidade a delegação de autoridade é feita por zonas.br> Uma zona é portanto um conjunto de domínios, sub-domínios e máquinas, a quem foi delegada autoridade de gestão pelo nível hierarquicamente superior.

Em cada zona começa uma nova autoridade (Start Of Authority), representada no servidor de nomes (Name Server) do domínio superior, pelos registos de um ou mais Name Servers (NS).
Assim, ao delegar autoridade em XY para gestão das suas máquinas e sub-domínios, o servidor de nomes do domínio dei.isep.ipp.pt deve definir um registo com a relação entre o nome do domínio e o servidor(es) de nomes desse "novo" domínio:

;
;  Delegated sub-zone:  xy.dei.isep.ipp.pt.
;
xy				       NS	w2k3s-a.xy.dei.isep.ipp.pt.
w2k3s-a.xy.dei.isep.ipp.pt.		A	192.168.1.115
;  End delegation

A nova zona, denominada xy.dei.isep.ipp.pt, será gerida pela máquina w2k3s-a.xy.dei.isep.ipp.pt, por sua vez configurada como apresentado anteriormente.

Note-se que a delegação de autoridade é feita ao nome do servidor (w2k3s-a.xy.dei.isep.ipp.pt) e não ao seu IP. Ora, como esta máquina pertence ao domínio delegado, este servidor não vai conseguir posteriormente informar acerca do endereço IP do servidor de nomes responsável pelo domínio xy. Para resolver esse problema, o servidor de nomes do domínio dei deve também incluir informação acercad do nome e IP do servidor de nomes do domínio xy. Pelo papel que este tipo de registos tem na interligação entre domínios, denomina-se "glue records".

Uma zona pode ter vários servidores de DNS e cada servidor de DNS servir mais do que uma zona. No entanto, um mesmo servidor DNS não pode servir duas zonas hierarquicamente relacionadas. Isto é, não pode ser servidor DNS da zona A e B simultaneamente, se a zona A delegou autoridade na zona B, ou se a zona B delegou autoridade na zona A.

Resolução

De acordo com a gestão de informação descrita anteriormente, o sistema de nomes baseado em DNS é um sistema distribuído, em que a informação sobre máquinas e domínios não depende e não está disponível numa só máquina na internet. Pelo contrário, através da delegação de autoridade, a informação está distribuída por milhares de servidores de nomes existentes na internet, que alteram constantemente a estrutura de domínios, máquinas e zonas de autoridade. É portanto necessário definir métodos que permitam descobrir determinado IP nesta hierarquia de domínios e servidores de nomes.

Resolução (lookup) é o processo que ocorre quando se deseja traduzir um nome de domínio num endereço de IP. No entanto, como se referiu anteriormente, a informação gerida pelo DNS não é hoje em dia apenas de endereços IPs e nomes de máquinas, pelo que a resolução ocorre sobre outro tipo de informação. De facto, o processo poderia ser denominado procura pois o seu obejctivo é a procura de um certo tipo de informação referente a um determinado argumento (ex. nome da máquina). (Daí que o Active Directory se adapte tão bem a gestor deste tipo de informação.)

As aplicações que necessitam de resolver determinada informação no DNS recorrem a um tipo de entidade denominada "resolver". Este tipo de entidade comunica com os servidores de nomes de forma que a aplicação não tem interveniência no processo.

Existem dois tipos de resolução conforme o processo que é seguido para se encontrar a informação:

Resolução iterativa

No processo de resolução iterativa o resolver tem o papel principal, questionando um servidor de nomes de cada vez até concluir a resolução com sucesso ou insucesso.
Cada servidor inquirido responde com a sua melhor resposta possível, mas sem contactar qualquer outro servidor de nomes. Em função dessa resposta o resolver decide que outro servidor deve contactar para resolver a informação. O processo repete-se até a resposta recebida ser a desejada ou não permitir qualquer outra iteração do processo.

Os tipos de resposta mais comuns são os seguintes:

A resolução iterativa não é muito comum pois implica maior complexidade do resolver apesar de requer menos recursos ao servidor de nomes preferido.

Resolução recursiva

A resolução recursiva (recursive lookup) faz uso do servidor de nomes para resolver a informação desejada. Ou seja, o "resolver" envia a pergunta ao servidor de nomes e espera que este resolva a informação através da cooperação com outros servidores de nomes.

Contudo, ao contrário da abordagem iterativa, esta segue uma pesquisa determinística, em que cada resposta vai garantidamente resolvendo a pergunta.

Para isso, o nome a resolver é pesquisado da direita para esquerda, de tal forma que os servidores de nomes dos domínios mais à direita do nome sabem qual o servidor de nomes do domínio imedatamente à esquerda, fornecendo essa informação ao "servidor de nomes recursivo".

Por exemplo, se se desejar resolver o endereço www.dei.isep.ipp.pt. (note-se o ponto no final), é necessário contactar o servidor de nomes responsável pela delegação do dominio "pt". Nesse caso é necessário contactar os servidores de nomes do "root domain".

Para isso existem 13 servidores de nomes em todo o mundo que são autoritários sobre o "root domain", denominados "root hints". Qualquer servidor de nomes sabe o endereço IP de todos estes "root hints". Estes root-hints têm um endereço na forma letra.root-servers.net em que letra varia entre A e M.

Estes servidores não sabem o endereço IP de www.dei.isep.ipp.pt., mas sabem o endereço do servidor de nomes do domínio pt. Portanto, responde ao servidor de nomes responsável pela resolução sobre este registo de NS. O servidor de nomes usa então este registo para contactar o servidor de nomes referente ao domínio pt, que por sua vez sabe o endereço do servidor de nomes do domínio ipp. Responde ao servidor de nomes, que por sua vez usa essa informação para perguntar ao servidor de nomes do domínio isep. Este responde com o registo (ou conjunto de registos) dos endereços dos servidores de nomes do domínio dei. Finalmente o servidor de nomes responsável pela recursividade contacta o servidor de nomes do domínio dei, que sabe que www.dei.isep.ipp.pt é uma máquina (registo do tipo A) duma máquina sobre o qual tem autoridade. A resposta que envia portanto ao servidor de nomes é uma resposta "autoritária" com o endereço IP da máquina.

Este é o processo mais comum de resolução apesar de sobrecarregar os servidores de nomes.

Resolução com Cache

No entanto o processo de resolução recursivo pode ser substancialmente melhorado pelo uso de mecanismos de cache.

Nesta abordagem mais realista, cada uma das entidades intervenientes no processo de resolução usam a sua capacidade de caching para guardar temporariamente a informação que vão resolvendo ao longo da sua execução.

Assim, antes de cada entidade contactar a seguinte (como descrito anteriormente), cada entidade procura na sua cache privada, e apenas na circunstância de não ter tal informação disponível é que contacta a próxima entidade.

Complementarmente aos servidores de nomes primários, existem:

Para haver controlo sobre a informação do DNS são definidos alguns parámetros por zona, e que são enviados em cada resposta (ver exemplo anterior):

Resolução inversa

Como a evolução da intrenet e de serviços, surgiu a necessidade de procurar o nome associado ao endereço IP. Portanto, a pergunta inversa àquela que se tem feito.

Como o DNS está desenvolvido para responder a perguntas sobre nomes, e porque existe uma grande infra-estrutura que não está preparada para responder se não a primeiro tipo de pergunta, houve a necessidade de adaptar a pergunta às facilidades implementadas pelo servidores de DNS.

Assim, um dos grandes problemas envolvidos está relacionado com o facto do nome de domínio ser escrito pela ordem contrário ao IP. Isto é, o domínio hierarquicamente superior está escrito à direcita nos nomes, e à esquerda nos endereços IP.

Para resolver o problema, é criada nos servidores de nomes uma zona de resolução inversa (reverse lookup), que guarda registos do tipo PTR. Isto é, associa o endereço IP ao nome.

Complementarmente, a pergunta aos servidores de nomes é feita com o endereço IP invertido, de tal forma que o processo de resolução recursivo possa usar a mesma lógica. No entanto, não existe definido nenhum endereço com números apenas, pelo que os servidores de nomes não detém essa informação.

Para obviar essa ambiguidade, para além de inverter o endereço IP, é-lhe acrescentado um sufixo respeitante ao um domínio que os servidores reconhecem como endereço de resolução inversa.

Por exemplo, se se desejar saer qual o nome da máquina cujo IP é 193.136.62.3, os "resolver" deve converter o IP para 3.62.136.193.in-addr.arpa

Desta forma os root hints ou qualquer outro servidor de nomes, sabem que se trata dum pedido de resolução inversa, e procuram na zona de resolução inversa e não na zona de resolução directa (forward lookup).

DNS Vs. WINS

O sistema de nomes das redes Microsoft NetBIOS é o WINS (Windows Internet Name Service). Originalmente este sistema de nomes usava broadcast para anunciar nomes, com todos os inconvenientes que isso traz, nomeadamente relacionados com o facto de não serem encaminhados entre redes.

Se bem que este sistema esteja em desuso, foram ao longo dos anos desenvolvidos abordagens mais eficientes que a baseada unicamente em broadcast. Assim, existem de momento 4 tipos diferentes de nós NetBIOS no que respeita à procura de nomes:

Ferramentas

Última actualização: 2005-12-12