O DNSmasq emerge como uma ferramenta valiosa para otimizar o armazenamento em cache de requisições DNS em ambientes Linux, embora sua configuração possa apresentar alguns desafios iniciais.
O cache DNS desempenha um papel crucial na aceleração do processo de consulta DNS, que traduz um nome de domínio de um site em seu respectivo endereço IP. Ao utilizar um servidor de cache DNS local, particularmente em redes com múltiplos usuários acessando o mesmo site, observamos uma notável redução no tempo de carregamento das páginas web.
Antes de avançarmos, vamos explorar o conceito fundamental de cache DNS.
O Que é Cache DNS?
O DNS, ou Sistema de Nomes de Domínio, serve como um guia mestre da internet, mapeando todos os sites acessíveis publicamente para seus respectivos endereços IP. Imagine-o como uma lista telefônica abrangente. Graças ao DNS, não precisamos memorizar sequências numéricas complexas para acessar nossos sites favoritos, facilitando a interação da infraestrutura de rede com os recursos da web.
Quando você solicita que um mecanismo de pesquisa exiba uma página web, uma série de processos ocorre nos bastidores.
Embora seu sistema tenha acesso a diversos servidores DNS externos, a existência de uma réplica central do DNS acelera a resolução e a transmissão de dados. É nesse cenário que o cache DNS se destaca.
O cache DNS intervém antes que a solicitação seja enviada para a internet, gerenciando a resolução de identidade para domínios acessados frequentemente e recentemente. Este processo agiliza significativamente o procedimento de navegação.
Sempre que é necessário resolver um endereço IP para um nome de domínio, o servidor DNS é acionado. Isso pode sobrecarregar o servidor, especialmente quando um site recebe um grande volume de solicitações simultâneas.
O cache DNS é uma solução eficaz para mitigar o número de requisições DNS e melhorar os tempos de resposta. Ele armazena localmente endereços IP já resolvidos e informações associadas aos hosts. Na próxima vez que o mesmo IP ou nome de domínio precisar ser resolvido, o resultado é recuperado diretamente do cache, eliminando a necessidade de uma nova consulta DNS.
Como o Cache DNS Contribui para Solucionar Problemas Intermitentes de Resolução DNS em Instâncias Amazon EC2?
A maioria dos sistemas Linux não vem com um cache DNS local habilitado por padrão. Isso significa que todas as solicitações DNS são enviadas diretamente ao resolvedor DNS fornecido pela Amazon, que possui uma capacidade limitada de processamento simultâneo. Problemas de resolução DNS podem ocorrer quando há um excesso de solicitações.
Ao implementar um cache DNS local, você pode reduzir o uso da CPU e da rede, minimizando erros de resolução DNS. Um cache DNS local serve para responder a consultas de recursos DNS externos, como Amazon RDS e S3.
Instâncias do Amazon EC2, ao serem conectadas a Amazon VPCs, utilizam o protocolo DHCP para solicitar um endereço de servidor DNS.
Quando se utiliza a Amazon VPC para construir uma nuvem privada virtual, o Route 53 DNS Resolver emprega um resolvedor na VPC para atender a solicitações DNS de instâncias EC2 rodando em endereços web locais da Amazon VPC e entradas em zonas gerenciadas de forma privada. O resolvedor executa buscas recursivas em servidores DNS públicos para todos os outros endereços da web.
Um cache DNS age como um registro temporário de consultas DNS anteriores, que nosso sistema pode consultar rapidamente ao acessar um site. Ele mantém um registro de cada sessão, tanto a atual quanto as subsequentes. Esse mecanismo acelera a resolução de domínios, evitando erros em instâncias Linux do Amazon EC2.
Muitos usuários optam pelo serviço Route 53 da Amazon para DNS ao acessar a AWS. Sua facilidade de uso e custo quase nulo são atrativos. No entanto, há várias razões pelas quais um usuário pode preferir um servidor DNS local.
Embora o bind9 seja uma solução robusta para configurar um servidor de cache DNS local, o dnsmasq se destaca por sua simplicidade de instalação e configuração, tanto em instâncias EC2 quanto em máquinas locais.
O Que é dnsmasq?
DNSmasq é uma ferramenta versátil para Linux, que oferece suporte a DNS, DHCP, TFTP e cache DNS. Seu design compacto e leve o torna ideal para redes e firewalls com recursos limitados.
Sua configuração e instalação são excepcionalmente simples. Para configurar DNS e DHCP para sub-redes, o dnsmasq se apresenta como uma solução flexível e eficiente.
É possível definir identificadores atribuídos por DHCP e suas instruções correspondentes para cada servidor ou um controlador principal. O dnsmasq oferece suporte tanto a opções de DHCP dinâmico quanto estático. Sua portabilidade permite gerenciar DNS e DHCP para até 1.000 clientes.
Quando uma consulta DNS é recebida, o dnsmasq a responde usando o cache local ou a encaminha para um servidor DNS autoritativo. Além de atender a solicitações de DNS para endereços configurados via DHCP, ele examina o arquivo /etc/hosts para identificar nomes de hosts locais que não constam no DNS público.
O uso do dnsmasq, em comparação com o cache DNS integrado no navegador, melhora substancialmente a velocidade da navegação na internet. Sua simplicidade de configuração e baixo consumo de espaço em disco o tornam ideal para ambientes embarcados com recursos limitados.
Características do dnsmasq
- Facilita a integração de servidores DNS internos, direcionando consultas para servidores autorizados específicos.
- Aprimora a confiabilidade e reduz a carga do servidor por meio da configuração de um servidor DNS local.
- Permite configurar o DNS para endpoints protegidos por firewall de maneira simples e independente do DNS utilizado pelo provedor de internet.
- A operação de pesquisa é interrompida rapidamente se a porta vinculada à internet estiver inacessível durante a verificação de DNS no computador.
- Possibilita a coleta periódica de dados do servidor de resolução de domínio subjacente por meio de consultas PPP (Protocolo Ponto a Ponto) ou DHCP.
Instalação
Antes de iniciar a instalação e configuração do dnsmasq, é necessário desativar o serviço de resolução do sistema.
systemctl stop systemd-resolved
Você pode também mascará-lo, evitando que ele seja iniciado automaticamente ao reiniciar o sistema.
systemctl mask systemd-resolved
Após desativar o systemd-resolved, o próximo passo é a instalação do dnsmasq. Ele geralmente já está presente em diversas distribuições Linux. Caso contrário, você pode instalá-lo manualmente. Inicie um terminal e execute o seguinte comando:
sudo apt-get install dnsmasq
Se você for usuário do yum, utilize o seguinte comando:
sudo yum install -y dnsmasq
Este comando instala e inicia o dnsmasq em segundo plano automaticamente.
Após a instalação bem-sucedida, você pode verificar o status do dnsmasq com o seguinte comando:
systemctl status dnsmasq
Se o status estiver como “ativo (em execução)”, isso indica que a instalação foi concluída com sucesso e o serviço está configurado para a porta 53. Se o status indicar “inativo (morto)”, reinicie a máquina Ubuntu e o dnsmasq novamente para corrigir o problema.
Configuração
Agora, o dnsmasq está pronto para ser configurado em sua máquina como servidor DNS de cache local. O arquivo de configuração padrão está localizado em /etc/dnsmasq.conf. É necessário modificar este arquivo para configurar o dnsmasq no sistema.
Utilize este comando para abrir e editar o arquivo de configuração:
nano /etc/dnsmasq.conf
A edição do arquivo de configuração requer privilégios de root. Remova todo o conteúdo, incluindo os comentários, e copie e cole a seguinte configuração, salvando o arquivo:
port=53 domain-needed bogus-priv listen-address=127.0.0.1 expand-hosts domain=geek-demo.com cache-size=1000
Aqui está um breve resumo de cada parâmetro:
- Porta: Define a porta que o Dnsmasq utiliza para receber requisições DNS.
- domain-needed: Envia apenas nomes de domínio para o servidor DNS upstream.
- bogus-priv: Impede o encaminhamento de domínios e portas.
- listen-address: Define o endereço do servidor de nomes. O localhost (127.0.0.1) é usado como padrão para configurar um servidor DNS local.
- domínio: Configura os domínios que o dnsmasq anexa a identificadores curtos.
- cache-size: Define o tamanho máximo permitido para o cache DNS.
Após realizar as modificações necessárias, salve e feche o arquivo de configuração. O próximo passo é editar o arquivo /etc/resolv.conf para adicionar o endereço de resolução do host local. Use o seguinte comando para abrir o arquivo com o editor nano:
nano /etc/resolv.conf
Este arquivo lista todos os servidores de nomes que seu sistema utiliza para resolução de endereços. Adicione o endereço de loopback a esta lista, incluindo “nameserver 127.0.0.1” na primeira linha.
Salve e saia do arquivo de configuração. Para aplicar as alterações, reinicie o utilitário dnsmasq.
systemctl restart dnsmasq
Testando o Servidor de Cache DNS Local
O teste do servidor DNS local é simples. Abra um terminal e use o comando dig para inspecionar o cache DNS. Na primeira execução do comando dig, o resultado será comum.
┌──(root💀kali)-[/home/writer] └─# dig etechpt.com.com 1 ⚙ ; <<>> DiG 9.18.0-2-Debian <<>> etechpt.com.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 623 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;etechpt.com.com. IN A ;; ANSWER SECTION: etechpt.com.com. 227 IN A 172.66.43.163 etechpt.com.com. 227 IN A 172.66.40.93 ;; Query time: 31 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP) ;; WHEN: Sat Oct 15 07:52:49 EDT 2022 ;; MSG SIZE rcvd: 74
Observe que o tempo de consulta é de aproximadamente 31 ms ao consultar o servidor de nomes upstream. Execute o mesmo comando dig novamente e você notará uma redução significativa no tempo de consulta.
┌──(root💀kali)-[/home/writer] └─# dig etechpt.com.com 1 ⚙ ; <<>> DiG 9.18.0-2-Debian <<>> etechpt.com.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21942 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;etechpt.com.com. IN A ;; ANSWER SECTION: etechpt.com.com. 281 IN A 172.66.40.93 etechpt.com.com. 281 IN A 172.66.43.163 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP) ;; WHEN: Sat Oct 15 07:58:10 EDT 2022 ;; MSG SIZE rcvd: 74
Neste caso, o tempo de consulta é de 0 ms. Isso ocorre porque o dnsmasq armazenou os dados após a pesquisa inicial, e todas as pesquisas subsequentes são instantâneas graças ao uso do cache. Reiniciar o dnsmasq é necessário para excluir o cache DNS armazenado.
Conclusão
Neste artigo, abordamos o processo de instalação e configuração do dnsmasq para atuar como um servidor DNS local. Você também pode ter interesse em aprender sobre como alterar os servidores DNS para otimizar a navegação em diferentes sistemas operacionais.