segunda-feira, 24 de setembro de 2012

DNS - (Domain Name System)

Bom dia a todos,


     Hoje vou falar um pouco sobre o DNS - Domain Name System ou Sistema de Nomes e Domínios e exemplificar como isso tudo funciona, de uma forma bem simples é claro, pois este é um assunto bem complexo em que envolvem diversos processos e empresas.
      Gostaria também de salientar que escrevi este artigo de acordo com conhecimentos adquiridos através de pesquisas pessoais na internet e cursos realizados em grupos como GCC-SD (onde há professores e profissionais certificados em sistemas Linux), Campus Party (que é considerado o maior evento de inovação tecnológica, Internet e entretenimento eletrônico em rede do mundo.) e NIC.br (Núcleo de Informação e Coordenação do Ponto BR) parte do que está descrito abaixo são cópias das informações obtidas da internet e são mencionados nas fontes no final de artigo, pois talvez eu não tenha palavras nem exemplos tão bons quanto os que criaram os textos originais.

Bom vamos lá.



Quando você acessa um site da sua casa exemplo: http://www.uol.com.br





























1 - O seu navegador faz a solicitação para o DNS que está cadastrado no seu pc, que foi definido manualmente ou obtido por um servidor DHCP ou roteador ou pelo seu ISP - (Internet Service Provider) Provedor de Serviços de Internet.


























2 - Caso você tenha um servidor DHCP ou um roteador em sua casa ele irá tentar resolver o nome do site http://www.uol.com.br em sua rede local, como este não estará em sua rede por tratar-se de um endereço externo ele transferirá a solicitação para outro nível.






















3 - No meu caso em minha casa utilizo um link Telefônica (VIVO) para acesso a internet (confesso que eu particularmente preferia um link NET mais não chega até aqui em casa rsrs..) bom voltando ao assunto, a solicitação que eu faço para acessar o site UOL chega ao meu roteador o qual transfere para o DNS da GOOGLE, que são 8.8.8.8 e 8.8.4.4 o servidor dns google tem uma tabela que consulta os servidores Dns Raiz, que por sua vez consulta os servidores TLD's (Top Levels Domains) que em seguida consulta um servidor Dns Autoritativo, o qual o endereço da uol está referenciado a alguns números de IP's e com um simples NSLOOKUP eu visualizo os 02 ips deste site, embora eu acredito que hajam mais de dois em um processo inverso este retorna com as informações de ip para o meu navegador em seguida meu navegador através do número de ip da uol acessa o site, tudo isso é claro em frações de segundo.



















  Bom isso é basicamente como funciona o DNS porém agora vou detalha-lo um pouco mais com todas as descrições abaixo e um vídeo retirado do Kretcheu Video Blog.











História
   
     O sistema de distribuição de nomes de domínio foi introduzido em 1984, e com ele, os nomes de hosts residentes em um banco de dados e pode ser distribuído entre servidores múltiplos, diminuindo assim a carga em qualquer servidor que provê administração no sistema de nomeação de domínios. Ele baseia-se em nomes hierárquicos e permite a inscrição de vários dados digitados além do nome do host e seu IP. Em virtude do banco de dados de DNS ser distribuído, seu tamanho é ilimitado e o desempenho não degrada tanto quando se adiciona mais servidores nele. Este tipo de servidor usa como porta padrão a 53. A implementação do DNS-Berkeley, foi desenvolvido originalmente para o sistema operacional BSD UNIX 4.3. A implementação do Servidor de DNS Microsoft se tornou parte do sistema operacional Windows NT na versão Server 4.0. O DNS passou a ser o serviço de resolução de nomes padrão a partir do Windows 2000 Server como a maioria das implementações de DNS teve suas raízes nas RFCs 882 e 883, e foi atualizado nas RFCs 1034 e 1035.






Modo de Funcionamento

      Os servidores DNS são distribuídos de forma hierárquica entre vários servidores por todo o mundo, de forma que não concentre todo o processo em um único servidor, o que sobrecarregaria o mesmo, tornaria o processo mais lento e mais sujeito a falhas. Os servidores DNS dividem-se em três classes:
  • Servidores de nomes raiz: Onde há 13 servidores de nomes raiz no mundo, responsáveis por passar uma lista de servidores TLD correspondentes ao endereço IP desejado (Nota-se que ao lado do nome Nic, São Paulo não há nenhuma letra pois o NIC NÃO trata-se de um servidor de nomes raiz). 

Foi convencionado que cada servidor raiz seria chamado por uma letra do alfabeto (Servidor A, Servidor 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 (baixa latência). Bem, então na verdade existem treze servidores raiz principais e dezenas de cópias espalhadas pelo mundo. Veja na imagem abaixo a plotagem dos servidores raizes em funcionamento no mundo.




















Também há uma tabela retirada da IANA - Internet Assigment Numbers Authority com as empresas responsáveis os ips e hostnames de cada uma delas.


Hostname IP Addresses Manager
a.root-servers.net 198.41.0.4, 2001:503:BA3E::2:30 VeriSign, Inc.
b.root-servers.net 192.228.79.201 University of Southern California (ISI)
c.root-servers.net 192.33.4.12 Cogent Communications
d.root-servers.net 128.8.10.90, 2001:500:2D::D University of Maryland
e.root-servers.net 192.203.230.10 NASA (Ames Research Center)
f.root-servers.net 192.5.5.241, 2001:500:2f::f Internet Systems Consortium, Inc.
g.root-servers.net 192.112.36.4 US Department of Defence (NIC)
h.root-servers.net 128.63.2.53, 2001:500:1::803f:235 US Army (Research Lab)
i.root-servers.net 192.36.148.17, 2001:7fe::53 Netnod
j.root-servers.net 192.58.128.30, 2001:503:c27::2:30 VeriSign, Inc.
k.root-servers.net 193.0.14.129, 2001:7fd::1 RIPE NCC
l.root-servers.net 199.7.83.42, 2001:500:3::42 ICANN
m.root-servers.net 202.12.27.33, 2001:dc3::35 WIDE Project

 E o link root-servers da página dos servidores raiz na internet onde exibe em um mapa do google completo detalhando onde fica exatamente os servidores e suas cópias espalhadas pelo mundo.

Em 02 de Março de 1999 foi realizado uma Convenção em Singapura onde ICANN e mais 15 participantes discutiam sobre Servidores de domínios raiz, abaixo link de apresentação da reunião nesta data.
https://www.box.com/files/0/f/0/1/f_3307033266


  • Servidores TLD (Top Level Domain - "Servidores de nomes de domínio de alto nível"): Neles há uma tabela que em si é muito pequena, possui apenas uma entrada para cada Top Level Domain existente. Os Top Level Domains são de dois tipos: gTLDs (Generic Top Level Domains – domínios genéricos usados no mundo todo) e ccTLDs (Country Code Top Level Domains – extensões de domínios administrados pelos países). Por exemplo: todos os domínios terminados em .com serão respondidos pelos servidores da VeriSign, os domínios .br serão respondidos pelos servidores do Registro.br e assim sucessivamente. Cada gTLD ou ccTLD tem apenas uma entrada neste banco de dados. Exemplo de Servidores ccTLD (Country Code Top Level Domain): São Domínios como  .uk, .fr, .jp, .de, .br  e outros. Exemplo de Servidores gTLD (Generic Top Level Domain): São Domínios como  .org, .net, .info, .xxx, .int e outros.











Servidores de nomes com autoridade ou Autoritativos:  O autoritativo é o servidor que está autorizado a responder por um domínio. A autoridade para que um servidor de DNS (autoritativo) responda pelo domínio é dada pelos registros de domínios, oficiais, de uma determinada região do mundo. No nosso caso, Brasil, quem fornece a autoridade para que um ou mais servidores autoritativos respondam por um domínio é o Registro.br a autoridade do Registro.br é reconhecida pelos servidores root, pois o Registro.br é um NIR (National Internet Register) responsável pelo Brasil e autorizado pelo LACNIC (Latin American and Caribbean Internet Addresses Registry), que é um dos cinco RIRs (Regional Internet Register), do mundo. O Registro.br exige, no mínimo, dois autoritativos para repassar a autoridade. O Registro.br não faz nenhuma exigência em relação aos recursivos, em outras palavras, nem dá bola para eles. Por ser o autoritativo autorizado pelo Registro.br, a responder por um domínio, ele é um servidor que deve ficar disponível para qualquer consulta feita na Internet. Ou seja, ele é um servidor aberto, sob o ponto de vista de consultas aos domínios sob sua jurisdição. Aqui mora o perigo! Se o servidor autoritativo não estiver muito bem preparado e, não usar o DNSSEC, sua vulnerabilidade passa a ser enorme! Ele está suscetível à chamada poluição de DNS (comprometimento, envenenamento), segundo os comprovados argumentos de Dan Kaminsky. Mas felizmente a era pós-Kaminsky trouxe melhoras significativas nos sistemas que implementam o autoritativo, principal alvo de ataques. Se você possui poucos dominios, não se meta a perder tempo em estabelecer um servidor autoritativo. Use o serviços de empresas especializadas, garantindo algumas premissas básicas: (a) possuir pelo menos 2 autoritativos em redes diferentes e, preferencialmente, possuir o(s) servidor(es) autoritativo(s) principais, escondido(s), (b) implemente o DNSSEC, (c) possua mecanismos de criptografia para o tráfego relativo às transferência de zonas e, (d) seja de fácil utilização. Achar a empresa que forneça os serviços com tais características é uma tarefa razoavelmente complicada. Depois de achar, tudo fica bem melhor. Contudo todo cuidado é pouco.

Abaixo um documento do Registro.br sobre DNS e DNSSEC.
https://www.box.com/s/t77spc391e6jdyr51w4k

       Há Também os servidores DNS Local que pode estar contido na rede local no caso da sua empresa ou em cada ISP (internet service provider - provedor de serviços de internet). Este não integra a hierarquia de servidores DNS, apenas faz o repasse do nome de hospedeiro e recebe o endereço IP correspondente dos servidores que integram a hierarquia. 
        No entanto quando o usuário faz uma requisição a um site aos grandes provedores de acesso e empresas de telecomunicações estes arquivam em seus caches (memória temporária) a resposta correspondente a tal solicitação e também a tabela dos servidores raiz de forma que quando a mesma requisição é feita novamente ele dará a resposta imediatamente, não necessitando fazer toda a procura novamente. Essa informação fica armazenada por um certo período de tempo, geralmente 2 dias, até ser atualizada novamente em uma outra requisição. Portanto, a cada e-mail enviado ou site visitado os servidores raiz não são obrigatoriamente consultados, já que estes só são consultados quando sua tabela é alterada, ou quando um novo top level domain é criado. Quem realmente processa o maior volume de queries (requisições) para resolução de nomes são os servidores dos TLDs (Top Level Domains).


     Abaixo exemplo de consulta ao site Amazon.com e supondo que o servidor local ou ISP ainda não tenha a informação de onde encontra-se o site.


  1. Para que um host acesse uma URL qualquer ("www.amazon.com", por exemplo) na internet, primeiramente ele envia uma mensagem de requisição para o servidor de nomes local. 
  2. O servidor local envia uma consulta ao DNS raiz, o qual percebe o sufixo '.com' e responde uma lista de endereços IP para o DNS local contendo servidores TLD que são reponsáveis pelo '.com'. 
  3. Em seguida, o DNS local faz requisição para um desses servidores TLD, o qual percebe o sufixo 'amazon.com' e envia ao DNS local o endereço IP do servidor DNS com autoridade para a Amazon. 
  4. Finalmente, o DNS local consulta o servidor com autoridade e esse responde com o endereço do hospedeiro 'www.amazon.com'. Assim, o DNS local responde ao hospedeiro o IP do nome solicitado.
     A partir do processo relatado acima, vemos que há consultas recursivas e iterativas. Entre o hospedeiro e o DNS local, a consulta é recursiva, uma vez que o hospedeiro pede que o DNS local obtenha o mapeamento em seu nome. Enquanto que as outras três consultas (DNS local com DNS raiz, TLD e autoridade) são iterativas, já que as respostas são retornadas diretamente ao DNS local. Em teoria, qualquer consulta DNS pode ser iterativa ou recursiva, porém, na prática, as consultas geralmente são feitas conforme o padrão exposto acima. 






        Por fim gostaria de dizer que relembrei diversos conceitos sobre DNS's e também aprendi muita coisa nas pesquisas em que realizei para escrever este artigo.






Fontes

GCC-SD (Grupo de Compartilhamento do Conhecimento Santos Dumont)
http://www.gccsd.com.br/


ROOT SERVERS.ORG
http://root-servers.org/


Registro.Br
http://registro.br/


IANA - Internet Assigment Numbers Authority
http://www.iana.org/domains/root/servers


ICANN - Internet Corporation for Assigned Names and Numbers
http://www.icann.org/pt/about/participate/what


Wikipédia
http://pt.wikipedia.org/wiki/Domain_Name_System


WikiUniversidade
http://pt.wikiversity.org/wiki/Introdu%C3%A7%C3%A3o_%C3%A0s_Redes_de_Computadores/DNS


Artigo de Graça Bressen (Doutorado - USP - Eng. Elétrica e especializações em Redes)
http://www.larc.usp.br/pt-br/profile/graca-bressan
http://dc380.4shared.com/doc/OdJ9XEwI/preview.html


Artigo de Luiz Braga Filho (Mestrado em Teoria da Computação e MBA em Gestão de Projetos)
http://br.linkedin.com/pub/luiz-juli%C3%A3o-braga-filho/24/593/74b
http://juliaobraga.wordpress.com/tag/dns/


Artigo de Ricardo Vaz Monteiro (ICANN Fellow e autor dos livros "Escolha seu.com" e "Google Adwords: a arte da guerra)
http://webinsider.uol.com.br/2007/10/13/o-que-e-dns-e-dnssec-bem-explicadinho/