sábado, 19 de novembro de 2016

Tutorial DNS - Parte 3 - Resource records

A segunda parte desta série apresentou alguns detalhes mais técnicos sobre a mecânica do serviço de DNS. Para completar vamos entender os tipos de registros DNS e suas aplicações.

Resourse records

O serviço de DNS é composto por um conjunto de tipos de registros chamados "Resourse records". Cada um possui um código numérico que é transmitido no cabeçalho do pacote DNS. Um usuário ou um recursivo fazendo uma pesquisa pode querer saber vários tipos de informações diferentes sobre um host ou uma zona, como por exemplo seu endereço IPv6, IPv4, ou quem é o autoritativo daquela zona.
Outro exemplo didático são os servidores de email. Quando enviamos um email para ´"fulano@blogger.com" o nome do endereço de email sugere um usuário "fulano" dentro de um domínio. Você poderia pensar, a princípio, que a mensagem seria enviada ao servidor "blogger.com" ou algo do tipo, mas na grande maioria das vezes não é nem de longe assim. É necessário perguntar para o dono(servidor autoritativo) da zona "blogger.com" quem é o "Mail exchanger"(servidor de email) daquela zona. Este "Mail exchanger" quase sempre é um servidor completamente fora daquela zona, que pode ser hospedado em outro grupo de serviços na Internet.
Vejamos os principais tipos de registros DNS:

SOA - ID 6

SOA significa "start of authority". É o cabeçalho principal de uma zona. Nele é informado o servidor autoritativo primário da zona, email de contato do administrador e informações de tempo de vida aplicável nas pesquisas.

A e AAAA - IDs 1 e 28 - Endereço IPv4 e IPv6

Estes são os registros principais do sistema. Um registro tipo A informa o(s) endereço(s) IPv4 do host, da mesma maneira o AAAA(quad A) para IPv6. O DNS é sempre comparado à um catálogo telefônico, você pesquisa por um nome e ele informa seu endereço numérico. Este procedimento é feito exatamente usando os registros tipo A e AAAA. Veja o exemplo abaixo:
Zona: empresa.com.br.
www A 192.0.2.50     #End. IPv4 do host "www.empresa.com.br"
www AAAA 2001:db8:faca::50   #End. IPv6 de "www.empresa.com.br"
mail A 192.0.2.82     #End. IPv4 de "mail.empresa.com.br"
mail AAAA 2001:db8:faca::82  #End. IPv6 de"mail.empresa.com.br"
smtp CNAME mail.empresa.com.br. #"smtp.empresa.com.br" é um apelido do host "mail.empresa.com.br"

CANAME - ID 5 - Alias, apelido, alcunha

É possível dar apelidos à hosts no DNS. Por exemplo posso dizer que "smtp.exemplo.com" é um apelido para o host "email.exemplo.com.br" sem problema algum. O primeiro é apenas um alias para um outro host que não necessariamente está na mesma zona DNS. Você diz qual o apelido e à quem ele pertence indicando o seu FQDN. Veja o exemplo do Gmail:
O host "www.gmail.com" na verdade é um alias para "googlemail.l.google.com". Repare que são domínios diferentes.

MX - ID 15 - Mail exchanger ou servidor de email

Um outro registro importante é o MX, que indica os servidores de email que respondem por determinada zona. Naturalmente isto dá uma camada de flexibilidade na estrutura DNS, o seu servidor de email não precisa nem mesmo ser um host na sua estrutura, pode ser totalmente terceirizado. Por exemplo quando enviamos um email para "fulano@globo.com", para que a mensagem seja entregue, o remetente pergunta quem é o servidor de email responsável pelo domínio "globo.com", que na verdade são servidores da locaweb. Veja:

NS - ID 2 - Name Server

Este registro indica quem é o NS(Servidor de nomes) responsável pela zona. Quando você registra um domínio ".br", por exemplo, e indica os seus servidores DNS autoritativos, o que acontece é que no arquivo da zona ".br" os seus servidores são registrados como NS da sua zona. Veja mais um teste com o nslookup perguntando à um servidor da zona ".br" sobre o NS de "planalto.gov.br":
Estes são os "donos" da zona "planalto.gov.br", e seus respectivos endereços IP são dados como GLUE records.

Você pode ver uma lista detalhada dos resourse records no artigo da Wikipedia.

A ferramenta NSlookup

Como vê nas imagens acima, você pode sempre fazer os testes usando o comando NSLOOKUP e especificando o tipo de record que deseja, com a seguinte sintaxe:

nslookup -type="Tipo de registro" "nome do host/Domínio" [Servidor DNS]

Repare que o ultimo parâmetro é opcional. Se você não especificar qual servidor DNS vai perguntar será usado o indicado na configuração do computador.
Exemplo, vamos perguntar para o servidor autoritativo da zona ".COM.BR" quem são os autoritativos da sub-zona "GLOBO.COM.BR":
 
 Ele me devolve os nomes dos servidores e seus respectivos endereços IP(Glue Records).
Em outro exemplo pergunto ao servidor do OpenDNS qual é o endereço IPv6 de "www.facebook.com.br".

Novamente temos um caso de alias. O nome solicitado é um apelido do host de FQDN "star-mini.c10r.facebook.com".
O NSLOOKUP é nativo em Windows e Linux. Existem também os comandos "host" e "dig", nativos no pinguim.

Transição para o IPv6 - Happy eyeballs e DNS64

Como vivemos numa época de transição para o novo protocolo algumas coisas devem ser feitas para amenizar o choque. Uma delas é o algorítimo "Happy eyeballs". Quando um cliente solicita o endereço IP de um host e recebe ambos endereços(IPv4 e IPv6), e este host também tiver conectividade IPv4 e IPv6(dual stack), o algorítimo vai determinar qual conexão é mais vantajosa, para o cliente obter uma melhor experiência.
Por outro lado temos o DNS64, que é um serviço para usuários exclusivos de IPv6 se comunicarem com hosts IPv4, usado em conjunto com o NAT64. Veja este vídeo. Basicamente o que ele faz é gerar endereços IPv6 no formato do NAT64(prefixo 64:ff9b::/96) para hosts que tenham apenas endereços IPv4. A segunda parte do processo é feita pelo gateway NAT64, deixando tudo transparente para os clientes IPv6. Esta técnica já é amplamente usada em operadoras móveis fora do Brasil, onde a escassez de IPv4 é bem maior. O Google também oferece um serviço de DNS64 público, veja aqui.


Faltou falar sobre registros PTR para resoluções reversas. Esta parte merece um outro texto mais completo apenas sobre DNS reverso. Fica para uma outra oportunidade.

2 comentários: