O protocolo DNS

  1. Domínios
  2. Como o DNS funciona?
  3. Arquivos de zona
    1. NS Records
    2. A e AAAA Records
    3. CNAME Records
    4. MX Records
    5. CAA Records
  4. nslookup

DNS (Domain Name System / Sistema de Nome de Domínio) é um protocolo que resolve nomes de domínios para endereços IPs. Sem eles, precisaríamos digitar os endereços IPs dos sites que visitamos (como 198.102.200.15), ao invés de digitar o domínio deles na barra de endereço do navegador (como exemplo.com). Além disso, todo site precisaria ter um IP dedicado, ao invés de um IP compartilhado, que é a situação mais comum.

Domínios

Antes de entender como o DNS funciona, você precisa entender conceitos que estão diretamente relacionados a um domínio:

Top level domain (TLD)
É a parte que fica mais à direita do domínio. TLDs comuns são com, net, org e edu.
Second Level Domain (SLD)
São domínios que estão diretamente subordinados ao TLD. Exemplo: em um domínio example.com, com é um TLD e example é um SLD.
Subdomínios
O DNS funciona como uma hierarquia. Assim, domínios podem ter muitos domínios que estão subordinados hierarquicamente a eles. Subdomínios são todos os domínios que são subordinados a outro domínio maior. Nenhum TLD é um subdomínio, porque eles não são subordinados a nenhum domínio. Porém, todo SLD é um subdomínio, porque eles são subordinados a um TLD. Da mesma forma, ao mesmo tempo que todo SLD é subordinado a um TLD, um SLD pode ter subdomínios subordinados a ele.
Hosts
Foram criados para definir serviços que podem ser acessíveis por meio de um domínio. O host mais comum é o www. Há outros hosts muito comuns, como api e developers. Hosts não são subdomínios.
FQDN (Fully Qualified Domain Name / Nome de Domínio Totalmente Qualificado)
É também chamado de nome de domínio absoluto, pois é um nome "completo" do domínio, falando de uma forma mais informal. Um FQDN deve terminar com um ponto, segundo as regras da ICANN. Exemplo: api.example.com.. Domínios de níveis maiores são mais genéricos e ficam mais à direita de um FQDN. Domínios de níveis menores são mais específicos e ficam mais à esquerda de um FQDN.

Como o DNS funciona?

Nas primeiras redes de computadores, ainda não existia o DNS. Ao invés disso, os nomes de domínios eram resolvidos para endereços IPs usando um arquivo chamado hosts, que os computadores continuam tendo hoje. Esse arquivo tem uma estrutura muito simples. Ele apenas relaciona um domínio a um IP. Porém, essa abordagem se tornou rapidamente obsoleta, principalmente por causa da sua simplicidade e porque todos os computadores precisavam ter uma cópia atualizada do arquivo.

O DNS surgiu como uma solução para as limitações do arquivo hosts. Ele oferece diversos tipos de registros, é desacoplado dos computadores que os usam e funciona como uma árvore, de forma que as consultas são feitas percorrendo essa árvore e os pais consultam seus filhos até que a resposta seja obtida. Vamos ver a seguir como o DNS funciona.

Quando você tenta acessar uma URL pelo seu browser, o seu computador primeiro tenta resolver o nome de domínio para um endereço IP procurando em arquivos locais, como o arquivo hosts. Caso ele não consiga resolver o nome de domínio dessa forma, ele delega essa tarefa para um resolving name server.

Um resolving name server retorna uma resposta ao browser. Ele cacheia resultados de consultas anteriores. Sendo assim, às vezes ele pode encontrar a resposta no cache. Se isso não acontecer, ele consulta name servers para conseguir a resposta. Além disso, outros servidores também podem cachear resultados de consultas. Isso é uma boa prática, porque faz com que as consultas sejam feitas mais rapidamente.

Os servidores DNS funcionam como uma hierarquia em forma de árvore. Quando um resolving name server precisa consultar name servers para obter a resposta de uma consulta, ele começa a sua consulta pela raiz da árvore, onde estão os root servers, que estão no topo da hierarquia. Os root servers, por sua vez, perguntam a servidores que estão abaixo deles na hierarquia, que no caso são os TLDs. Isso continua sendo feito até que seja encontrado algum servidor que tenha a resposta para a consulta.

É importante saber que existem dois tipos de consulta: recursivas e não-recursivas. As recursivas retornam a resposta da consulta. As não-recursivas podem tanto dar a resposta da consulta, como também indicar um servidor que deve ser consultado para tentar obter a resposta. Geralmente, as queries recursivas são feitas por clients, como o browser. Já as queries não-recursivas costumam ser feitas por servidores DNS.

Name servers podem ser autoritativos em relação a um domínio, quando eles possuem autoridade para responder sobre eles, porque contém a informação necessária para resolver o domínio.

A informação para resolver um domínio fica armazenada em arquivos de zona. Falaremos sobre eles a seguir.

Arquivos de zona

Arquivos de zona podem ter vários tipos de registros que configuram muitas coisas. Um nameserver pode ter vários arquivos de zona, e geralmente um arquivo de zona cuida de apenas um domínio (isso deixa os arquivos de zona mais organizados).

Cada registro é chamado de resource record. Existem vários tipos de registros, mas a maioria segue a mesma sintaxe, com exceção de alguns que tem pequenas variações:

nome do domínio / host classe tipo dados

A classe quase sempre é IN (de internet). O formato dos dados depende do tipo do registro. Vamos ver os tipos mais comuns e que você pode ter que criar se for configurar os registros de algum domínio em uma empresa de hospedagem de sites.

NS Records

Esse tipo de registro sempre precisa ser definido, para todos os domínios. NS é um acrônimo para Name Server. Então, esse registro define quais são os name servers que serão usados no domínio. Veja a sintaxe:

    IN NS nameserver

Esse é um dos tipos de registros em que não é necessário especificar o host, porque seus registros são mais globais, valem para o domínio como um todo. Porém, a maioria segue a sintaxe padrão dos tipos de registros: devem ser informadas a classe, o tipo e os dados. Exemplo de uso:

    IN NS ns1.exemplo.com
    IN NS ns2.exemplo.com
    IN NS ns3.exemplo.com

É comum empresas de hospedagem disponibilizarem 2 ou 3 nameservers (ou até mais) para os domínios dos sites hospedados nela, sendo o primeiro nameserver o master e os demais slaves, que são usados para redundância.

A e AAAA Records

Esses registros são muito parecidos. Ambos associam um domínio a um endereço IP. A diferença é que o A cuida de endereços IPv4, e o AAAA cuida de endereços IPv6. A sintaxe dos dois é a mesma:

FQDN / host IN A / AAAA IP

Como você pode notar na sintaxe, você pode especificar apenas um host, ao invés do FQDN. Se você fizer isso, o domínio é adicionado automaticamente ao host. Você sempre vai precisar de um desses registros que referencie o seu domínio completo. Porém, você não precisa digitá-lo de forma completa. Você pode referenciá-lo usando @. Exemplo:

@ IN A 198.209.139.144

Em muitos casos, você também vai querer configurar o host www:

www IN A 198.209.139.144

Aí, se necessário, você pode configurar outros hosts que você precisar usar, como api, por exemplo.

CNAME Records

Esses registros são aliases para outros registros do tipo A / AAAA. A sintaxe deles é bem parecida com a desses tipos de registros. A diferença é que ao invés de você passar um IP, você cita o host que você definiu no registro que você quer referenciar. Vamos supor que você tenha definido um registro A para o host api. Você pode criar um alias para torná-lo acessível também pelo host developers assim:

developers IN CNAME api

A desvantagem do registro CNAME é que é feita uma consulta adicional. No exemplo acima, ele busca o host developers, descobre que ele referencia o host api, e então consulta o api.

MX Records

Esses registros servem para definir hosts para funcionar como servidores de e-mail em um domínio. Esses registros também não especificam o host, assim como os registros NS. Sintaxe:

    IN MX prioridade host_de_email

Note que esse tipo de registro apenas referencia o host de e-mail no final. Além disso, ele requer um número inteiro que define a prioridade do host de e-mail. Quanto menor for o número, maior será a prioridade do host. Isso é usado quando se tem vários hosts de e-mail definidos, para que se saiba qual deve ser usado preferencialmente. Veja um exemplo de uso do registro MX:

    IN MX 5 mail1
    IN MX 6 mail2

CAA Records

Esses registros definem quais Autoridades Certificadoras (ACs) podem emitir certificados SSL / TLS. Se nenhum registro desse tipo estiver presente, qualquer autoridade pode emitir um certificado. Veja a sintaxe abaixo:

FQDN / host IN CAA flags tags valores

Como você pode ver, os dados específicos do registro são um pouco mais complexos do que os outros tipos de registros. Vamos entender cada um deles:

Flags
Definem como as ACs devem se comportar quando se deparam com tags que elas não entendem. Se o valor fornecido for 0, o registro será ignorado. Se for 1, a AC não deve emitir o certificado.
Tags
Elas são usadas para definir um subtipo para o registro. Elas podem ter os seguintes valores:
  • issue: autorizam uma AC a emitir qualquer tipo de certificado para um hostname específico.
  • issuewild: autorizam a emissão de um certificado wildcard (curinga). Esse tipo de certificado funciona para qualquer subdomínio, porque o curinga casa com qualquer subdomínio.
  • iodef: definem uma URL onde violações de políticas podem ser denunciadas.
Valores
São os valores das tags. Podem ser o domínio de uma AC, no caso das tags issue e issuewild, ou um link para reportar violações, no caso da tag iodef.

Veja abaixo alguns exemplos de valores de registros do tipo CAA:

@ IN CAA 0 issue "letsencrypt.org"
@ IN CAA 0 issuewild "letsencrypt.org"
@ IN CAA 0 iodef "https://exemplo.com/contato"

Se você configurar um domínio em um painel de controle de uma empresa de hospedagem, certamente você editará os arquivos de zona de forma indireta, ou seja, você não terá acesso direto aos arquivos de zona. Assim, podem haver diferenças entre cada painel de controle e a forma de edição não é a mesma de um arquivo de zona. Porém, conhecer a sintaxe dos tipos de registro dos arquivos de zona geralmente é o suficiente para que você possa fazer a configuração de registros de DNS em um painel de controle.

nslookup

O nslookup é uma ferramenta de linha de comando para fazer consultas DNS. Por isso, ela é útil para resolver problemas de configuração de DNS. Vamos ver os casos de uso mais comuns dela.

Comando para retornar o endereço IP de um domínio:

nslookup www.dominio.com

Comando para retornar o domínio associado a um endereço IP:

nslookup IP

Comando para retornar registros de um tipo específico de um domínio:

nslookup -querytype=tipo_registro www.dominio.com
nslookup -querytype=ns www.dominio.com