Como usar o Dnsmasq para criar um cache de DNS local
Autor: Davidson Paulo | Publicado: 2012-08-13T10:00:00-03:00





Se você entende o básico de Internet sabe o que é e para que serve o DNS. O que talvez você ainda não saiba é o quão importante o DNS é para um acesso a Internet rápido e responsivo.

Na figura ao lado você pode conferir a sequência seguida na hora de baixar um site. Primeiro, o navegador envia o nome do site para o servidor DNS, que devolve o endereço IP correspondente. Então, o navegador envia a solicitação para o servidor que hospeda o site, e este, por sua vez, devolve o código HTML que será processado e exibido na tela de seu computador.

Observe que, durante os passos 1 e 2, o site ainda não está sendo baixado e, portanto, nada está sendo exibido na tela do usuário. Dessa forma, problemas de comunicação com seu servidor DNS podem fazer sua internet parecer lenta, por causa do que chamamos de latência.


Latência é aquele intervalo de tempo entre você mandar acessar o site e ele começar a ser efetivamente carregado. Mesmo uma internet ultra rápida pode apresentar latência. Para exemplificar melhor, imagine que você queira fazer o download de um arquivo, clica no botão "Baixar" e, só depois de 5 segundos, o download começa, a uma taxa de 5 MB/s. Nesse caso, a velocidade da conexão com a Internet está boa, mas há uma latência de 5 segundos.

No caso de downloads de arquivos grandes, a latência não importa tanto quanto a velocidade da conexão. Já no caso da navegação, a latência é muito mais importante. Quando se está navegando na internet, o que mais irrita é a sensação de que a coisa "não anda": você clica no link, o navegador indica que está carregando mas não acontece nada.

No Linux, podemos reduzir essa latência utilizando um cache local de DNS, que pode ser configurado facilmente com o Dnsmasq. Para isso, primeiramente instale o pacote dnsmasq. No Fedora e similares, utilize o yum, no Ubuntu e similares, use o apt-get:

# yum install dnsmasq
ou
$ sudo apt-get install dnsmasq

Depois, renomeie o arquivo /etc/resolv.conf para /etc/resolv.dnsmasq:

# mv /etc/resolv.{conf,dnsmasq}

Em seguida, ajuste suas configurações de rede, mudando o servidor DNS para 127.0.0.1. Se sua rede é configurada manualmente, edite o arquivo /etc/resolv.conf e deixe-o com o seguinte conteúdo:

nameserver 127.0.0.1

Por fim, edite o arquivo /etc/dnsmasq.conf e deixe-o com o seguinte conteúdo:

resolv-file=/etc/resolv.dnsmasq
interface=lo
bind-interfaces
cache-size=10000
strict-order
all-servers
rebind-localhost-ok
clear-on-reload
no-negcache
log-queries

Agora, basta iniciar o serviço e configurá-lo para iniciar junto com o sistema:

# /etc/init.d/dnsmasq start
No Fedora 17 em diante:
# systemctl enable dnsmasq.service
No Fedora 16 e anteriores e similares:
# chkconfig dnsmasq on
No Ubuntu e similares:
$ sudo update-rc.d dnsmasq defaults

O funcionamento do Dnsmasq é bem simples. Uma vez que ele esteja configurado, todas as requisições DNS do sistema serão encaminhadas para ele. Se o domínio solicitado estiver no banco de dados local, a resposta será enviada sem necessidade de conectar-se à internet, do contrário, a consulta será enviada para todos os servidores listados no arquivo /etc/resolv.dnsmasq. A primeira resposta positiva será enviada para o sistema e devidamente gravada no banco de dados local, para que as próximas consultas não precisem sair para a internet.

Você pode utilizar qualquer número de servidores externos que quiser, para garantir que sempre haverá um servidor disponível para responder as consultas que não estiverem no banco de dados local do Dnsmasq. Para isso, basta editar o arquivo /etc/resolv.dnsmasq e depois reiniciar o serviço:

# /etc/init.d/dnsmasq restart
ou
$ sudo /etc/init.d/dnsmasq restart

Uma dica é utilizar os servidores DNS do Google e do OpenDNS, cujos IPs estão abaixo.


 8.8.8.8;
 8.8.4.4;
 208.67.222.222;
 208.67.220.220.


O Dnsmasq também pode funcionar como servidor DHCP, mas não vou falar disso nessa postagem. Para mais informações, acesse o site oficial e leia a página de manual do comando dnsmasq:

$ man dnsmasq

E aí, gostou? Deixe seu comentário. Um grande abraço e até a próxima!


    lastnextpost('2012/04/sumico-mudancas-e-outras-novidades.html',
                 '2012/08/como-sincronizar-o-historico-do-shell-entre-varios-terminais-no-Linux.html');