Rodando servidor proxy-cache DNS com Unbound


Autor: Patrick Brandão

Motivação: ao rodar qualquer software no Linux, a resolução de DNS e feita pela libresolv, que faz a leitura do /etc/host.conf e /etc/resolv.conf para obter o IP do servidor DNS.

Assim, a resolução de nomes requer envio de pacotes para fora do host e aguarda pela resposta, que pode demorar (latência alta) ou não ser respondida por problemas na rede entre o host e o servidor DNS (remoto)

A libresolv não possui suporte a cache, ou seja, se você precisar consultar um domínio (www.google.com) dezenas de vezes em um segundo, todas as vezes ela terá que enviar a pergunta ao servidor DNS para obter a mesma resposta.

Rodando um servidor proxy-cache DNS no host linux você garante que a libresolv envie os pedidos para um software rodando no mesmo host mas que ficará por conta de consultar 1 ou mais servidores, e salvando os resultados obtidos em cache, economizando banda e tempo nas próximas requisições aos mesmos nomes.

O resultado dessa implementação é uma maior velocidade no inicio das conexões do servidor.

OBS:
Você não está criando um servidor recursivo, pare resoluções de nomes para sua rede!
Mas ao final Rudimar Remontti vai explicar como tornar ele recursivo.

Distribuição utilizada:
Debian 11 (Bullseye) 64 bits instalação mínima

Instalando Unbound

Configurando
A configuração abaixo visa consumir recursos mínimos e atender somente os softwares do próprio host.

Acima criamos um forward do domínio slack.com indo para um DNS diferente (1.1.1.1 e 1.0.0.1) do padrão 8.8.8.8 e 8.8.4.4

Reinicie o serviço para carregar as novas configurações

Instale o pacote dnsutils para ter ferramentas de testes

Testando IPv4

Testando IPv6

Configurando o Linux para usar o servidor DNS na loopback como servidor DNS

Tornando recursivo

Contribuição extra por: Rudimar Remontti
Caso deseje tornar recursivo para os demais hosts da sua rede este servidor, primeira coisa que você deve ter em mente que se este servidor conter IPs públicos o mesmo será responsivo para todo o planeta terra e alguns “aliGenigenas”. Então o mínimo que você deve ter é um firewall, protegendo a porta 53 tcp/udp para responder apenas para sua rede.

Abaixo de:

Adicione

Abaixo de:

Adicione os prefixos da sua rede

Desta forma abrindo conexão para os IPs da interface “200.200.200.200” e “2000:bebe:cafe::f07e”

Reinicie o serviço para carregar as alterações

Pode consultar se as porta estão sendo ouvidas:

Firewall
Porém mesmo que você tenha setados seus prefixos em access-control a porta 53 estará respondendo para todo o mundo. Para fechar elas use o nfttables que por padrão já vem no Debian 11 no lugar do iptables. Você pode instalar o mesmo com apt se necessário.

Edite o arquivo do nftables

Ajuste para ficar assim e em elements insira todos seus prefixos autorizados.

Habilite o mesmo para iniciar com o boot e reinicie.

Consulte se seu firewall foi carregado com o comando:

Retorno:

Pronto espero que tenha gostado! Agradeço ao meu parceiro Patrick!

Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!

Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato clique aqui.

Abraço!

Rudimar Remontti

Trabalho atualmente como Gerente de Redes em um Provedor de Internet no Rio Grande do Sul.

Você pode gostar...

10 Resultados

  1. arlinho disse:

    systemctl restart unbound
    Job for unbound.service failed because the control process exited with error code.
    See “systemctl status unbound.service” and “journalctl -xeu unbound.service” for details.

  2. Daniel disse:

    Fiquei em duvida em relação ao Tamanho do cache, pelo que vi aqui no blog, ficou no padrão
    msg-cache-size: 2m
    rrset-cache-size: 1m
    Mas não seria interessante deixar uma quantidade maior de armazenamento ? 200mb ou 1GB ?
    Se alguém puder comentar sobre agradeço.

  3. francesco disse:

    A adição de um DNS autoritativo melhora a latência ou a velocidade da consulta?

  4. Anderson Carlos disse:

    Como habilitar o DNSSEC?
    Já fiz de tudo e não funciona.

  5. Olá Anderson.
    como proxy-cache a performance é melhor, pois alem de fazer cache local vc se aproveita do cache já alimentado nos servidores de DNS apontados no forward. Se você optar pelos hints (servidores raiz) a latência irá aumentar um pouco pois para cada nome a ser resolvido seu DNS local terá que consultar toda a árvore de DNS mundial, com acessos internacionais com latencia acima de 120ms.
    Nesse link há explicações desenhadas:
    http://manual.slackmini.com.br/#dns-client

  6. Anderson Carlos disse:

    pode deixar pelo servidores raiz em vez do forward-zone?
    E qual e a vantagem com e sem forward-zone?

    • Andrio disse:

      Boa pergunta, tbm fiquei curioso

    • Renan Aquino disse:

      Seria esta resposta, para sua pergunta!
      como proxy-cache a performance é melhor, pois alem de fazer cache local vc se aproveita do cache já alimentado nos servidores de DNS apontados no forward. Se você optar pelos hints (servidores raiz) a latência irá aumentar um pouco pois para cada nome a ser resolvido seu DNS local terá que consultar toda a árvore de DNS mundial, com acessos internacionais com latencia acima de 120ms.
      Nesse link há explicações desenhadas:
      http://manual.slackmini.com.br/#dns-client

Deixe um comentário

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