====== 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|}}