Post

Servidor de Nomes - DNS: Resolução de Nomes na Internet

Servidor de Nomes - DNS: Resolução de Nomes na Internet

1. Introdução ao DNS

O Domain Name System (DNS), ou Sistema de Nomes de Domínio, é uma das tecnologias mais fundamentais e, ao mesmo tempo, menos compreendidas da internet. Embora muitas vezes opere nos bastidores, sua função é absolutamente crucial para a forma como interagimos com a web diariamente. Imagine a internet como uma vasta rede de ruas e avenidas, onde cada casa ou edifício possui um endereço numérico único – o endereço IP. No entanto, para nós, humanos, memorizar sequências numéricas como 192.168.1.1 ou 2001:0db8:85a3:0000:0000:8a2e:0370:7334 para cada site que desejamos visitar seria impraticável. É aqui que o DNS entra em ação.

Em sua essência, o DNS atua como a “lista telefônica” ou o “GPS” da internet. Ele traduz os nomes de domínio amigáveis e fáceis de lembrar, como google.com ou wikipedia.org, em seus respectivos endereços IP numéricos. Essa tradução é o que permite que seu navegador encontre e se conecte ao servidor correto na internet, exibindo o site desejado. Sem o DNS, a navegação na web seria uma tarefa árdua, exigindo que os usuários soubessem o endereço IP de cada serviço online que quisessem acessar.

Este artigo tem como objetivo desmistificar o DNS, explicando seus conceitos fundamentais, como ele funciona em um nível prático e como você pode diagnosticar problemas relacionados a ele. Ao final, você terá uma compreensão mais sólida dessa infraestrutura essencial que sustenta a internet moderna.

2. História e Evolução do DNS: Do HOSTS.TXT à Arquitetura Distribuída

Para apreciar a engenhosidade do Domain Name System (DNS), é útil entender o contexto histórico que levou à sua criação. Nos primórdios da internet, quando ainda era conhecida como ARPANET, a resolução de nomes era um processo muito mais rudimentar e centralizado.

A Era do HOSTS.TXT

Durante os anos 70, a ARPANET era uma comunidade relativamente pequena, composta por algumas centenas de hosts. A informação necessária para identificar e localizar esses hosts era contida em um único arquivo, o HOSTS.TXT. Este arquivo mapeava nomes de hosts para seus respectivos endereços IP e era mantido pelo Network Information Center (NIC), distribuído por um único host: o Stanford Research Institute’s Network Information Center (SRI-NIC).

Os administradores da ARPANET enviavam por e-mail quaisquer mudanças que tivessem sido efetuadas, e o SRI-NIC periodicamente atualizava o arquivo HOSTS.TXT, uma ou duas vezes por semana. No entanto, com o crescimento exponencial da ARPANET, esse esquema tornou-se rapidamente inviável:

  • Escalabilidade: O tamanho do arquivo HOSTS.TXT crescia proporcionalmente ao número de hosts. Além disso, o tráfego gerado pelo processo de atualização aumentava ainda mais, pois cada novo host não só significava uma linha a mais no arquivo, mas também um novo host atualizando sua cópia a partir do SRI-NIC.
  • Conflitos de Nomes: Dois hosts no arquivo HOSTS.TXT não podiam ter o mesmo nome. Embora o NIC pudesse designar endereços únicos, ele não tinha autoridade sobre os nomes dados aos hosts. Isso abria a possibilidade de conflitos de nomes, onde a adição de um host com um nome já existente poderia interromper o sistema de outro host.
  • Consistência: Manter a consistência do arquivo com a rede em constante expansão tornou-se extremamente difícil. Era comum que, quando o arquivo finalmente conseguia conter todos os hosts, algum host já tivesse trocado de endereço ou um novo host adicionado tivesse quebrado a conexão de um host que se desejava acessar. Ironicamente, o sucesso da ARPANET tornou o arquivo HOSTS.TXT falho e obsoleto.

A Necessidade de um Novo Sistema

Com a transição da ARPANET para os protocolos TCP/IP e a consequente “explosão” da população da rede, a necessidade de um sistema de resolução de nomes mais robusto e escalável tornou-se premente. Os administradores da ARPANET buscaram um sistema que resolvesse os problemas de uma tabela única de hosts, com os seguintes objetivos:

  • Descentralização: Permitir que o administrador local tornasse os dados mundialmente disponíveis, descentralizando a administração para resolver o problema do gargalo gerado por um único host e diminuindo o problema do tráfego. A administração local também tornaria a atualização dos dados uma tarefa muito mais simples.
  • Hierarquia de Nomes: O esquema deveria usar nomes em hierarquia para garantir a exclusividade dos nomes e facilitar a gestão.

O Nascimento do DNS

Paul Mockapetris, do USC’s Information Science Institute, foi o responsável pela arquitetura do novo sistema. Em 1984, ele lançou os RFCs 882 e 883, que descrevem o “Domain Name System” (DNS). Estes RFCs foram posteriormente sucedidos pelos RFCs 1034 e 1035, que contêm as especificações atuais do DNS.

Características Fundamentais do DNS

O DNS, conforme concebido por Mockapetris e refinado ao longo dos anos, incorpora várias características essenciais que o tornam a solução robusta e escalável que conhecemos hoje:

  • Banco de Dados Hierárquico e Distribuído: Representado no formato de uma árvore invertida com até 127 níveis, o DNS permite que a responsabilidade pela gestão de nomes seja delegada a diferentes entidades, evitando um único ponto de falha e gargalos.
  • “Namespace” de até 63 Caracteres: Cada rótulo (parte entre os pontos) de um nome de domínio pode ter até 63 caracteres, proporcionando flexibilidade na criação de nomes.
  • Associação de Outras Informações: Além de endereços IP, o DNS tem a capacidade de associar outras informações a um host, como servidores de e-mail (registros MX), servidores de nomes (registros NS), e informações textuais (registros TXT).
  • Arquitetura Cliente/Servidor: Os clientes são chamados de “resolvers” (resolvedores) e geralmente são bibliotecas do sistema operacional (como libresolv no Gnu/Linux) compartilhadas entre diversos programas (como ping ou navegadores web). Do outro lado, estão os servidores de nome “DNS”, os “DNS nameserver”.
  • Raiz da Árvore: A raiz da árvore DNS tem nome nulo ou vazio, por isso é representada simplesmente como um ponto (.).
  • Domínios de Nível Mais Elevado (TLDs): Os nós abaixo do domínio raiz são chamados de Domínios de Nível Mais Elevado (Top-Level Domains - TLDs). Sua quantidade e nomes são impostos pela ICANN (Internet Corporation for Assigned Names and Numbers).
  • gTLDs e ccTLDs: Os TLDs são divididos em “gTLDs” (domínios genéricos como .com, .edu, .gov, .mil, etc.) e “ccTLDs” (códigos de países, sempre com duas letras, como .br para o Brasil).
  • Delegação de Autoridade: A ICANN delega a responsabilidade pela administração de um ccTLD a entidades específicas. No caso do Brasil, essa responsabilidade pertence atualmente ao CGI.br, mais especificamente ao REGISTRO.br. Uma vez delegado um domínio, sua nova autoridade pode delegar subdomínios sem necessitar notificar a entidade responsável pelo domínio pai.
  • Analogia Hierárquica: Um subdomínio está para um subdiretório assim como um domínio está para um diretório, e um “host” está para um arquivo, ilustrando a estrutura hierárquica do DNS.

Finalmente, vale a pena mencionar que o arquivo “HOSTS.TXT” foi portado para o ambiente Unix e posteriormente para o Gnu/Linux como /etc/hosts. Este arquivo é normalmente o primeiro a ser consultado pelo resolvedor, que buscará por um servidor de nomes apenas se o “host” não for encontrado no arquivo /etc/hosts. Isso demonstra a persistência de conceitos fundamentais, mesmo com a evolução tecnológica.

3. Terminologia Essencial do DNS

Para compreender plenamente o funcionamento do DNS, é fundamental familiarizar-se com a terminologia específica utilizada. Embora alguns termos possam parecer familiares, seu uso no contexto do DNS possui nuances importantes.

Domain Name System (DNS)

O Domain Name System (DNS) é o sistema de rede distribuído e hierárquico que permite a tradução de nomes de domínio legíveis por humanos (como www.example.com) em endereços IP numéricos (como 192.0.2.1 ou 2001:0db8::1). Essa tradução é essencial porque os computadores na internet se comunicam usando endereços IP, enquanto os humanos preferem nomes mais fáceis de memorizar. O DNS é, portanto, o pilar que torna a internet acessível e navegável para o usuário comum.

Domain Name

Um Nome de Domínio (Domain Name) é o nome amigável e único que associamos a um recurso na internet, como um website, um servidor de e-mail ou qualquer outro serviço online. Por exemplo, google.com é um nome de domínio. É a identidade de um site na web, permitindo que os usuários o encontrem sem precisar saber seu endereço IP subjacente. Um nome de domínio é composto por várias partes separadas por pontos, lidas da direita para a esquerda, que indicam sua posição na hierarquia do DNS.

Endereço IP

Um Endereço IP (Internet Protocol Address) é um identificador numérico único atribuído a cada dispositivo conectado a uma rede de computadores que utiliza o Protocolo de Internet para comunicação. Existem duas versões principais de endereços IP:

  • IPv4: A forma mais comum, composta por quatro conjuntos de números, cada um variando de 0 a 255, separados por pontos (ex: 192.168.1.100). A quantidade de endereços IPv4 é limitada, o que levou ao desenvolvimento do IPv6.
  • IPv6: Uma versão mais recente, projetada para fornecer um número muito maior de endereços. É representado por oito grupos de quatro dígitos hexadecimais, separados por dois pontos (ex: 2001:0db8:85a3:0000:0000:8a2e:0370:7334).

O DNS é o mecanismo que mapeia os nomes de domínio para esses endereços IP, permitindo que a comunicação ocorra entre os dispositivos.

Top-Level Domain (TLD)

O Domínio de Nível Superior (Top-Level Domain - TLD) é a parte mais à direita de um nome de domínio, após o último ponto. Exemplos comuns incluem .com, .org, .net, .gov, .edu, .br (Brasil), .uk (Reino Unido), etc. Os TLDs são gerenciados por organizações específicas sob a supervisão da ICANN (Internet Corporation for Assigned Names and Numbers) e representam o nível mais alto na hierarquia de nomes de domínio. Eles podem ser genéricos (gTLDs) ou de código de país (ccTLDs).

Domínio de Segundo Nível (SLD)

O Domínio de Segundo Nível (Second-Level Domain - SLD) é a parte do nome de domínio localizada imediatamente à esquerda do TLD. Por exemplo, em google.com, google é o SLD. É a parte que geralmente representa a marca, empresa ou organização que registrou o domínio. Os SLDs são registrados por indivíduos ou organizações através de registradores de domínio e são únicos dentro de um determinado TLD.

Subdomínio

Um Subdomínio é uma extensão de um domínio pai, criada para organizar e segmentar diferentes seções de um website ou serviços. Por exemplo, em blog.example.com, blog é um subdomínio de example.com. Subdomínios permitem que os proprietários de domínios criem endereços mais específicos para diferentes conteúdos ou funcionalidades (ex: mail.example.com para e-mail, api.example.com para uma API). Eles são lidos da esquerda para a direita, tornando o nome mais específico.

Host

Dentro de um domínio, um Host refere-se a um computador ou serviço específico que é acessível através desse domínio. Um host é frequentemente um subdomínio, mas a distinção principal é que um host aponta para um recurso específico (como um servidor web ou de e-mail), enquanto um subdomínio é uma subdivisão hierárquica do domínio. Por exemplo, www.example.com e ftp.example.com são exemplos de hosts dentro do domínio example.com, onde www e ftp são os nomes dos hosts.

FQDN (Fully Qualified Domain Name)

Um FQDN (Fully Qualified Domain Name), ou Nome de Domínio Totalmente Qualificado, é um nome de domínio absoluto que especifica sua localização exata na hierarquia do DNS, incluindo todos os domínios pais até a raiz. Um FQDN termina com um ponto (.), que representa a raiz do sistema DNS, embora muitas aplicações não exijam que o ponto final seja digitado. Por exemplo, mail.google.com. é um FQDN. Ele remove qualquer ambiguidade sobre a localização do recurso na internet.

Servidor de Nomes (Name Server)

Um Servidor de Nomes (Name Server) é um servidor dedicado que armazena e gerencia informações de mapeamento entre nomes de domínio e endereços IP. Esses servidores são a espinha dorsal do DNS, respondendo a consultas de resolução de nomes. Existem diferentes tipos de servidores de nomes, incluindo servidores autoritativos (que detêm as informações originais para um domínio) e servidores recursivos (que consultam outros servidores para resolver uma requisição).

Arquivo de Zona (Zone File)

Um Arquivo de Zona (Zone File) é um arquivo de texto simples que contém todos os registros DNS para um domínio específico. Ele reside em um servidor de nomes autoritativo e define como os nomes de domínio dentro dessa zona devem ser traduzidos para endereços IP e outras informações de recursos. O arquivo de zona é a fonte primária de verdade para as informações de DNS de um domínio.

Registros DNS (Records)

Dentro de um arquivo de zona, as informações são organizadas em Registros DNS (Records). Cada registro é uma linha no arquivo de zona que mapeia um nome de domínio para um valor específico, como um endereço IP, outro nome de domínio, ou informações de serviço. Existem vários tipos de registros, cada um com uma finalidade diferente. Os mais comuns incluem:

  • Registro A (Address): Mapeia um nome de domínio para um endereço IPv4.
  • Registro AAAA (Quad-A): Mapeia um nome de domínio para um endereço IPv6.
  • Registro CNAME (Canonical Name): Cria um alias (apelido) para outro nome de domínio.
  • Registro MX (Mail Exchange): Especifica os servidores de e-mail responsáveis por receber mensagens para um domínio.
  • Registro NS (Name Server): Lista os servidores de nomes autoritativos para um domínio.
  • Registro SOA (Start of Authority): Contém informações administrativas sobre a zona, como o servidor de nomes primário e o e-mail do administrador.
  • Registro TXT (Text): Permite que os administradores de domínio adicionem texto arbitrário ao registro DNS, frequentemente usado para verificações de domínio ou políticas de e-mail (SPF, DKIM).

Compreender esses termos é o primeiro passo para desvendar a complexidade do DNS e apreciar sua função vital na arquitetura da internet.

4. Tipos de Servidores DNS

No ecossistema do DNS, diferentes tipos de servidores desempenham papéis específicos para garantir a eficiência e a robustez do sistema de resolução de nomes. Compreender suas funções é crucial para entender a dinâmica do DNS.

Servidor DNS Recursivo (Recursive Resolver)

O Servidor DNS Recursivo, também conhecido como resolvedor recursivo ou resolvedor de cache, é o primeiro ponto de contato para a maioria das consultas DNS originadas por usuários finais. Quando você digita um nome de domínio em seu navegador, a consulta é enviada para este tipo de servidor. Sua principal função é atuar como um intermediário, buscando a resposta para a consulta em nome do cliente. Ele faz isso consultando outros servidores DNS (raiz, TLD, autoritativos) em uma sequência hierárquica até encontrar o endereço IP correto. Uma vez que a resposta é obtida, o resolvedor recursivo a armazena em seu cache por um determinado período (definido pelo TTL do registro), o que acelera futuras consultas para o mesmo domínio.

  • Função: Receber consultas de clientes, realizar a resolução completa (recursivamente) e armazenar em cache as respostas.
  • Exemplos: Servidores DNS fornecidos por ISPs, Google Public DNS (8.8.8.8), Cloudflare DNS (1.1.1.1).

Servidor DNS Autoritativo (Authoritative Name Server)

Um Servidor DNS Autoritativo é o servidor que detém as informações oficiais e definitivas para um ou mais domínios. Ele é a “fonte da verdade” para os registros DNS de um domínio específico. Quando um resolvedor recursivo precisa de informações sobre um domínio, ele eventualmente consulta o servidor autoritativo para esse domínio. Os servidores autoritativos não realizam consultas recursivas; eles apenas respondem com as informações que possuem em seus arquivos de zona ou indicam outros servidores autoritativos para subdomínios delegados.

  • Função: Fornecer respostas diretas e autoritativas para consultas sobre os domínios que gerencia.
  • Tipos: Pode ser um servidor primário (onde as alterações são feitas) ou secundário (que replica as informações do primário para redundância).

Servidor DNS de Cache (Caching Name Server)

Um Servidor DNS de Cache é um tipo de servidor DNS que armazena temporariamente as respostas de consultas DNS que ele já realizou. O objetivo principal de um servidor de cache é melhorar a velocidade das resoluções de nomes e reduzir a carga nos servidores DNS autoritativos. Quando uma consulta é recebida, o servidor de cache primeiro verifica se a resposta já está em seu cache. Se estiver, ele retorna a resposta imediatamente, sem precisar consultar outros servidores. Se não estiver, ele atua como um resolvedor recursivo para obter a resposta e, em seguida, a armazena em cache para uso futuro. É importante notar que a maioria dos resolvedores recursivos também funcionam como servidores de cache.

  • Função: Armazenar respostas DNS para acelerar futuras consultas e reduzir o tráfego na rede.
  • Características: Reduz a latência para o usuário final e a carga nos servidores autoritativos.

Interação entre os Tipos de Servidores

O processo de resolução de nomes é uma colaboração entre esses diferentes tipos de servidores:

  1. O cliente envia uma consulta para um Servidor DNS Recursivo.
  2. O Servidor DNS Recursivo (que também é um servidor de cache) verifica seu cache. Se a resposta não estiver lá, ele inicia uma série de consultas iterativas:
    • Ele consulta um Servidor Raiz para obter o endereço do Servidor TLD.
    • Ele consulta o Servidor TLD para obter o endereço do Servidor Autoritativo.
    • Ele consulta o Servidor Autoritativo para obter o endereço IP final do domínio.
  3. O Servidor DNS Recursivo armazena a resposta em seu cache e a envia de volta para o cliente.

Essa arquitetura distribuída e hierárquica é o que torna o DNS tão resiliente e escalável, capaz de lidar com o volume massivo de consultas que ocorrem na internet a cada segundo.

5. Como o DNS Funciona: O Processo de Resolução de Nomes

Com a terminologia em mente, podemos agora mergulhar no processo de como o DNS realmente funciona para traduzir um nome de domínio em um endereço IP. Embora pareça complexo, o sistema é incrivelmente eficiente e hierárquico, permitindo que bilhões de consultas sejam resolvidas diariamente em milissegundos.

Visão Geral do Processo Hierárquico

O DNS opera em uma estrutura hierárquica, semelhante a uma árvore invertida, onde o topo é a “raiz” e os ramos se estendem para domínios e subdomínios mais específicos. Quando você digita um nome de domínio em seu navegador, uma série de servidores DNS trabalha em conjunto para encontrar o endereço IP correspondente. Esse processo é conhecido como resolução de nomes.

Os principais componentes envolvidos nesse processo são:

  • Servidor de Nomes Resolvedor (Recursive Resolver): É o primeiro ponto de contato para a maioria das consultas DNS. Geralmente fornecido pelo seu Provedor de Serviços de Internet (ISP) ou por serviços públicos (como Google DNS 8.8.8.8), ele atua como um intermediário, consultando outros servidores DNS em nome do cliente e armazenando em cache os resultados para futuras consultas.
  • Servidores Raiz (Root Servers): O topo da hierarquia DNS. Existem 13 conjuntos de servidores raiz (operados por diferentes organizações), cada um com várias instâncias espalhadas globalmente. Eles não armazenam informações sobre domínios específicos, mas sabem onde encontrar os servidores de nomes para os TLDs.
  • Servidores TLD (Top-Level Domain Servers): Responsáveis por gerenciar informações para domínios de nível superior (como .com, .org, .net, .br). Eles sabem quais servidores de nomes autoritativos são responsáveis por cada domínio de segundo nível sob seu TLD.
  • Servidores de Nomes Autoridade (Authoritative Name Servers): São os servidores que detêm as informações finais e oficiais para um domínio específico (por exemplo, example.com). Eles contêm os arquivos de zona com todos os registros DNS para aquele domínio.

Fluxo Completo de uma Consulta DNS (Passo a Passo com Exemplo)

Vamos seguir o caminho de uma consulta DNS para o nome de domínio www.example.com:

  1. O Cliente Inicia a Consulta: Quando você digita www.example.com em seu navegador, seu computador primeiro verifica seu cache DNS local (e o arquivo hosts) para ver se já possui o endereço IP para esse domínio. Se não encontrar, ele envia a consulta para o Servidor de Names Resolvedor configurado em seu sistema (geralmente o do seu ISP).

  2. Consulta ao Servidor Raiz: O Servidor de Nomes Resolvedor, que não conhece o endereço IP de www.example.com, envia uma consulta aos Servidores Raiz. A pergunta é: “Qual servidor de nomes é responsável pelo domínio .com?”

  3. Resposta do Servidor Raiz: O Servidor Raiz não sabe o IP de www.example.com, mas ele responde ao Resolvedor com o endereço IP dos Servidores TLD responsáveis pelo .com.

  4. Consulta ao Servidor TLD: O Servidor de Nomes Resolvedor, agora com o endereço do Servidor TLD .com, envia uma nova consulta a ele: “Qual servidor de nomes é responsável por example.com?”

  5. Resposta do Servidor TLD: O Servidor TLD .com responde ao Resolvedor com o endereço IP dos Servidores de Nomes Autoridade para example.com.

  6. Consulta ao Servidor de Nomes Autoridade: Finalmente, o Servidor de Nomes Resolvedor envia a consulta final aos Servidores de Nomes Autoridade para example.com: “Qual é o endereço IP de www.example.com?”

  7. Resposta do Servidor de Nomes Autoridade: O Servidor de Nomes Autoridade para example.com consulta seu arquivo de zona e encontra o registro A para www.example.com, que contém o endereço IP. Ele então envia esse endereço IP de volta para o Servidor de Nomes Resolvedor.

  8. Resposta ao Cliente e Cache: O Servidor de Nomes Resolvedor recebe o endereço IP, armazena-o em seu cache (para acelerar futuras consultas ao mesmo domínio) e o envia de volta para o computador do cliente.

  9. Conexão Estabelecida: Com o endereço IP em mãos, o navegador do cliente pode agora estabelecer uma conexão direta com o servidor web que hospeda www.example.com, e a página é carregada.

Este processo, que parece longo, acontece em milissegundos, tornando a navegação na internet uma experiência fluida e quase instantânea para o usuário final. A hierarquia e a distribuição do DNS garantem sua resiliência e escalabilidade global.

6. Tipos de Registros DNS Comuns

Os registros DNS são as entradas fundamentais nos arquivos de zona que fornecem as informações necessárias para a resolução de nomes. Cada tipo de registro serve a um propósito específico, direcionando o tráfego de internet para os serviços corretos. Abaixo, detalhamos os tipos mais comuns e suas funções.

Registro A (Address Record)

O Registro A é o tipo de registro DNS mais fundamental e amplamente utilizado. Ele mapeia um nome de domínio (ou subdomínio) para um endereço IPv4. É o que permite que seu navegador encontre o servidor web de um site.

Exemplo:

1
2
example.com. IN A 192.0.2.1
www.example.com. IN A 192.0.2.1

Neste exemplo, example.com e www.example.com apontam para o endereço IPv4 192.0.2.1.

Registro AAAA (Quad-A Record)

Semelhante ao Registro A, o Registro AAAA (pronuncia-se “quad-A”) mapeia um nome de domínio para um endereço IPv6. Com a crescente adoção do IPv6, este registro é cada vez mais importante.

Exemplo:

1
example.com. IN AAAA 2001:0db8:85a3:0000:0000:8a2e:0370:7334

Aqui, example.com aponta para o endereço IPv6 2001:0db8:85a3:0000:0000:8a2e:0370:7334.

Registro CNAME (Canonical Name Record)

O Registro CNAME cria um alias, ou seja, um nome alternativo para outro nome de domínio. Ele é útil quando você tem vários subdomínios ou serviços que apontam para o mesmo recurso, mas deseja que eles sejam acessíveis por nomes diferentes. Um CNAME deve sempre apontar para outro nome de domínio, nunca para um endereço IP.

Exemplo:

1
2
www.example.com. IN CNAME example.com.
ftp.example.com. IN CNAME example.com.

Neste caso, www.example.com e ftp.example.com são aliases para example.com. Se o IP de example.com mudar, os aliases automaticamente seguirão a mudança.

Registro MX (Mail Exchange Record)

O Registro MX especifica os servidores de e-mail responsáveis por receber mensagens para um determinado domínio. Ele inclui um valor de preferência, que indica a ordem em que os servidores devem ser tentados (valores menores têm maior preferência).

Exemplo:

1
2
example.com. IN MX 10 mail.example.com.
example.com. IN MX 20 backupmail.example.com.

Este exemplo indica que mail.example.com é o servidor de e-mail preferencial para example.com, e backupmail.example.com é o secundário.

Registro NS (Name Server Record)

O Registro NS lista os servidores de nomes autoritativos para um domínio ou subdomínio. Ele é crucial para a delegação de autoridade na hierarquia do DNS, indicando quais servidores são responsáveis por fornecer as informações de DNS para uma zona específica.

Exemplo:

1
2
example.com. IN NS ns1.example.com.
example.com. IN NS ns2.example.com.

Isso informa que ns1.example.com e ns2.example.com são os servidores de nomes autoritativos para example.com.

Registro SOA (Start of Authority Record)

O Registro SOA (Start of Authority) contém informações administrativas vitais sobre a zona DNS, como o servidor de nomes primário para a zona, o e-mail do administrador, o número de série da zona (que indica quando a zona foi atualizada pela última vez), e vários tempos de expiração e retry para transferências de zona.

Exemplo:

1
2
3
4
5
6
7
example.com. IN SOA ns1.example.com. admin.example.com. (
                                2023071801 ; Serial
                                7200       ; Refresh
                                3600       ; Retry
                                1209600    ; Expire
                                3600       ; Minimum TTL
                                )

Registro TXT (Text Record)

O Registro TXT permite que os administradores de domínio adicionem texto arbitrário ao registro DNS. Embora o nome sugira texto simples, ele é frequentemente usado para armazenar dados legíveis por máquina para diversas finalidades, como verificações de domínio ou políticas de e-mail (SPF, DKIM, DMARC) e outras informações de serviço.

Exemplo:

1
2
example.com. IN TXT "v=spf1 include:_spf.google.com ~all"
_dmarc.example.com. IN TXT "v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com"

Estes exemplos mostram registros TXT usados para políticas SPF (Sender Policy Framework) e DMARC (Domain-based Message Authentication, Reporting, and Conformance), que ajudam a combater spam e phishing.

Compreender esses diferentes tipos de registros é essencial para configurar e gerenciar corretamente o DNS de um domínio, garantindo que os serviços online funcionem como esperado.

7. Diagnóstico e Ferramentas DNS

Compreender o funcionamento do DNS é um passo crucial, mas ser capaz de diagnosticar problemas e verificar configurações é igualmente importante. Existem várias ferramentas de linha de comando que permitem interagir com o DNS e obter informações valiosas. As mais comuns são nslookup, host e dig.

Instalação do Pacote dnsutils

Antes de utilizar as ferramentas host e dig, é necessário instalá-las, pois elas geralmente vêm empacotadas no pacote dnsutils em sistemas baseados em Debian/Ubuntu. O nslookup geralmente já vem pré-instalado.

Para instalar o dnsutils, abra um terminal e execute o seguinte comando:

1
2
sudo apt update
sudo apt install dnsutils

Comandos de Consulta DNS

nslookup

O nslookup (name server lookup) é uma ferramenta simples e popular para consultar servidores DNS. Ele pode ser usado para encontrar o endereço IP de um nome de domínio ou o nome de domínio associado a um endereço IP.

Uso Básico:

Para consultar o endereço IP de um domínio:

1
nslookup google.com

Exemplo de Saída:

1
2
3
4
5
6
7
8
Server:		8.8.8.8
Address:	8.8.8.8#53

Non-authoritative answer:
Name:	google.com
Address: 172.217.29.78
Name:	google.com
Address: 2800:3f0:4001:80a::200e

Neste exemplo, o nslookup consultou o servidor DNS 8.8.8.8 (Google Public DNS) e retornou os endereços IPv4 e IPv6 associados a google.com.

host

O comando host é uma ferramenta mais flexível que nslookup para realizar consultas DNS. Ele pode resolver nomes para endereços IP e vice-versa, além de consultar outros tipos de registros DNS.

Uso Básico:

Para consultar o endereço IP de um domínio:

1
host google.com

Exemplo de Saída:

1
2
3
google.com has address 172.217.30.238
google.com has IPv6 address 2800:3f0:4001:81c::200e
google.com mail is handled by 10 smtp.google.com.

O host também pode ser usado para consultar tipos específicos de registros, como MX (Mail Exchange):

1
host -t mx google.com

dig

O dig (domain information groper) é a ferramenta mais poderosa e detalhada para consultas DNS. Ele é amplamente utilizado por administradores de rede e desenvolvedores para depurar problemas de DNS, pois fornece informações completas sobre o processo de consulta.

Uso Básico:

Para consultar o endereço IP de um domínio:

1
dig google.com

Exemplo de Saída (simplificado):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
; <<>> DiG 9.18.33-1~deb12u2-Debian <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23119
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; QUESTION SECTION:
;google.com.			IN	A

;; ANSWER SECTION:
google.com.		152	IN	A	172.217.30.238

;; Query time: 36 msec
;; SERVER: 8.8.8.8#53(8.8.8.8) (UDP)
;; WHEN: Fri Jul 18 10:09:11 -03 2025
;; MSG SIZE  rcvd: 55

Consultando Tipos Específicos de Registros com dig:

  • Registro SOA:
    1
    
    dig -t soa google.com
    
  • Registros NS (Name Server):
    1
    
    dig -t ns google.com
    
  • Registros MX (Mail Exchange):
    1
    
    dig -t mx google.com
    
  • Todos os Registros (ANY):
    1
    
    dig -t any google.com
    

O dig oferece uma riqueza de detalhes, incluindo o servidor que respondeu, o tempo de consulta, e as seções de pergunta, resposta, autoridade e adicional, o que o torna indispensável para depuração avançada de DNS.

Interpretação dos Resultados

Ao usar essas ferramentas, é importante observar:

  • Server / SERVER: Indica o servidor DNS que respondeu à sua consulta.
  • Address / ANSWER SECTION: Mostra o endereço IP (ou outros dados do registro) associado ao nome de domínio.
  • Non-authoritative answer: Significa que a resposta veio de um cache ou de um servidor que não é o servidor de nomes autoritativo para o domínio. Uma resposta autoritativa viria diretamente do servidor que detém o arquivo de zona do domínio.
  • Query time: O tempo que levou para a consulta ser resolvida.
  • flags: Indicadores que fornecem informações sobre a resposta DNS (ex: qr para query response, rd para recursion desired, ra para recursion available).

Dominar essas ferramentas é fundamental para qualquer pessoa que trabalhe com redes ou gerencie websites, permitindo uma rápida identificação e resolução de problemas de DNS.

8. Maneiras de Enumeração de DNS

Além das ferramentas básicas de consulta, existem ferramentas mais avançadas que podem ser usadas para enumeração de DNS, que é o processo de descobrir informações sobre a infraestrutura DNS de um domínio, incluindo subdomínios, hosts e outros registros, muitas vezes para fins de segurança ou auditoria.

1. Nmap

O Nmap (Network Mapper) é uma ferramenta de código aberto para exploração de rede e auditoria de segurança. Ele possui scripts (NSE - Nmap Scripting Engine) que podem ser usados para diversas tarefas relacionadas ao DNS.

  • Descoberta de Serviços DNS-SD (Service Discovery): Este script tenta descobrir serviços de hosts usando o protocolo DNS Service Discovery. Ele envia uma consulta DNS-SD multicast e coleta todas as respostas. O script primeiro consulta _services._dns-sd._udp.local para obter uma lista de serviços e, em seguida, envia consultas de acompanhamento para obter mais informações.
    1
    
    nmap --script=broadcast-dns-service-discovery example.com
    
  • Enumeração de Subdomínios por Força Bruta: Este comando tenta enumerar nomes de host DNS por força bruta, adivinhando subdomínios comuns a partir de uma lista. Com o argumento dns-brute.srv, ele também tenta enumerar registros SRV DNS comuns. Registros curinga (wildcard) são listados como A (IPv4) e AAAA (IPv6).
    1
    
    nmap -T4 -p 53 --script dns-brute example.com
    
  • Verificação de Recursão DNS: Este comando verifica se um servidor DNS permite consultas recursivas de nomes de terceiros. A recursão é esperada em servidores de nomes internos, mas pode ser um risco de segurança se habilitada em servidores públicos sem necessidade.
    1
    
    nmap -Pn -sU -p 53 --script=dns-recursion 10.32.16.3
    
  • Enumeração de Registros SRV:
    1
    
    nmap --script dns-srv-enum --script-args "dns-srv-enum.domain=\'google.com\'"
    

2. DNSEnum

DNSEnum é um script Perl multithread projetado para enumerar informações de DNS de um domínio e descobrir blocos de IP não contíguos. Ele realiza várias operações:

  • Obtém o endereço do host (registro A).
  • Obtém os servidores de nomes (encadeados).
  • Obtém o registro MX (encadeado).
  • Executa consultas AXFR (transferência de zona) em servidores de nomes e obtém a versão do BIND (encadeado).
  • Obtém nomes e subdomínios extras via scraping do Google (usando a consulta allinurl:-www site:domain).
  • Permite força bruta de subdomínios a partir de um arquivo e recursão em subdomínios com registros NS (todos encadeados).
  • Calcula intervalos de rede de domínio de classe C e executa consultas Whois neles (encadeado).
  • Executa pesquisas inversas em netranges (classe C ou netranges Whois) (encadeado).
  • Grava os blocos de IP no arquivo domain_ips.txt.

Exemplo de Uso: Para evitar a enumeração de pesquisa reversa e salvar o resultado de saída no formato XML:

1
dnsenum --noreverse -o mydomain.xml example.com

3. DNSRecon

DNSRecon é uma ferramenta poderosa para reconhecimento de DNS, oferecendo diversas capacidades:

  • Verifica todos os registros NS para transferências de zona.
  • Enumera registros DNS gerais para um determinado domínio (MX, SOA, NS, A, AAAA, SPF e TXT).
  • Executa a enumeração de registros SRV comuns.
  • Expansão do domínio de primeiro nível (TLD).
  • Verifica a resolução de curinga (wildcard).
  • Força bruta de subdomínios e registros de host A e AAAA, recebendo um domínio e uma lista de palavras.
  • Executa uma pesquisa de registro PTR para um determinado intervalo de IP ou CIDR.
  • Verifica registros em cache de um servidor DNS para registros A, AAAA e CNAME.
  • Fornece uma lista de registros de host em um arquivo de texto para verificação.
  • Enumera registros DNS comuns na rede local.
  • Enumera hosts e subdomínios usando o Google.

Exemplo de Uso: Para enumerar o registro DNS do site de destino:

1
dnsrecon -d example.com

4. Fierce

Fierce é uma ferramenta de reconhecimento, um script PERL que verifica rapidamente os domínios usando várias táticas, geralmente em poucos minutos, assumindo que não há atraso na rede.

Exemplo de Uso: Para enumeração de DNS no site de destino:

1
fierce -dns example.com

Essas ferramentas são inestimáveis para profissionais de segurança, administradores de rede e desenvolvedores que precisam de uma compreensão aprofundada da infraestrutura DNS de um domínio para fins de auditoria, segurança ou solução de problemas complexos.

9. Conclusão

O Domain Name System (DNS) é, sem dúvida, um dos pilares invisíveis da internet moderna. Sua capacidade de traduzir nomes de domínio legíveis por humanos em endereços IP numéricos é o que torna a navegação na web intuitiva e acessível para bilhões de usuários em todo o mundo. Desde a digitação de um endereço de site no navegador até a entrega de um e-mail, o DNS está em constante operação, garantindo que as informações cheguem ao seu destino correto.

Compreender a hierarquia do DNS, os diferentes tipos de servidores envolvidos (raiz, TLD, autoritativos, resolvedores) e o fluxo de uma consulta de resolução de nomes é fundamental para qualquer pessoa que trabalhe com tecnologia, seja como desenvolvedor, administrador de sistemas ou simplesmente um usuário curioso. Além disso, o domínio das ferramentas de diagnóstico como nslookup, host e dig capacita você a solucionar problemas de conectividade e a verificar a integridade das configurações de DNS, garantindo que seus serviços online estejam sempre disponíveis.

O DNS é um testemunho da engenhosidade da arquitetura da internet, um sistema robusto e distribuído que continua a evoluir para atender às crescentes demandas de um mundo cada vez mais conectado. Ao desvendar seus mecanismos, ganhamos não apenas conhecimento técnico, mas também uma apreciação mais profunda pela complexidade e resiliência da rede global que usamos todos os dias.

Anexo: Exemplos de Arquivos de Zona (Opcional)

Um arquivo de zona é a representação textual de uma zona DNS, contendo todos os registros que definem os recursos de um domínio. Abaixo, um exemplo simplificado de um arquivo de zona para example.com.

$TTL 3600       ; Tempo de vida padrão (Time To Live) para registros sem TTL explícito
@ IN SOA ns1.example.com. admin.example.com. (
                                2023071801 ; Serial (AAAAJJDDNN - Ano, Mês, Dia, Número de revisão)
                                7200       ; Refresh (tempo para o secundário verificar atualizações)
                                3600       ; Retry (tempo para o secundário tentar novamente após falha)
                                1209600    ; Expire (tempo para o secundário parar de responder se não conseguir atualizar)
                                3600       ; Minimum TTL (TTL mínimo para registros negativos e para o SOA)
                                )

@ IN NS ns1.example.com.    ; Servidor de nomes primário
@ IN NS ns2.example.com.    ; Servidor de nomes secundário

@ IN A 192.0.2.1            ; Registro A para o domínio principal (example.com)
www IN A 192.0.2.1          ; Registro A para o subdomínio www
mail IN A 192.0.2.2         ; Registro A para o servidor de e-mail

@ IN MX 10 mail.example.com. ; Registro MX para o servidor de e-mail

ftp IN CNAME www            ; Registro CNAME para ftp apontando para www

_spf IN TXT "v=spf1 ip4:192.0.2.0/24 include:spf.mailprovider.com ~all" ; Registro TXT para SPF

Explicação dos Campos:

  • $TTL: Define o tempo de vida padrão (Time To Live) para todos os registros na zona, a menos que um TTL específico seja definido para um registro individual. Indica por quanto tempo os resolvedores DNS devem armazenar em cache as informações antes de consultá-las novamente.
  • @: Representa o nome do domínio atual (neste caso, example.com).
  • IN: Indica a classe do registro, que é sempre IN (Internet) para registros DNS padrão.
  • SOA: O registro Start of Authority, que contém informações administrativas sobre a zona.
    • ns1.example.com.: O servidor de nomes primário para esta zona.
    • admin.example.com.: O endereço de e-mail do administrador da zona (o @ é substituído por um .).
    • Serial: Um número de série que deve ser incrementado cada vez que o arquivo de zona é modificado. Usado por servidores DNS secundários para determinar se precisam atualizar sua cópia da zona.
    • Refresh, Retry, Expire, Minimum TTL: Parâmetros que controlam como os servidores DNS secundários sincronizam e gerenciam a zona.
  • NS: Registros de Servidor de Nomes, listando os servidores DNS autoritativos para o domínio.
  • A: Registros de Endereço, mapeando nomes de host para endereços IPv4.
  • MX: Registros de Mail Exchange, especificando os servidores de e-mail para o domínio e sua prioridade.
  • CNAME: Registros de Nome Canônico, criando aliases para outros nomes de domínio.
  • TXT: Registros de Texto, usados para armazenar informações textuais, como políticas SPF para e-mail.

Este exemplo demonstra a estrutura básica e os tipos de registros mais comuns encontrados em um arquivo de zona DNS, fornecendo uma visão prática de como as informações de um domínio são organizadas e publicadas.

This post is licensed under CC BY 4.0 by the author.