Servidor DNS recursivo com Raspberry Pi 3

O Sistema de Nomes de Domínio (DNS), funciona análogo a uma lista telefônica, consulta-se um nome em busca de um número, um conceito simples mas poderoso, imagine você tendo que digitar 104.28.25.174 ao invés de www.filipeflop.com. Quando contratamos um provedor de Internet, ele fornece alguns endereços de servidores DNS para fazermos nossas consultas, é possível também utilizar servidores DNS públicos (Google, OpenDNS e CloudFlare). Esses servidores, são chamados de recursivos, e são responsáveis por receber e responder as consultas que nós fazemos, e o fazem consultando outros servidores DNS, chamados de autoritativos, que respondem cada qual por uma parte de um nome de domínio, como www.filipeflop.com. A proposta desse post é criar um servidor DNS recursivo com Raspberry Pi, basicamente porque ele será mais rápido, pois há uma relação direta entre distância e velocidade, e não há lugar mais perto do que dentro de casa, terá mais segurança, pois estará dentro da rede local, mais distante do ataque de cibercriminosos e terá mais privacidade, pois as consultas não passarão por servidores DNS de terceiros.

Escrever esse primeiro post tem sido um desafio, fico mais a vontade fazendo do que escrevendo, mas a vida é de desafios, então vamos lá!

Material necessário

Para a montagem do servidor DNS com Raspberry Pi, vamos precisar de:

Para realizar este projeto, vamos precisar de:

No cartão SD é necessário estar gravado o sistema operacional Raspbian, de preferência o Lite. Qualquer dúvida de como isso deve ser feito, você pode consultar este post.

O que é um servidor DNS recursivo?

Mas como uma imagem vale mais do que mil palavras, elaborei um diagrama, que detalha em etapas uma consulta DNS.

Servidor DNS com Raspberry Pi

1 – navegador : Qual o endereço IP de www.filipeflop.com ?

recursivo     : Não tenho essa informação armazenada (cache), irei consultar o servidor autoritativo                            (conhecido como root server).

2 – recursivo     : Qual o servidor autoritativo responsável por .com ?

root server : Ele é conhecido como top level domain (tld) e está no endereço IP 192.35.51.30.

3 – recursivo     : Qual o servidor autoritativo responsável por filipeflop.com ?

tld              : Ele é conhecido apenas por autoritativo e está no endereço IP 173.245.59.207.

4 – recursivo     : Qual o endereço IP de www.filipeflop.com ?

autoritativo : O endereço IP de www.filipeflop.com é 100.28.25.174.

5 – recursivo     : O endereço IP de www.filipeflop.com é 100.28.25.174.

navegador : Ok, obrigado.

6 – navegador : Oi 100.28.25.174, encontrei você.

Você pode estar se perguntando, mas afinal, quanto tempo leva para fazer essa consulta DNS?, para responder essa pergunta, vejamos a imagem a seguir.

Servidor DNS recursivo

Essa consulta levou 590 milissegundos (em amarelo) para ser respondida (etapa 1 a 5), mas esse valor em vermelho, nos diz que o resultado dessa consulta ficará armazenado no servidor recursivo – processo conhecido como cache – por 300 segundos (5 minutos), ou seja, nesse período as consultas ao nome de domínio www.filipeflop.com serão respondidas diretamente pelo servidor recursivo, o que pode ser visto melhor no diagrama abaixo.

Servidor DNS com Raspberry Pi cache

1 – navegador : Qual o endereço IP de www.filipeflop.com ?

recursivo     : Opa!, tenho essa informação armazenada (cache).

5 – recursivo     : O endereço IP de www.filipeflop.com é 100.28.25.174.

navegador : Ok, obrigado.

6 – navegador : Oi 100.28.25.174, encontrei você.

O resultado dessa consulta pode ser visto na imagem a seguir.

Servidor DNS recursivo 2

Passamos do tempo de consulta anterior de 590 milissegundos, para incríveis 5 milissegundos (em amarelo), essa é a função do cache, fazer com que as consultas sejam mais rápidas.

Montando o servidor DNS recursivo com Raspberry Pi

Mas chega de teoria!, está na hora de colocar a mão na massa, para começar de fato, precisamos de uma Raspberry Pi com o sistema operacional Raspbian Lite instalado e algum tipo de acesso ao terminal, seja remoto via ssh ou local via teclado. Tudo certo?, então vamos lá :

Primeiro vamos instalar os pacotes, nosso servidor DNS recursivo será baseado no Unbound (https://www.nlnetlabs.nl/projects/unbound/about/) :

apt-get update
apt-get install unbound dnsutils

É uma boa prática fazer uma cópia do arquivo de configuração antes de editá-lo :

cp -p /etc/unbound/unbound.conf /etc/unbound/unbound.conf.default

Agora iremos editar o arquivo de configuração :

vim /etc/unbound/unbound.conf

E incluir o conteúdo abaixo no final (fique atento aos comentários!) :

server:
# Interface usada para se conectar à rede
# Essa interface recebe e responde as consultas DNS (0.0.0.0 = todas interfaces).
    interface: 0.0.0.0
# Permite o acesso apenas desses endereços IP ao servidor DNS.
# Modifique os dois primeiros octetos (192.168) de acordo com sua rede.
    access-control: 192.168.0.0/16 allow
# Nível de log. Nível 0 significa apenas erros e nível 1 fornece informações operacionais
    verbosity: 1

Vamos checar se o arquivo /etc/unbound/unbound.conf possui algum erro de sintaxe :

unbound-checkconf

Se a resposta for “unbound-checkconf: no errors in /etc/unbound/unbound.conf” está tudo certo.

E agora reinicar o serviço :

systemctl restart unbound

Pronto seu servidor DNS  com Raspberry Pi está pronto!!

Uma ótima ferramenta para testes é o dig, ele faz consultas a servidores DNS, e sua sintaxe é bem simples :

dig @ip_servidor_recursivo nome_de_domínio

Para um teste básico, você pode digitar no próprio servidor DNS com Raspberry Pi :

dig www.filipeflop.com

Ou de qualquer computador na rede local :

dig @ip_do_servidor www.filipeflop.com

Lembre-se que, como explicado anteriormente, a primeira consulta será mais demorada, pois será necessário consultar os servidores DNS autoritativos, a partir da segunda consulta a resposta virá do cache do servidor DNS recursivo, logo o resultado será algo como a imagem a seguir.

Servidor DNS com Raspberry Pi teste

Com o dig, também é possível consultar os servidores DNS dos provedores de Internet e públicos, abaixo a sequência de imagens destacando (em amarelo) o tempo de consulta (query time) dos principais servidores DNS públicos.

OpenDNS :

Servidor DNS com Raspberry Pi open DNS

CloudFlare :

Servidor DNS com Raspberry Pi cloudflare

Google :

Servidor DNS com Raspberry Pi google

Agora que instalamos e testamos, está na hora comunicar os dispositivos conectados a nossa rede local que existe um novo servidor DNS, e que ele deve ser utilizado como padrão, para isso temos 2 opções :

  • configurar o roteador, mas como a configuração pode variar, o ideal é consultar o manual para obter mais informações, ou dar um Google em “alterar dns roteador”, adicionando informações de marca e modelo se necessário.
  •  configurar o sistema operacional, embora não seja o recomendado, pois seria necessário configurar individualmente cada dispositivo, vale dar um Google em “alterar dns windows”, por exemplo.

É isso, espero que seja útil.

Gostou de criar um servidor DNS com Raspberry Pi? Ajude-nos a melhorar o blog comentando abaixo sobre este tutorial. Não se esqueça de visitar nosso Fórum para dúvidas e compartilhar suas ideias de projetos com a comunidade.

No próximo post, se você, assim como eu, possui vários dispositivos conectados a rede local, e está cansado de ficar decorando o endereço IP de cada um deles, vamos subir um nível, e configurar um servidor DNS autoritativo, assim poderemos localizar pelo nome os dispositivo conectados a nossa rede.

Até a próxima.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

3 Comentários

  1. Bom dia.
    Muito bom o artigo, parabéns.

    Só uma ressalva: Coloca também uma aplicação prática para esta solução. Assim quando alguém estiver lendo pode imaginar onde usar em dia-a-dia.

    Mais uma vez, parabéns.

    1. Boa tarde, Emerson

      Obrigado pelo comentário, é muito importante esse feedback, sua dica está anotada.

      Obrigado.

  2. Bom dia , Rafael

    Se puder, por favor descrever com mais detalhes sua dúvida talvez possa ajudá-lo.

    Obrigado.