DNS (Domain Name System) é um serviço crítico que traduz nomes de domínio legíveis por humanos em endereços IP, permitindo a comunicação pela internet. O protocolo primário para consultas DNS tem sido tradicionalmente o UDP (User Datagram Protocol), mas o TCP (Transmission Control Protocol) também é uma opção suportada. O RFC 5966 fornece especificações e esclarecimentos para o uso do TCP no DNS para complementar o UDP. Este artigo se aprofunda no RFC 5966, explicando os processos de comunicação entre clientes e servidores DNS e como o balanceamento de carga pode ser implementado para tráfego UDP e TCP.
UDP vs. TCP na comunicação DNS #
UDP para DNS: A abordagem padrão #
Consultas DNS são normalmente enviadas por UDP na porta 53. UDP é um protocolo leve e sem conexão que se destaca no envio de pequenos pacotes de dados com sobrecarga mínima. Uma solicitação DNS típica envolve um cliente enviando uma consulta a um servidor DNS, e o servidor respondendo com o endereço IP correspondente.
O motivo pelo qual o UDP é o padrão para DNS é sua eficiência:
- Baixa latência: O UDP não exige que uma conexão seja estabelecida antes da transmissão de dados, minimizando o atraso.
- Comunicação sem estado:Cada solicitação é independente, o que a torna rápida e simples.
- Pequenas cargas úteis: As solicitações de DNS geralmente são muito pequenas, e o UDP pode lidar com isso de forma eficaz e sem congestionamento.
No entanto, o UDP tem limitações, notavelmente em termos de confiabilidade. Pacotes podem ser perdidos ou chegar fora de ordem. Além disso, respostas DNS podem exceder o limite de tamanho típico do UDP (512 bytes para DNS tradicional, estendido para 4096 bytes com EDNS0), levando ao truncamento.
TCP para DNS: Uma alternativa confiável #
TCP, diferentemente de UDP, é um protocolo orientado a conexão que fornece transmissão de dados confiável estabelecendo um handshake e garantindo a entrega de pacotes em sequência. Tradicionalmente, DNS sobre TCP era reservado para transferências de zona entre servidores DNS (operações AXFR/IXFR) e cenários de fallback quando uma resposta DNS era muito grande para UDP.
O RFC 5966 esclarece que os servidores DNS devem suportar DNS sobre TCP para todas as consultas, não apenas para casos excepcionais. Os principais motivos para usar TCP no DNS incluem:
- Grandes Respostas: DNSSEC (DNS Security Extensions) e outros aprimoramentos levaram a mensagens DNS maiores. Se uma resposta exceder o limite de tamanho UDP, o cliente alterna para TCP para recuperar a resposta completa.
- Confiabilidade: O TCP garante que todos os pacotes sejam recebidos na ordem correta, resolvendo os problemas de confiabilidade encontrados no UDP.
Como funciona a comunicação DNS sobre UDP e TCP #
Comunicação UDP #
- O cliente envia uma consulta DNS ao servidor via UDP.
- O servidor processa a consulta e envia uma resposta, normalmente dentro do limite de 512 bytes.
- Se a resposta do servidor exceder esse limite e ocorrer truncamento, o cliente reenviará a consulta via TCP.
Comunicação TCP #
- O cliente inicia uma conexão TCP com um handshake de três vias.
- A consulta é enviada e o servidor responde com a resposta DNS completa.
- A conexão é fechada após a comunicação, embora conexões persistentes possam ser mantidas para múltiplas consultas para reduzir a sobrecarga.
Balanceamento de carga para UDP e TCP em DNS #
O balanceamento de carga desempenha um papel crucial em garantir a confiabilidade, disponibilidade e escalabilidade dos serviços DNS, especialmente em ambientes de alto tráfego. Ele pode distribuir solicitações DNS em vários servidores, otimizar o uso de recursos e melhorar os tempos de resposta. Para o tráfego DNS, o balanceamento de carga UDP e TCP são importantes, mas os métodos diferem um pouco.
Balanceamento de carga de tráfego UDP DNS #
Como o UDP é stateless, o balanceamento de carga para UDP envolve balancear solicitações individuais sem manter o controle dos estados de conexão. Existem várias técnicas para balanceamento de carga UDP:
- DNS Round Robin: O resolvedor de DNS distribui consultas aleatoriamente entre vários servidores DNS, fornecendo uma maneira simples de distribuir o tráfego.
- Roteamento Anycast: Com anycast, o mesmo endereço IP é anunciado por vários servidores DNS em diferentes locais. A rede roteia a consulta do cliente para o servidor mais próximo, reduzindo a latência.
- Hash de IP: Alguns balanceadores de carga usam o endereço IP de origem para rotear o tráfego consistentemente para o mesmo servidor DNS. Isso garante que o mesmo cliente seja roteado para o mesmo servidor por um determinado período de tempo.
Balanceamento de carga de tráfego TCP DNS #
Como o TCP é orientado à conexão, o balanceador de carga deve rastrear o estado de cada conexão para garantir que todos os pacotes de uma sessão sejam roteados para o mesmo servidor DNS. As técnicas para balanceamento de carga TCP incluem:
- Persistência de Sessão: Também conhecido como “sticky sessions”, esse método garante que todos os pacotes da mesma sessão TCP sejam roteados para o mesmo servidor. Isso é crítico para manter a integridade da conexão TCP.
- Balanceamento de carga da camada 4: Os balanceadores de carga na Camada 4 (Camada de Transporte) distribuem o tráfego com base em endereços IP e números de porta TCP/UDP, garantindo que cada conexão ou sessão seja manipulada pelo mesmo servidor.
- Balanceamento de carga da camada 7:Na Camada 7 (Camada de Aplicação), o balanceador de carga pode inspecionar a própria consulta DNS e tomar decisões de roteamento inteligentes com base no conteúdo da consulta, como o nome de domínio solicitado.
Vantagens da implementação do balanceamento de carga para DNS #
- Redundância e failover: O balanceamento de carga garante que, se um servidor falhar, outros possam assumir o controle sem problemas, fornecendo resolução de DNS contínua.
- Global: À medida que a demanda aumenta, servidores adicionais podem ser adicionados por trás do balanceador de carga sem alterar as configurações do lado do cliente.
- Distribuição geográfica: Com o roteamento anycast, os servidores DNS podem ser distribuídos em diferentes localizações geográficas, permitindo que os clientes alcancem o servidor mais próximo para uma resolução mais rápida.
Configuração de balanceamento de carga DNS sobre UDP e DNS sobre TCP #
Para balancear a carga do tráfego DNS de forma eficaz usando o Relianoid Load Balancer, você pode configurar dois farms separados especificamente para DNS-over-UDP e DNS-over-TCP, ambos na porta 53. O farm DNS-over-UDP manipula consultas DNS padrão, que são tipicamente menores e sem conexão, otimizando para velocidade e menor uso de recursos. Enquanto isso, o farm DNS-over-TCP é configurado para consultas DNS que excedem o tamanho típico do pacote UDP (512 bytes) ou exigem entrega mais confiável, como transferências de zona. Ao segmentar esses farms com base no protocolo, você garante o manuseio eficiente de cada tipo de tráfego na porta 53, aproveitando a distribuição de carga específica do protocolo, ao mesmo tempo em que aumenta a resiliência e reduz os gargalos.
Para isso, crie as Fazendas na seção LSLB> Fazendas com as L4xNAT perfil e NAT modo conforme mostrado abaixo.

Conclusão #
O RFC 5966 enfatiza a importância de dar suporte ao TCP para consultas DNS, além das solicitações tradicionais baseadas em UDP. Enquanto o UDP continua sendo o protocolo principal devido à sua eficiência, o TCP fornece confiabilidade para grandes respostas e consultas DNSSEC. Para que os serviços DNS sejam escaláveis e resilientes, especialmente sob tráfego pesado, implementar estratégias de balanceamento de carga para tráfego UDP e TCP é essencial. Essas técnicas de balanceamento de carga garantem que os serviços DNS permaneçam responsivos, seguros e capazes de lidar com a crescente demanda.
Ao entender e aproveitar ambos os protocolos juntamente com o balanceamento de carga adequado, os administradores de rede podem criar infraestruturas de DNS robustas que atendam às demandas modernas da Internet.