====== DNS - Um serviço Indispensável ======
{{:projeto2:logo-pii.gif|}}
----
[[Rascunho]] [[links]] [[arquivos]]
----
> ** Proposta de Projeto **
>>{{:projeto2:dns_um_servico_indispensavel.pdf|}}
----
----
> ** Artigo **
>>{{:projeto2:artigo-dns_um_servico_indispensavel.pdf|}}
----
----
> ** Seminário Final **
>>{{:projeto2:seminarios_final.odp|}}
----
====== 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.
{{:projeto2:servidor_raiz.png|}}
Figura 1 - Estrutura hierárquica
==== Root Server ====
{{:projeto2:root-server.jpg?650x450|}}
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.
[[http://www.youtube.com/watch?v=AdOmiewp2kw&feature=player_embedded|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.
{{:projeto2:dns.gif|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 . "
; 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á:
{{:projeto2:install_1.png|}}
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:
{{:projeto2:install_7.png|}}
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.
{{:projeto2:install_6.png|}}
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.
{{:projeto2:install_3.png|}}
Para testar o bind podemos utilizar a ferramenta nslookup disponivel no windows, abra um terminal de digite os comando como mostrado na figura abaixo:
{{:projeto2:install_8.png|}}
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.
{{:projeto2:install_9.png|}}
Exemplo de consulta DNS ao site cade.com.br utilizando a ferramenta dig do linux.
=== Exemplo de Consulta recursiva utilizando a ferramenta wireshark ===
{{:projeto2:captura.png|}}
==== 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.
{{:projeto2:cacti_dns-eth0.png|Placa de Rede}}
//[[ rutrars@gmail.com|ARTUR VIEIRA GOMES NETO ]]//
{{:projeto2:cc-by-nc-sa.png|}}