sábado, 22 de agosto de 2009

DNS – Endentendo e Implementando

Atualmente em diversas implementações de serviços em clientes venho tendo problemas e, na maioria das vezes, o diagnóstico acaba em configurações erradas no servidor de DNS.

Aparentemente o serviço de DNS é simples, entretanto existe alguma complexidade e muitos features que esse serviço oferece.

Antes de mostrar como implementar um serviço de DNS tanto em servidores Linux como em servidores Windows System temos que entender o que é e como funciona o DNS. Vamos lá!

DNS – Domain Name Server (Servidor de Nomes de Domínios)

DNS é um serviço de gerenciamento de nomes hierárquico e distribuído. O seu principal funcionamento basicamente resume-se em resolver nomes de domínios em endereços de rede (IPs). Necessariamente ele "traduz" nomes para endereços IPs e endereços IPs para nomes respectivos, permitindo a localização de hosts em um determinado domínio.

Cada domínio possui um registro de DNS que define qual o endereço IP do servidor e de e-mail que responderão por este domínio. Esse processo é conhecido como resolução de nomes ou resolução de domínio.

Por causa do grande tráfego da internet e pela segurança da rede, a estrutura de banco de dados DNS é distribuída e hierárquica. O que isso significa? Significa que ao invés de um banco de dados central e único com informações de todos os domínios, a resolução de nomes ocorre consultando diversos servidores DNS, ou seja, um servidor DNS pode apontar para outro servidor DNS, que aponta pra outro e assim sucessivamente).

Essa hierarquia é equivalente a uma pirâmide, existe um servidor principal que aponta para um secundário que aponta pra um terciário e assim vai. O servidor que está na topo da "pirâmide" é o servidor raiz.


O servidor raiz da internet possui um banco de dados que indica qual DNS será responsável pela resolução de domínios para cada extensão de domínio diferente chamado de TLD (Top Level Domain). Sua tabela em si é muito pequena, pois possui apenas uma entrada para cada TLD existente. Os TLDs podem ser dois tipos:

  • Generic Top Level Domains (gTLDs);
  • Country Code Top Level Domains (ccTLDs);

Os gTLDs são domínios usados no mundo todo (.com, .net, .org, etc.). Os ccTLDs respondem pelas extensões de domínios administrados por países (.br, .de, .ar, etc.). Por segurança, o servidor raiz foi replicado em 13 servidores raízes apenas que estão replicados pelo mundo e duas vezes ao dia seu conteúdo é automaticamente replicado.

Por convenção que cada servidor raiz seria chamado por uma letra do alfabeto (Server A, Server B, etc.). Mesmo um determinado servidor raiz, o servidor raiz "A", por exemplo, pode ser replicado em várias regiões do mundo, para assegurar que o tempo para a resolução de um domínio seja rápido.

Essa estrutura hierárquica possui um problema intrínseco de segurança. Imagine que você tente acessar o site do seu banco e o provedor lhe fornecer por erro o endereço de outro site, ou na pior das hipóteses, direcionar sua solicitação para um site phishing, que simularia o site do seu banco e roubasse suas informações.

O grande problema dessa vulnerabilidade que seria impossível identificar que o provedor de acesso fez isso.

No entanto a estrutura de resolução de nomes IETF (Internet Engineering Task Force) criou uma extensão do uso atual do DNS denominado de DNSSEC. Essa extensão autentica as informações do DNS e garante que essas informações são íntegras.

Atualmente o Registro.br, responsável pela administração dos domínios .br já começou a permitir o registro com o DNSSEC para algumas extensões como blog.br, eng.br, etc.

Bom, voltando. Geralmente o servidor de DNS atua resolvendo o nome do domínio de um host para um endereço IP correspondente. O DNS Reverso faz exatamente o contrário, resolve endereços IPs, buscando o nome de domínio associado ao host. Ele serve principalmente para verificar a autenticidade de endereços, verificando se o endereço IP atual corresponde ao endereço IP informado pelo servidor DNS. Isto dificulta que alguém utilize um domínio que não lhe pertence para enviar SPAM, por exemplo.

Chega de teoria, vamos à prática. Iremos aprender como implementar um serviço DNS no Linux utilizando o BIND (Berkeley Internet Name Domain) e no Windows utilizando o serviço incorporado no Windows Server de resolução de nomes.

No próximo post mostraremos como implementar um servidor de DNS no Windows Server 2003.

Até lá!