Introdução
Saudações, minha gente!
Me chamo Francisco e nesse primeiro post no Blog Seeds eu gostaria de falar de um problema que foi simplesmente resolvido. É sério! DNS resolveu um problema que você nem percebeu que existe! O blog é técnico mas a promessa é de marketing: Você lê, você entende o que é DNS, beleza?
Aproveita, pega um cafézinho e vem com o tio!
Um cara chamado DNS
Nos primórdios da telecomunicação, uma das únicas formas de se fazer uma ligação telefônica era através de um telefonista: Você ligava, solicitava o contato com quem desejasse falar e ela fazia toda a mágica. Você não fazia idéia do que acontecia por trás da linha, e mesmo assim, dentro de alguns momentos, você estaria se comunicando remotamente com uma pessoa.
O DNS poderia ser comparado à esse telefonista no contexto da Internet, porém com uma função mais específica: Apontar para o que você quer.
DNS é o cara que informa o endereço real do recurso que você quer utilizar, e sem ele, você estaria falando com o 64.90.48.7.
Imagine a seguinte situação: Você quer enviar um e-mail para mim!
Nunca tivemos outra interação e você quer criticar ou elogiar esse post. Você busca saber meu endereço de e-mail e tudo está resolvido!
Não há necessidade de descobrir o endereço do meu servidor de e-mails. O problema já foi resolvido através da estrutura de DNS por trás do nome “organicadigital.com”.
Não seria prático ter que decorar os endereços IP do Paypal para realizar um pagamento ou saber para qual servidor de e-mails uma mensagem deve ser encaminhada. Tudo isso tornaria a utilização da Internet algo inacessível para o grande público e esse seria um grande obstáculo no desenvolvimento e na expansão da rede.
Ilustrações em arquivos .txt: Obrigado Internet.
Sistemas de nome & Servidores de nomes
Sistemas de nomes surgiram com um objetivo único: Tornar a Internet utilizável para o grande público. Abstrair toda a complexidade por trás da rede frente ao usuário, e isso só foi possível através da definição dos chamados domain names (ou nomes de domínio, em português).
Para acessar um website ou enviar um e-mail, um usuário não deve se preocupar com detalhes específicos da rede.
Nomes de domínio são uma forma de identificar os recursos na rede, de forma que sejam utilizados por aplicações, protocolos de rede (e por você quando entra no Facebook).
RFC’s são as especificações das principais tecnologias associadas à Internet: TCP/IP e HTTP, e você pode obter qualquer uma digitando algumas linhas no teu terminal:
curl https://www.ietf.org/rfc/rfc1035.txt | less
Essa definição vem da própria RFC 1035, especificação técnica do pomposo Domain Name System, que descreve de forma técnica uma infraestrutura distribuída, dividida em diferentes níveis hierárquicos, e o respectivo software que deve ser implementado para garantir seu funcionamento.
A arquitetura do DNS, classificada como distribuída hierárquica, é composta por cliente e servidor, e sua comunicação ocorre de forma assíncrona no sentido cliente-servidor ou servidor-servidor.
Dentro dos servidores DNS, os autoritativos são responsáveis por manter registro das entradas dos domínios, enquanto os recursivos são responsáveis por responder às requisições do cliente.
Quando você configura o DNS da sua rede com o servidor DNS público do Google (8.8.8.8), você está dizendo que este é o seu servidor de nomes recursivo, e o papel dele na configuração da sua rede é responder às suas consultas de nome de domínio. Por exemplo, quando você acessa o GMail, o Github ou qualquer outra aplicação, ele retorna o IP correspondente ao recurso sendo acessado.
Quando o servidor DNS do Google não tem cacheada a resposta para essas consultas, ele verifica no servidor de DNS autoritativo acima do domínio em questão. No caso do Github, seria o servidor autoritativo dos domínios “.com”. O servidor retorna ao cliente o servidor de nomes autoritativo relativo ao domínio requisitado.
No caso do Github, o servidor DNS autoritativo do domínio é o awsdns-hostmaster.amazon.com, conforme o print de uma consulta dig pelo registro SOA (que será explicado mais além).
organica@organica-v5470:~$ dig +short github.com soa ns-1707.awsdns-21.co.uk. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400
A base ou raiz da infraestrutura é distribuída em 13 servidores denominados root servers, e sua função é garantir a integridade dos espaços de nomes.
As estruturas de dados definem o formato das consultas e respostas entre servidor e cliente e as regras do protocolo definem como a comunicação deve ocorrer.
Espaço de nomes
O espaço de nomes consiste em uma estrutura de árvore, onde a raíz é o nível hierárquico máximo e as folhas/nodos são os domínios.
Quando for utilizada no contexto, a palavra “abaixo” faz referência à um nível hierárquico menor.
Os chamados Top Level Domain são mantidos por diferentes organizações: A gestão dos Generic Top Domain Level Domains “.com” e “.net“ é feita pela Verisign, enquanto o “.org” é administrado pela Public Interest Registry (PIR).
Extensões de domínios características de países como Brasil e Espanha; o “.br” e “.es”; são chamados de Country Code Top Level Domain, e são administrados por organizações da mesma nacionalidade do domínio. No caso do “.br”, é o Comitê Gestor da Internet no Brasil (CGI) que coordena os procedimentos de registro e controle de nomes de domínios que estão abaixo do “.br”.
Isso significa que o CGI também é responsável pela gestão de todos os outros domínios abaixo do “.br”, como o “com.br” e o “.org.br”.
A composição de nomes de domínios dentro dos níveis hierárquicos do DNS é uma das principais características do protocolo, e isso permite a ocorrência de duas features que eu acho super interessantes:
- Cada domínio pode criar um espaço de nomes próprio;
- Cada domínio pode ser gerenciado de forma independente.
A independência no gerenciamento dos domínios permite que questões condizentes com o contexto de um país (legislação) sejam aplicadas à utilização de nomes de domínio.
Permite também que cada domínio seja responsável pelo seu próprio espaço de nomes, e que serviços que estejam vinculados ao domínio em questão sejam facilmente utilizados por aplicações e usuários. O melhor exemplo disso para mim são as extensões do domínio da Google para acessar as ferramentas do G Suite: mail.gooogle.com; drive.google.com; calendar.google.com.
Tipos de entradas
Uma entrada em um servidor DNS representa uma estrutura de dados em forma de dicionário (ou mapa) que tem um dos tipos permitidos e armazena uma chave e um valor.
A necessidade de tipos diferentes de entrada se dá em virtude dos diferentes formatos de consulta, dependendo de qual tipo de informação o cliente deseja saber em relação ao nome de domínio.
Uma lista de todos os tipos de entradas DNS é facilmente encontrada na Wikipedia, porém as principais são listadas a seguir.
Entrada A
Entrada que vincula um nome à um endereço IPv4. A famigerada "entrada A principal" de um domínio consiste em uma entrada A com o endereço do domínio apontando para o IP do servidor web. É através da utilização de entradas A que se faz a criação dos chamados subdomínios.
Para consultar o valor da entrada A de um domínio, digite no seu terminal:
organica@organica-v5470:~$ dig +short organicadigital.com a 64.90.48.7
Entrada AAAA
Tem a mesma função da entrada A, porém o valor da entrada deve ser um endereço IPv6 válido.
Para consultar uma entrada do tipo AAAA, prossiga no terminal com:
organica@organica-v5470:~$ dig +short google.com AAAA 2800:3f0:4001:814::200e
Entrada CNAME
As entradas canônicas servem para vincular um nome de domínio a outro nome (alias). Ultimamente, é esperado que o nome que foi configurado como valor seja uma entrada A ou o apontamento para uma. O valor da entrada não necessita pertencer ao mesmo domínio no qual a entrada foi criada. Por exemplo, consultando o valor da entrada CNAME mail.organicadigital.com com o dig:
organica@organica-v5470:~$ dig +short mail.google.com googlemail.l.google.com. 172.217.29.229
Quando executado o comando host, ele já retorna que mail.organicadigital.com é um alias para ghs.googlehosted.com e o IP da entrada ghs.googlehosted.com é 216.58.222.19.
Entrada TXT
Essa entrada serve como um registro de informações públicas sobre o domínio e é utilizada extensivamente para uma série de aplicações
- Confirmação de propriedade de domínio;
- Configuração de SPF;
- DKIM.
Entrada MX
Entrada que registra informações relacionadas aos servidores de e-mail de um domínio. Com quem o servidor do remetente deve falar para que o recipiente do domínio receba.
É comum encontrar configurações de e-mail no DNS que utilizem o conceito de prioridade, que serve para que existam servidores preferenciais de e-mail e servidores secundários.
Analisando o retorno do comando abaixo:
dig organicadigital.com MX
Podemos ver que a prioridade de cada entrada é definida antes do valor desta. Quanto menor o número, mais prioridade uma entrada tem em relação às outras. Desta forma, a entrada principal seria aspmx.l.google.com, enquanto as outras seriam utilizadas em ordem decrescente de prioridade, caso a principal tivesse indisponível.
No caso de entradas com a mesma prioridade, é utilizada a que tiver sido adicionada primeiro no DNS do domínio.
organica@organica-v5470:~$ dig +short organicadigital.com mx 10 aspmx2.googlemail.com. 1 aspmx.l.google.com. 5 alt2.aspmx.l.google.com. 10 aspmx3.googlemail.com. 5 alt1.aspmx.l.google.com.
Entrada SOA
A entrada do tipo SOA tem como objetivo apontar o servidor DNS autoritativo principal de um domínio, e definir alguns timeouts de validação de cache e propagação. A primeira função complementa a das entradas do tipo NS, que serão descritas na sequência.
No terminal:
organica@organica-v5470:~$ dig +short organicadigital.com soa ns1.digitalocean.com. hostmaster.organicadigital.com. 1487250323 10800 3600 604800 1800
Entrada NS
As entradas NS declaram os servidores autoritativos secundários. O DNS recorre às entradas NS para encontrar servidores autoritativos que respondam pelo domínio caso o principal esteja indisponível. É recomendável que existam no mínimo dois Nameservers autoritativos secundários declarados, além do principal definido no SOA.
Entrada PTR
Entrada utilizada para associar um nome à um endereço IP. É largamente utilizada para consultas de DNS reverso e sua utilização é altamente recomendável quando um domínio é utilizado para campanhas de e-mail marketing.
Uma entrada PTR contendo o nome do domínio aponta para o IP do servidor que irá efetuar o disparo, e dessa forma os recipientes dos e-mail tem como garantir que o IP tem relação com o domínio que envia os e-mails: Através de uma consulta reversa de DNS.
O que isso impacta nos negócios
A utilização de uma infraestrutura distribuída tem impacto direto no que se diz à agilidade: Criação e alteração de entradas demoram um tempo considerável para serem replicadas em toda a infraestrutura do DNS e isso tem um consequências diretas na Internet.
A única forma de abstrair boa parte da complexidade da Internet é através de nomes e a demora envolvida no processo de convergência de nomes pode deixar serviços críticos como e-mail e website indisponíveis por tempos inaceitáveis, e por isso uma compreensão completa do que se trata o DNS é necessário.
A configuração de nomes de domínios pode parecer intimidante quando não temos conhecimento da arquitetura do DNS, suas limitações e suas capacidades, e espero que esse artigo tenha ajuda você a esclarecer algumas dúvidas!
Se você tem interesse nas implicações de segurança que nomes de domínio impõem na Internet, vou deixar dois vídeos da DEFCON, uma convenção de hackers em Las Vegas, sobre alguns ataques utilizando conceitos apresentados nesse post. Os vídeos estão em inglês sem legendas mas o conteúdo é EXCELENTE!
Conclusão
Ufa! Você ainda está aqui?
Maravilha! Que qualquer mérito obtido na leitura deste texto seja uma martelada no aço que é a experiência profissional que nós da web acumulamos. O DNS está em tudo, é um dos fatores mais críticos no processo de desenvolvimento de sites e software, e uma compreensão básica é necessária para que tudo ocorra dentro do planejado e você não seja pego de surpresa!
- Já ficou até tarde resolvendo algum problema relacionado a DNS?
- O DNS já salvou seu dia?
- Esqueceu de criar as entradas usadas pelo SMTP/POP e deixou alguém sem e-mails?
Conte pra nós aqui nos comentários! Pois, acredite, essas coisas acontecem!