DNS - Um serviço Indispensável

Resumo

Este artigo descreve o Domain Name System-DNS , onde seu propósito principal é associar nomes de hosts a endereços IP . Essa necessidade surge do principio que usuários normalmente usam nomes para identificar máquinas e softwares de computador endentem números. O DNS é um banco de dados distribuído, ou seja, cada site é responsável por guardar as informações dos seus computadores, sendo que há possibilidade de compartilhamento de informação, quando um site precisa procurar dados do outro.

Intrudução a DNS

Você já parou para pensar o que acontece quando digitamos uma URL em nosso navegador favorito? Ponderamos, quanto digitamos uma url no navegador o primeiro passo antes do conteúdo ser exibido é converter o nome (url) em IP, este processo é realizado pelo Servidor DNS, Sistema de Nomes e Domínios (Domain Name System), o endereço do servidor DNS é previamente configurado na máquina, seja por DHCP ou fixado manualmente, o servidor DNS é responsável por devolver ao navegador o IP do site solicitado, somente depois que a consulta é realizada que o navegador realizará a solicitação ao servidor web que responde pela url solicitada, após o conteúdo do site é exibido em sua seu navegador.

O DNS foi criado com o objetivo de tornar as coisas mais fáceis para o usuário, permitindo assim, a identificação de computadores na Internet ou redes locais através de nomes (é como se tivéssemos apenas que decorar o nome da pessoa ao invés de um número de telefone). A parte responsável por traduzir os nomes como www.nome.com.br em um endereço IP é chamada de resolvedor de nomes.

Estrutura do sistema de DNS

No inicio da Internet, quando era chamada de Arpanet, a conversão entre o nome da máquina e o seu IP era realizada usando-se um arquivo denominado de hosts.txt. Os administradores enviavam via e-mail as alterações dos seus domínios e buscavam via FTP tal arquivo para atualizar-se.

Com o crescimento da Internet tal mecanismo tornou-se completamente inviável, surgindo o DNS, um sistema descentralizado, fornecendo as características necessárias em relação aos problemas de carga gerada no tráfego na rede, de colisão de nomes e de consistência dos dados. [http://www.pop-rs.rnp.br/ovni/dns/hist.html]

Devido ao intenso tráfego da internet e devido à segurança da rede, a estrutura do banco de dados DNS é distribuída e hierárquica. Ou seja, ao invés de um banco de dados central e único com informações de todos os domínios, a resolução ocorre consultando-se diversos servidores DNS e sua resolução é hierárquica (um servidor DNS pode apontar para outro servidor DNS e assim sucessivamente).

A estrutura hierárquica equivale a uma árvore invertida, ou seja, existe um servidor principal que aponta para um secundário que aponta para um terceiro e assim sucessivamente. O servidor DNS que está no topo da internet é o servidor raiz.

Figura 1 - Estrutura hierárquica

Root Server

Figura 2 - Root-Server

Como Funciona uma resolução de Nomes

Assista o vídeo criado pela centr.org que demonstra a resolução de nomes.

Link externo

A figura 3 demostra a resolução de nomes para o endereço www.senacrs.com:

O servidor de nomes do cliente verifica que www.senacrs.com não faz parte do seu domínio e interroga o servidor de nomes da raiz (2). Este desconhece o endereço IP de www.senacrs.com, mas tem uma referência para o servidor de nomes do subdomínio com, que devolve ao servidor de nomes (3). Este pode então, interrogar o servidor de nomes de “com” sobre o endereço IP de www.senacrs.com (4) e obter assim, uma referência para o servidor de nomes de senars.com que devolve ao servidor de nomes local (5). Este interroga, finalmente o servidor de senacrs.com (6) que pode resolver o endereço pretendido (7). Termina assim o processo de resolução e o servidor de nomes local devolve ao cliente o endereço IP correspondente ao nome solicitado.

Figura 3 - Exemplo de Resolução de Nomes Figura 3 - Exemplo de Resolução de Nomes

Servidor de Cache - Recursivos

É responsável por receber as consultas DNS dos clientes locais e consultar os servidores externos, de modo a obter respostas às consultas efetuadas.

Servidor Autoritativos

É responsável por manter os mapas referentes a uma zona local e responder a requisições vindas de máquinas de todo o mundo, que precisarem resolver nomes de domínio da zona sobre a qual este servidor tem autoridade

Bind

BIND (Berkeley Internet Name Domain) é o servidor para o protocolo DNS mais utilizado na Internet, especialmente em sistemas do tipo Like-Unix, onde ele pode ser considerado um padrão de facto. Foi criado por quatro estudantes de graduação, membros de um grupo de pesquisas em ciência da computação da Universidade de Berkeley, e foi distribuído pela primeira vez com o sistema operacional 4.3BSD. O programador Paul Vixie, enquanto trabalhava para a empresa DEC, foi o primeiro mantenedor do BIND. Atualmente o BIND é suportado e mantido pelo Internet Systems Consortium.

Para a versão 9, o BIND foi praticamente reescrito. Ele passou a suportar, dentre outras funcionalidades, a extensão DNSSEC e os protocolos TSIG e IPv6.

Assim como os programas Sendmail e WU-FTPD, e outros sistemas que remontam aos primeiros dias da Internet, as versões 4 e 8 do BIND tinham uma série de vulnerabilidades de segurança e, por isso, o seu uso é hoje fortemente desencorajado. Uma das motivações para reescrever o BIND, e lançar o BIND 9, foi disponibilizar um sistema mais seguro e competitivo com as ofertas de servidores DNS da Microsoft.

TESTE - 1 Configuração Bind Windows

Estou Utilizando o Bind 9.7.2 no sistema Operacional Windows 2008, para minha surpresa o Bind para windows não possui os arquivos de configurações básicas, que sempre acompanha a instalação em sistemas linux, para configurar o Bind para rodar no windows precisamos criar o arquivo named.conf com as seguintes configurações básicas:

 // Opções globais do servidor
 options {
	// Especifica a pasta base dos arquivos
	directory "C:\bind\etc";
	// Especifica o arquivo de processo
	pid-file "C:\bind\var\named.pid";
	// Escutar no seguinte endereço
	listen-on { any; };
        // Clientes autorizados a consultar este servidor
	allow-query { 127.0.0.1; 192.168.200.0/24; };
	// Realiza pesquisas recursivas
	recursion yes;
	// Indica quais hosts podes realizar recursividade
	//allow-recursion { localhost; localnets; };
	// Servidores de forwarders
	forwarders { 8.8.4.4; 8.8.8.8; 201.40.162.7; };
 };

 // Zona raíz Informa o arquivo onde ficam descritos os servidores DNS espalhados pelo planeta.

 zone "." IN {
	type hint;
	file "named.root";
};

Com as configurações listadas anteriormente, o bind já pode ser inicializado acessando o Painel de Controle / Ferramentas Administrativas / Serviços, dentro de serviços procuramos a opção ISC Bind, após iniciado podemos utilizar o bind com servidor DNS recursivo ou como é popularmente conhecido servidor DNS Cache.

named.conf - Windows

 // Opções globais do servidor
 options {
	// Especifica a pasta base dos arquivos
	directory "C:\bind\etc";
	// Especifica o arquivo de processo
	pid-file "C:\bind\var\named.pid";
	// Não escutar em nenhuma interface ipv6
	//listen-on-v6 { none; };
	// Escutar no seguinte endereço
	listen-on { any; }; // Clientes autorizados a consultar este servidor
	allow-query { 127.0.0.1; 192.168.200.0/24; };
	// Realiza pesquisas recursivas
	recursion yes;
	// Indica quais hosts podes realizar recursividade
	//allow-recursion { localhost; localnets; };
	// Servidores de forward
	forwarders { 8.8.4.4; 8.8.8.8; 201.40.162.7; };
 };
 key "rndc-key" {
	algorithm hmac-md5;
 	secret "Hve9TJIiPW2m/keWbmJcng==";
 };
controls {
	inet 127.0.0.1 port 953
 		allow { 127.0.0.1; } keys { "rndc-key"; };
 };
 // Zona raíz
 zone "." IN {
	type hint;
	file "named.root";
 };
 // Zona Pinguim.com
 zone "pinguim.com" IN {
	type master;
	file "db.pinguim.zone";
	allow-transfer { 10.1.1.7; };
 };
 // Zona reversa
 zone "200.168.192.in-addr.arpa" {
	type master;
	file "db.192.168.200.rev";
 };

Arquivo db.pinguim.zone - Windows

$TTL 6h
@	IN SOA	ns1.pinguim.com.	hostmaster.pinguim.com. (
			2005022201
			10800
			3600
			604800
			86400 )

@		NS	ns1.pinguim.com.
;
ns1	IN A	192.168.200.253
www	IN A	192.168.200.253
;

Arquivo named.root

;       initialize cache of Internet domain name servers
;       (e.g. reference this file in the "cache  .  <file>"
;       configuration file of BIND domain name servers).
;
;       This file is made available by InterNIC 
;       under anonymous FTP as
;           file                /domain/named.cache
;           on server           FTP.INTERNIC.NET
;       -OR-                    RS.INTERNIC.NET
;
;       last update:    Jun 17, 2010
;       related version of root zone:   2010061700
;
; formerly NS.INTERNIC.NET
;
.                        3600000  IN  NS    A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4
A.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:BA3E::2:30
;
; FORMERLY NS1.ISI.EDU
;
.                        3600000      NS    B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET.      3600000      A     192.228.79.201
;
; FORMERLY C.PSI.NET
;
.                        3600000      NS    C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET.      3600000      A     192.33.4.12
;
; FORMERLY TERP.UMD.EDU
;
.                        3600000      NS    D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET.      3600000      A     128.8.10.90
;
; FORMERLY NS.NASA.GOV
;
.                        3600000      NS    E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET.      3600000      A     192.203.230.10
;
; FORMERLY NS.ISC.ORG
;
.                        3600000      NS    F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET.      3600000      A     192.5.5.241
F.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:2F::F
;
; FORMERLY NS.NIC.DDN.MIL
;
.                        3600000      NS    G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET.      3600000      A     192.112.36.4
;
; FORMERLY AOS.ARL.ARMY.MIL
;
.                        3600000      NS    H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET.      3600000      A     128.63.2.53
H.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:1::803F:235
;
; FORMERLY NIC.NORDU.NET
;
.                        3600000      NS    I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET.      3600000      A     192.36.148.17
I.ROOT-SERVERS.NET.      3600000      AAAA  2001:7FE::53
;
; OPERATED BY VERISIGN, INC.
;
.                        3600000      NS    J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET.      3600000      A     192.58.128.30
J.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:C27::2:30
;
; OPERATED BY RIPE NCC
;
.                        3600000      NS    K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET.      3600000      A     193.0.14.129
K.ROOT-SERVERS.NET.      3600000      AAAA  2001:7FD::1
;
; OPERATED BY ICANN
;
.                        3600000      NS    L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET.      3600000      A     199.7.83.42
L.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:3::42
;
; OPERATED BY WIDE
;
.                        3600000      NS    M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET.      3600000      A     202.12.27.33
M.ROOT-SERVERS.NET.      3600000      AAAA  2001:DC3::35
; End of File

Arquivo de zona reversa db.200.168.192.rev - Windows

$TTL 38400
;
@ IN SOA ns1.pinguim.com. admin.pinguim.com. (
                                2009080401 ;serial
                                28800   ;refresh
                                7200    ;retry
                                3600000 ;expire
                                86400 ) ;minimum        


@         IN    NS   ns1.pinguim.com.
@         IN    NS   ns1.pinguim.com.

;
;   Registros
1    IN   PTR   192-168-200-1.pinguim.com.
2    IN   PTR   192-168-200-2.pinguim.com.
3    IN   PTR   192-168-200-3.pinguim.com.
4    IN   PTR   192-168-200-4.pinguim.com.
5    IN   PTR   192-168-200-5.pinguim.com.
6    IN   PTR   192-168-200-6.pinguim.com.
7    IN   PTR   192-168-200-7.pinguim.com.
8    IN   PTR   192-168-200-8.pinguim.com.
9    IN   PTR   192-168-200-9.pinguim.com.
10    IN   PTR   192-168-200-10.pinguim.com.
253    IN   PTR   ns1.pinguim.com.

Arquivo syslog - Log de transferencia de Zona

May 28 23:22:43 dns named[2764]: zone pinguim.com/IN: Transfer started.
May 28 23:22:43 dns named[2764]: transfer of 'pinguim.com/IN' from 10.1.1.6#53: connected using 10.1.1.7#42062
May 28 23:22:44 dns named[2764]: zone pinguim.com/IN: transferred serial 2
May 28 23:22:44 dns named[2764]: transfer of 'pinguim.com/IN' from 10.1.1.6#53: Transfer completed:
 1 messages, 5 records, 166 bytes, 0.216 secs (768 bytes/sec)

Arquivo db.pinguin.slave - Servidor Slave

Arquivo gerado automaticamente pelo bind qunado é realizada a transferencia de zona, exemplificada no arquivo syslog

$ORIGIN .
$TTL 21600      ; 6 hours
pinguim.com             IN SOA  ns1.pinguim.com. hostmaster.pinguim.com. (
                                2          ; serial
                                10800      ; refresh (3 hours)
                                3600       ; retry (1 hour)
                                604800     ; expire (1 week)
                                86400      ; minimum (1 day)
                                )
                        NS      ns1.pinguim.com.
$ORIGIN pinguim.com.
ns1                     A       192.168.200.253
www                     A       192.168.200.253

Arquivo named.conf.local do servidor slave

// Zona Pinguim.com
zone "pinguim.com" IN {
        type slave;
        file "/etc/bind/slave/db.pinguim.zone";
        masters { 10.1.1.6; };
};

// Zona reversa
zone "200.168.192.in-addr.arpa" {
        type slave;
        file "db.192.168.200.rev";
        masters { 10.1.1.6; };
};

Instalação configuração Bind no Windows

A instalação inicia com o download do bind9 para windows da página oficial do projeto: http://www.isc.org/software/bind. Para fins deste artigo foi utilizado a versão BIND-9.7.3-P1. Após realizar o download descompacte os arquivos, entre na pasta criada e execute o arquivo BINDInstall, a seguinte tela aparecerá:

Na tela que surge devemos configurar algunas opções:

Targer Director: c:\bind Define o local de instalação do bind Service Accont name: named Define o nome do usuario utilizado pelo bind

Service Account Password: Senha para usuário criado

Na guia option deixe marcada a opção Automatic Startup, para o serviço do bind ser inicializado junto com o boot do sistema.

Para facilitar a documentação assumiremos que o bind foi istalado no diretório c:\bind.

Após a instalação devemos configurar o bind para responder com servidor DNS recursivo ou cache como é conhecido no meio, para tal acesse o diretório que foi instalado o c:\bind\bin e exetute os comando conforme firura abaixo:

Com isso criamos a chave key para o bind e iniciamos a configuração do arquivo named.conf, o arquivo named.conf é responsavel por todas as configurações dos do bind.

Acesse o diretório c:\bind\etc e edite o arquivo rndc.conf, salve-o no mesmo diretório com o nome de named.conf, após deixe como o exemplo abaixo:

# named.conf
options {
	// Especifica a pasta base dos arquivos
	directory "C:\bind\";

	// Especifica o arquivo de processo
	pid-file "C:\bind\var\named.pid";

	// Não escutar em nenhuma interface ipv6
	listen-on-v6 { none; };

	// Escutar no seguinte endereço
	listen-on { any; }; // Clientes autorizados a consultar este servidor
	allow-query { 127.0.0.1; 192.168.200.0/24; 10.0.0.0/8 };
	
	// Realiza pesquisas recursivas
	recursion yes;
	
	// Indica quais hosts podes realizar recursividade
	//allow-recursion { localhost; localnets; };

	// Servidores de forward
	forwarders { 8.8.4.4; 8.8.8.8;};

key "rndc-key" {
	algorithm hmac-md5;
 	secret "LZ9UGB/j0xTDnjkiNKXo3Q==";
};
 
controls {
 	inet 127.0.0.1 port 953
 		allow { 127.0.0.1; } keys { "rndc-key"; };
};


// Zona raíz
zone "." IN {
	type hint;
	file "named.root";
};

Feito isso, salve e feche o arquivo, para terminar a configuração do bind como um servidor DNS cache ou recursivo, acesse o link http://www.internic.net/zones/root.zone e baixe o arquivo que contém as zonas raízes. O arquivo deve ser salvo dentro do diretório c:\bind\etc com o nome named.root.

Pronto com esta configurações temos um servidor de DNS cache instalado e configurado em nossa máquina. Vamos configurar a máquina local para utilizar o servidor, para isso edite as configurações da rede local para acessar o IP 127.0.0.1, ou seja, a propria máquina, como mostra a figura abaixo.

Agora temos que iniciar o bind, acesse o painel de contro / ferramentas administrativas / Serviços, na lista procure ISC BIND e logo após em iniciar serviço, se tudo foi configurado corretamente o bind esta pronto para responde as solititações de DNS.

Para testar o bind podemos utilizar a ferramenta nslookup disponivel no windows, abra um terminal de digite os comando como mostrado na figura abaixo:

Observer o retângulo em vermelho que o servidor esta definido para sua prórpia máquina pelo IP de localhost, abaixo temos consultas de dns para os endereços do cade.com.br e google.com.br com as devidas respostas de endereços IP.

Configurando um servidor Autoritativo

Seguindo as orientações do site Registro.br (http://registro.br/suporte/faq/index.html#3) para registrar um dominio no Brasil o primeiro passo é configurar os servidores DNS autoritativos master e slave, servidores que responde quando um consulta DNS é solicitade por um cliente(Geralmente um Browser), para exemplificar vamos configurar o dominio pinguin.com, utilizando a máquina windows como master do dominio e o Linux como slave.

Edite o arquivo named.conf e deixe como o exemplo abaixo:

// Opções globais do servidor
options {
	// Especifica a pasta base dos arquivos
	directory "C:\bind\etc";

	// Especifica o arquivo de processo
	pid-file "C:\bind\var\named.pid";

	// Não escutar em nenhuma interface ipv6
	//listen-on-v6 { none; };

	// Escutar no seguinte endereço
	listen-on { any; }; // Clientes autorizados a consultar este servidor
	allow-query { any; };
	
	// Realiza pesquisas recursivas
	recursion no; 
	
	// Indica quais hosts podes realizar recursividade
	//allow-recursion { localhost; localnets; };

	// Servidores de forward
	// forwarders { 8.8.4.4; 8.8.8.8;};

};

key "rndc-key" {
	algorithm hmac-md5;
 	secret "Hve9TJIiPW2m/keWbmJcng==";
};

controls {
	inet 127.0.0.1 port 953
 		allow { 127.0.0.1; } keys { "rndc-key"; };
};

// Zona raíz
zone "." IN {
	type hint;
	file "named.root";
};

// Zona Pinguim.com
zone "pinguim.com" IN {
	type master;
	file "db.pinguim.zone";
	allow-transfer { 10.1.1.7; }; // IP do servidor DNS autoritativo Slave
};

Note que foi adicionado a zona pinguim.com e o arquivo que conterá as informações sobre esta zona é o arquivo db.pinguin.zone.

Criando o arquivo de Zona

Vamos criar o arquivo que contém as informações do nosso dominio, veja o exemplo comentado abaixo:

$TTL 6h
@	IN SOA	ns1.pinguim.com.	hostmaster.pinguim.com. (
			2 ; Serial
			10800 ; Refresh (3 horas)
			3600  ; retry (1 hora)
			604800 ; expire (1 semana)
			86400 ) ; minimun (1 dia)

@		NS	ns1.pinguim.com.
                NS      ns2.pinguim.com.
                IN MX 10 mail.meuemail.com.br.
;
pinguim.com	IN A	10.0.0.6
ns2	        IN A	10.0.0.7
;

Comentado:

@ IN SOA ns1.pinguim.com. hostmaster.pinguim.com. (

@ Indica a origem do domínio, e ao mesmo tempo, o ínicio da configuração.

IN é a abreviação de “Internet”

SOA 'Start of autority'

Instalação configuração Bind no Linux - Debian

Em sistemas linux exites diverças formas de instalar um pacote, para fins deste tutorial utilizaremos os repositorios da disbrituição.

Em um terminal digite como root:

# apt-get install bind9

Após a instalação, o bind já está em execução em sua máquina e configurado para responder como servidor DNS recursivo para rede local.

Para vefificar se o bind esta em execução digite o seguinte comando como root:

# ps auxwww | grep bind

bind 2918 0.0 3.4 42156 8780 ? Ssl May28 0:00 /usr/sbin/named -u bind

Para testar, edite o arquivo /etc/resolv.conf e altera a linha nameserver para nameserver 127.0.0.1

Voce pode utkilizar ferramentas como dig ou nslookup para realizar consultas DNS. A figura abaixo mosta a utilização do dig para realizar consultas recursivas.

Exemplo de consulta DNS ao site cade.com.br utilizando a ferramenta dig do linux.

Exemplo de Consulta recursiva utilizando a ferramenta wireshark

Teste em ambiente real

Teste-1

Teste realizado na rede local da empresa com aproximadamente 20 máquinas com acesso a internet.

Configurações de Hardware:
Pentium Dual Core 2.4 GHz
RAM 2 GB / HD 80 GB
Sistema Operacional: Windows 2008
Tempo em produção: 15 Dias (2 Semanas)
Conclusões: Ao final do teste foi constatado que o Bind rodando sobre a plataforma windows mostrou-se estavel e foi imperceptivel para o usuário final.

Teste-2

Teste realizado em rede com 4000 usuários com acesso a internet executando os mais variados serviços de rede.

Configurações de Hardware:
HP Server TC 2120
Pentium III Xeon
RAM 512 MB/40GB-SCSI
Sistema Operacional: Windows 2003
Tempo em produção: 7 Dias (1 Semana)
Conclusões: O teste decorreu sem problemas, o uso do servidor foi transparente para os usuários, não houve problemas ou travamentos no servidor. Foi notado um uso eledado da CPU/Memória nos horários de maior utilização da internet, o que não ocorre em servidores executando Linux.

Placa de Rede

ARTUR VIEIRA GOMES NETO

Última modificação: 2011/06/19 20:47