DNS - Domain Name System
Qui 16 Mar 2006 19:32 |
- Detalhes
- Categoria: Oceano Web
- Atualização: Quarta, 15 Abril 2009 11:49
- Autor: vovó Vicki
- Acessos: 13973
O acrônimo DNS vem de Domain Name Server (ou Service, ou System), ou seja, é o nome do Sistema de Nomes de Domínios, um dos maiores bancos de dados distribuídos do planeta. Apesar do seu porte gigantesco e de ser acionado bilhões de vezes todo dia, ele trabalha silenciosamente na retaguarda e passa praticamente despercebido para a maioria dos usuários da Internet. Mesmo sendo um ilustre desconhecido, é o DNS que dá sustentação e possibilita a comunicação entre as máquinas que compõem a grande rede.
A Internet
Simplificando ao máximo, a Internet é um conjunto de máquinas servidoras que podem se comunicar. Cada uma destas máquinas precisa ter uma identificação única, uma espécie de e-RG. Da mesma forma que no RG convencional, esta identificação é um nome associado a um número. O nome é usado pelas pessoas e o número, chamado de endereço IP (Internet Protocol), é usado pelos computadores. Para que os usuários e as máquinas possam se entender, é preciso entrar em cena um tradutor de nomes para números e de números para nomes: o DNS.
Toda vez que você quiser acessar uma página da Internet, enviar um e-mail ou fizer qualquer tipo de conexão e a dupla nome/IP não for conhecido, o DNS é acionado para fornecer o endereço IP da máquina para a qual você quer enviar ou da qual você quer receber os dados solicitados. Por exemplo, se você chama o endereço www.aesaweb.com.br e o IP deste domínio não estiver disponível (em cache), então o seu navegador aciona o DNS para obter o endereço IP 201.35.19.155. Para confirmar que a informação procede, tente chamar a página inicial da AESAweb com http://www.aesaweb.com.br e depois com http://201.35.19.155. Você vai constatar que o resultado é o mesmo, ou seja, uma das bilhões de máquinas que compõem a Internet foi localizada corretamente porque ela possui um nome único atrelado a um endereço IP também único.
Os domínios
Chama-se de domínio uma área da Internet que fornece uma série de serviços sob uma determinada identidade. Um domínio geralmente é chamado de site, ou seja, um sítio (área) que possui um proprietário. Na maioria das vezes os sítios são pequenos (seriam chácaras? ) e não precisam de uma máquina servidora só para eles. Por este motivo é possível "lotear" uma máquina servidora e associar seu endereço IP a diversos domínios. Por exemplo, a máquina 201.35.19.155 hospeda www.aesaweb.com.br, www.numaboa.com.br, www.numaboa.org e www.aesa.com.br. Com isto, os números vão ficando cada vez mais estratosféricos. Se a Internet é composta por bilhões de servidores integrados e a maioria hospeda mais de um domínio, atingimos com facilidade a casa dos trilhões (ou quatrilhões, sabe-se lá...) de domínios.
É claro que num universo tão grande de domínios existe a necessidade de órgãos centralizadores que controlem os nomes para que não haja nenhum repetido. No Brasil, esta tarefa cabe à FAPESP (http://registro.br) onde, por módicos R$2.50/mês (ou R$30.00/ano), você pode manter um domínio em seu nome. Também é no registro.br que se informa qual IP irá corresponder a determinado domínio. Mas não se iluda, não são as máquinas da FAPESP que armazenam os dados de todos os domínios/IP do Brasil, assim como não existe apenas um computador que guarda todos os dados do mundo inteiro - o banco de dados que guarda estas informações é um banco de dados distribuído. Isto significa que existem milhões de computadores trabalhando em conjunto apenas para fazer o serviço de tradução e que a FAPESP se encarrega de informar determinadas máquinas quando endereços IP referentes a domínios sob sua jurisdição forem criados ou alterados.
Níveis dos domínios
A grande maioria dos domínios possui 3 ou 4 níveis. A título de exemplo, vamos considerar o domínio www.numaboa.com.br e seu irmão www.numaboa.org. Tecnicamente, estes domínios deveriam ser www.numaboa.com.br. e www.numaboa.org., com um ponto no final. Este ponto no final, seguido por uma string vazia, corresponde ao domínio raiz. O domínio raiz contém todos os domínios de primeiro nível, os de primeiro nível contém todos os domínios de segundo nível e assim por diante.
A porção .br é chamada de primeiro nível e indica o país, o próximo nível indica o tipo do domínio (.org para organização, .com para comercial, .edu para instituições de ensino, .net para empresas de telecomunicação e por aí afora). O único país que não se identifica no primeiro nível é os EUA. Todos os outros complementam a informação com a sigla do país (.br para o Brasil, .de para a Alemanha, .au para a Austrália e assim por diante).
O terceiro nível de um domínio é o nome do próprio. Nos exemplos acima, apesar de dois terem o mesmo nome (numaboa), os domínios são únicos porque têm um tipo diferente: no primeiro nível, .com.br está no ramo brasileiro e o .org está no ramo EUA; no segundo nível, .com.br está no ramo comercial e o .org está no ramo organização. Por falar nisto, o numaboa.com.br é o domínio comercial mais fajuto da Internet porque de comércio não tem nada. Escolhi este segundo nível porque na época (e até hoje) poucos sabiam de onde vinha esta denominação - só sabiam que site da Internet é .com e pronto
O quarto nível é o nome da máquina, também conhecido como host name (nome do hospedeiro). Já sei, você deve estar achando que a vovó aqui pirou - imagine só, então a grande maioria das máquinas da Internet têm o mesmo nome, www? O pior é que é isto mesmo; se não for o nome, então é o apelido da máquina. Por exemplo, minha máquina servidora web se chama ns1, tem vários apelidos e, adivinhe só, um deles é www e foi tornado público (entrou para o banco de dados do DNS). Por este motivo, quando você chama www.numaboa.com.br ou www.numaboa.org, os dois endereços são traduzidos pelo DNS para 201.35.19.155 e você consegue acessar os sítios correspondentes. Veja bem, o DNS fornece apenas o endereço IP da máquina servidora; depois disso é a máquina servidora que identifica os domínios hospedados neste IP, dirige as solicitações para a área de hospedagem correta e fornece os dados solicitados.
A título de curiosidade, saiba que podem existir até 127 níveis diferentes. Apesar desta abundância toda, nunca encontrei mais do que quatro ou cinco níveis numa identificação de domínio, também chamada de URL. Pudera, decorar 127 pedaços de um nome é coisa pra maluco, né não?!
Um sistema distribuído
Já pensou se o banco de dados do DNS estivesse numa máquina só? Com certeza a Internet não seria o que é. Bastava a máquina ratear (e isto não é nada difícil de acontecer) para que toda a Internet ficasse paralizada. E isto não é tudo. Se o banco de dados fosse pro espaço, seria praticamente impossível recuperar os dados e, caso houvesse um backup gigantesco, poderíamos esperar várias semanas até que tudo estivesse no ar novamente... um cenário impensável.
Por estes e por outros motivos, o sistema DNS é um sistema distribuído. Milhões de máquinas contém informações e fazem traduções. Além disso, a administração desta imensa base de dados fica na mão de outros tantos milhões de pessoas - cada um trabalha um pouquinho e, todos juntos, um montão. É o sistema mais socialista que conheço Eu, por exemplo, administro dois sistemas DNS redundantes (um é a cópia do outro) com autoridade sobre uma meia dúzia de domínios. A sensação legal é que, apesar do pouco trabalho, estas informações estão disponíveis para o mundo todo e colocam meus sites no circuito da Internet. A responsabilidade (que nem todos administradores têm), é configurar o sistema adequadamente para não criar problemas como consultas excessivas ou sem resposta (veja adiante algumas das lambanças que sobrecarregam o DNS).
Como funciona
Servidores de Nomes só realizam duas tarefas:
- Aceitam solicitações de programas para transformar nomes de domínios em endereços IP.
- Aceitam solicitações de outros servidores de nomes para converter nomes de domínios em endereços IP.
Quando recebe uma solicitação, um servidor de nomes pode fazer quatro coisas:
- Responder a solicitação com um endereço IP porque ele já conhece o endereço IP do domínio.
- Fazer contato com outro servidor de nomes e tentar encontrar o endereço IP para o nome solicitado. O servidor de nomes geralmente precisa repetir este procedimento várias vezes até conseguir a informação.
- Responder com um endereço IP de um outro servidor de nomes que tenha mais informações do que ele.
- Retornar uma mensagem de erro porque o nome do domínio é inválido ou não existe.
Para ganhar tempo, o servidor de nomes mantém domínios e IPs em cache. Desta forma, se ele receber um solicitação repetida e a informação ainda estiver em cache, ele pode responder imediatamente. Caso ele não tenha o registro solicitado e nem a informação guardada em cache, então ele precisa iniciar o processo do zero, ou seja, faz contato com os chamados servidores de nomes raiz. Todo servidor de nomes possui uma lista de servidores raiz. A Internet possui apenas 13 por uma questão técnica relacionada ao protocolo usado - pacotes UDP podem carregar apenas 512 bytes, o que permitiria transmitir até 16 endereços IP de 32 bytes. Como 32 bytes estão ocupados com outras informações, haveria a possibilidade de "empacotar" até 15 endereços de servidores raiz, mas, para deixar uma margem de segurança, optou-se por 13:
- (originalmente NS.INTERNIC.NET)
. 518400 IN NS A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET. 3600000 IN A 198.41.0.4 - (originalmente NS1.ISI.EDU)
. 518400 IN NS B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET. 3600000 IN A 128.9.0.107 - (originalmente C.PSI.NET)
. 518400 IN NS C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET. 3600000 IN A 192.33.4.12 - (originalmente TERP.UMD.EDU)
. 518400 IN NS D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET. 3600000 IN A 128.8.10.90 - (originalmente NS.NASA.GOV)
. 518400 IN NS E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET. 3600000 IN A 192.203.230.10 - (originalmente NS.ISC.ORG)
. 518400 IN NS F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET. 3600000 IN A 192.5.5.241 - (originalmente NS.NIC.DDN.MIL)
. 518400 IN NS G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET. 3600000 IN A 192.112.36.4 - (originalmente AOS.ARL.ARMY.MIL)
. 518400 IN NS H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET. 3600000 IN A 128.63.2.53 - (originalmente NIC.NORDU.NET)
. 3600000 IN NS I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET. 3600000 IN A 192.36.148.17 - (temporariamente hospedado na NSI (InterNIC)
. 518400 IN NS J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET. 3600000 IN A 198.41.0.10 - (hospedado em LINX, operado por RIPE NCC)
. 518400 IN NS K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET. 3600000 IN A 193.0.14.129 - (temporariamente hospedado no ISI (IANA)
. 518400 IN NS L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET. 3600000 IN A 198.32.64.12 - (hospedado no Japão, operado por WIDE)
. 518400 IN NS M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET. 3600000 IN A 202.12.27.33
Uma procura completa
Digamos que você esteja usando seu navegador (ou qualquer outro aplicativo) que precisa de um endereço IP numa máquina com sistema operacional Linux e que possua um servidor de nomes próprio. As etapas para encontrar um IP, por exemplo, do domínio www.google.com.br, são:
- O navegador procura no seu cache interno se por acaso este nome já foi resolvido.
- Se não, o aplicativo procura no arquivo /etc/resolv.conf um IP que corresponda a um servidor de nomes. Digamos que tenha encontrado o endereço 212.3.1.1
- O servidor de nomes (ns) 212.3.1.1 checa seu cache. Se não encontrar nada, a pesquisa continua.
- O ns 212.3.1.1 determina se o domínio procurado é local ou não. Se for local, o ns é o responsável pela tradução e a procura termina.
- Se não, o ns 212.3.1.1 pergunta a um servidor raiz onde encontrar o primeiro nível do domínio (.br) e recebe, por exemplo, a resposta a.dns.br com o endereço IP 200.160.0.10.
- O processo continua em cadeia. O ns 201.3.1.1 pergunta ao servidor de nomes a.dns.br quem é o responsável por .com.br e assim por diante até encontrar uma resposta autoritativa para o endereço completo (www.google.com.br).
- Depois de receber a resposta, o ns 201.3.1.1 registra o resultado no seu cache para não ter todo este trabalhão novamente (e também para não dar trabalho a uma porção de outros servidores de nomes).
O software que comanda a festa
O software mais conhecido e utilizado para realizar tarefas de tradução é o BIND - Berkeley Internet Name Domain. É um software gratuito e de código aberto, muito eficiente, fácil de instalar e de configurar. Há anos o pessoal do projeto trabalha na atualização e no controle de falhas de segurança. É isto mesmo, versões mais antigas do BIND têm falhas de segurança que vão de leves até severas, como a vulnerabilidade a ataques DDoS (Distributed Denial of Service). Fica aqui um alerta: se você instalou o BIND, dê uma olhada nos avisos da ISC e cuide de fazer um upgrade se a versão do seu servidor de nomes estiver vulnerável, colocando em risco todo o seu sistema.
A impressão que se tem é que a última versão sempre está livre de bugs... mas é só impressão. Sempre aparece algum engraçadinho que descobre uma brecha. Por este motivo, uma das precauções adicionais ao instalar um servidor de nomes é instalá-lo numa jaula de segurança (assunto de um outro texto na seção o caminho das pedras). Caso algum cracker consiga derrubar o BIND, pelo menos ele fica preso na "jaula de diretórios" do servidor de nomes e, com uma boa probabilidade, não será capaz de sequestrar a sua máquina
As lambanças
Um serviço de DNS mal configurado sobrecarrega todo o sistema. Estudos recentes mostram que (pasmem!) 98% das solicitações feitas aos servidores raiz são desnecessárias. Os maiores vilões são:
- Um dos abusos mais sérios vem de sistemas Windows da Microsoft que insistem em fazer atualizações dinâmicas de DNS. Muitas organizações e redes domésticas usam o assim chamado espaço de endereços privado. O servidor de nomes local, com frequência, não é autoritativo para a zona in-addr.arpa apropriada e as falsas atualizações dinâmicas, não obtendo resposta, remetem uma enxurrada de solicitações para a Internet.
- Filtros de pacotes e firewalls mal configurados: firewalls que permitem a saída de solicitações ao DNS mas que não permitem a entrada das respostas.
Existem outras situações que contribuem para criar lixo no DNS. Se tiver curiosidade (e quiser saber se o seu sistema é um dos vilões), leia Health of the Domain Name System no site Bind9.net.