Cache DNS

Esse artigo foi inspirado em um artigo de outro blog.

Para quem não sabe, o DNS é o responsável por transformar uma URL, como por exemplo aleteia.wordpress.com, em um endereço de IP, do tipo 62.154.x.x. Ele foi criado por facilitar a localização de sites. Seria mais ou menos como ao invés de ter que decorar o número de telefone da pessoa, apenas ter que saber o nome dela.

Acontece que recentemente tenho tido alguns problemas com o servidor DNS do meu provedor. Ou ele responde normalmente, ou ele responde mas demora um bom tanto ou ele sequer responde.

Como meu modem está sendo usado como roteador e a intercace web para configuração dele é, na melhor das hipóteses uma caca, não consigo alterar o servidor DNS que ele está usando. A solução que eu encontrei foi utilizar um cache DNS.

Um cache DNS nada mais é um servidor DNS rodando na sua máquina que vai armazenando os endereços que você entra. Sendo assim, a primeira vez em que tento entrar em um site, ainda há chance de eu ficar esperando a resolução do nome, mas a segunda vez já vai bem mais rápido.

Veremos agora como instalar e configurar um cache DNS, mas antes, só para deixar avisado, esse guia serve para computadores rodando Linux (me concentrei no Ubuntu para o qual o artigo foi escrito originalmente e no Archlinux, ditro que uso) e provavelmente em outros Unices, como FreeBSD e talvez até o MacOS X. Outro fato importante: esse guia funciona com certeza para computadores que usem DHCP para registrar o seu IP, mas não funcionará tão garantidamente em outros casos.

Agora a parte divertida. Começamos instalando um pacote chamado dnsmasq. No Ubuntu esse pacote se encontra no repositório ‘Universal’, no Archlinux nos pacotes de ‘extra’.

# Ubuntu e Debian-likes 
sudo apt-get install dnsmasq  

#Archlinux 
sudo pacman -S dnsmasq

Pronto, seu servidor DNS está instalado. Agora a configuração. Primeiro, abra o arquivo /etc/dnsmasq.conf e descomente (tire o #) da seguinte linha:

listen-address=127.0.0.1

No caso do Archlinux, essa linha veio como

listen-address=

apenas, então adicione 127.0.0.1 nela.

Os próximos passos servirão para o Ubuntu apenas (não consegui encontrar esses arquivos no Archlinux, mesmo instalando dhcp e dhclient, mas consegui contornar esse problema). Abra o arquivo /etc/dhcp3/dhclient.conf e faça com que a seção abaixo fique exatamente como está aqui:

#supersede domain-name “fugue.com home.vix.com”; 
prepend domain-name-servers 127.0.0.1; 
request subnet-mask, broadcast-address, time-offset, routers, 
domain-name, domain-name-servers, host-name, 
netbios-name-servers, netbios-scope;

Próxima vez que o dhclient for rodado, ele irá acrescentar ‘127.0.0.1’ ao seu /etc/resolv.conf, arquivo responsável por manter a lista de servidores DNS que seu computador deve usar.

O jeito de contornar a falta deste arquivo no Archlinux foi bem simples. O arquivo /etc/resolv.conf’ é reescrito quando o dhcpcd roda, então simplesmente alterá-lo na mão não resolveria. Então, ao invés de usar esse arquivo, eu o copiei com o nome de /etc/dnsmasq-servers.conf e editei o arquivo /etc/dnsmasq.conf para lê-lo no lugar de /etc/resolv.conf. Basta editar a seguinte linha:

resolv-file=/etc/dnsmasq-servers.conf

O próximo passo só será necessário na primeira vez de rodar o dnsmasq. Abra o arquivo /etc/resolv.conf ou /etc/dnsmasq-servers.conf dependendo do caso e adicione ‘nameserver 127.0.0.1’ acima dos outros nameservers, assim:

search lan
nameserver 127.0.0.1
nameserver 192.168.1.254

Lembrando que isso é só um exemplo. Com exceção de ‘nameserver 127.0.0.1’ não precisam e provavelmente não serão iguais.

No Archlinux ainda teremos que adicionar o daemon dnsmasq ao rc.conf. Abra o arquivo /etc/rc.conf e na linha ‘DAEMONS=’ adicione @dnsmasq.

Agora basta iniciar o servidor:

#Archlinux
/etc/rc.d/dnsmasq start

#Ubuntu
/etc/init.d/dnsmasq start

Caso você use DSL e autenticação por PPP:
Nesse caso isso pode funcionar, são necessárias apenas algumas alterações nos arquivos de configuração. Copie /etc/resolv.conf para /etc/dnsmasq-servers.conf e edite esse novo arquivo para que ele contenha apenas:

nameserver 127.0.0.1

Depois edite /etc/dnsmasq.conf e altere as seguintes linhas:

resolv-file=/etc/dnsmasq-servers.conf
listen-address=127.0.0.1

Agora edite /etc/ppp/peers/dsl-provider e comente a linha

#usepeerdns
Anúncios

6 Respostas para “Cache DNS

  1. Oiciruam dezembro 14, 2007 às 11:48 am

    Cara preciso da sua Ajuda. Sou novo ná area e fiz a configuração conforme vc falou. so q ta dando um erro:

    Restarting DNS forwarder and DHCP server: dnsmasqdnsmasq: failed to create listening socket: Endereço já está em uso
    (failed to start).

    pode me ajudar aguardo resposta.

    Grato.

  2. André Ramaciotti dezembro 14, 2007 às 2:25 pm

    Quando você roda que comando que isso acontece?

    • Wander Rogerio maio 13, 2009 às 10:15 am

      Eu tambem estou como o mesmo problema quando digito
      ubuntu server
      sudo /etc/init.d/dnsmasq start
      desde já obrigado…..

      • André Ramaciotti maio 13, 2009 às 10:30 am

        Me parece que o dnsmasq no ubuntu veio configurado para servir como servidor dhcp também nas versões recentes. Provavelmente está faltando alterar alguma linha do arquivo de configuração. Se alguém souber o que deve ser feito dê um toque aí, não tenho mais usado o dnsmasq.

  3. Abdias maio 29, 2011 às 1:53 pm

    Muito boa sua dica, mas somente por curiosidade, onde fica realmente o cache dns? Onde posso localiza-lo?

    • _andre maio 29, 2011 às 2:17 pm

      Se eu não me engano (não tenho tido mais problemas com DNS, então faz tempo que não uso o cache), o cache é perdido quando o servidor é reinicializado. Portanto, imagino que o cache fique na memória do processo mesmo.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

%d blogueiros gostam disto: