Montando o cache de DNS

Neste artigo, mostro duas maneiras de montar um servidor local com cache de DNS:(1) sem forward - cujas solicitações que não forem respondidas pelo servidor, são passadas para os root servers e (2) com forward - cujas solicitações não encontradas no cache, são repassadas para um servidor de DNS externo, juntamente com algumas diretivas de acesso.

[ Hits: 45.058 ]

Por: Perfil removido em 27/09/2012


Diretivas de controle de acesso



Vamos então, refinar nosso servidor com algumas diretivas de controle de acesso no arquivo /etc/bind/named.conf.options:

Directory → Diretório padrão do BIND 9 após a instalação do pacote bind.

Dnssec-validation → Habilite esta opção e cole a chave raiz no arquivo: /etc/bind/named.conf.

Esta chave pode ser obtida no seguinte endereço:
Allow-query → Definir as máquinas que podem fazer consultas no servidor DNS.

Allow-query-on → Definir as interfaces que podem fazer consultas no DNS.

Recursion → Caso esta opção não estiver inserida, ela terá o parâmetro 'yes' como default, fazendo com que o servidor possa fazer consultas recursivas, caso solicitado por algum cliente e não apenas consultas interativas, caso o parâmetro seja 'no'.

Allow-query-cache → Endereços de máquinas que poderão ter acesso ao cache do DNS.

Allow-querycache-on → Interfaces de rede que poderão consultar o cache do DNS, neste caso, com a opção 'any', qualquer interface instalada no servidor.

Dump-file → Arquivo gerado com o comando:

# rnc dumpdb -cache

Podendo assim, visualizar todo os registros de cache do servidor DNS.

Statistics-file → Arquivo gerado com o comando:

# rndc stats

Possui o registro das estatísticas de comunicação do servidor.

Zone-statistics → O DNS vai coletar todas as estatísticas de zonas e incrementar no arquivo "named.stats".

Forwarders → Possui o IP do DNS primário e secundário do seu provedor de acesso para possíveis consultas, caso não encontre no cache do servidor DNS.

Listen-on-v6 → Permite especificar as interfaces que podem consultar o seu servidor DNS no padrão IP versão 6.

Mais opções de diretivas de controle de acesso, podem ser encontradas em:
Concluindo o arquivo: /etc/bind/named.conf.options, sem comentários, ficaria assim:

options {
directory "/var/cache/bind/";
dnssec-validation   yes;
allow-query { 127.0.0.1/8; };
allow-query-on { interface do servidor na rede local; };
recursion yes;
allow-query-cache { localhost; faixa da rede local };
allow-query-cache-on { any; };
dump-file "/varcache/bind/named_dump.db
statistics-file "/var/cache/bind/named.stats";
zone-statistics   yes;
forwarders { IP primário, IP secundário; };
forward first;
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
};


* Atenção: O funcionamento do comando rndc, após a instalação do pacote bind, não precisa ser configurado utilizando a ferramenta rndc-confgen.

O comando rndc é utilizado remotamente, e de forma segura para controlar certos aspectos do servidor de nomes. Com ela, é possível:
  • Parar o serviço,
  • Recarregar uma zona específica,
  • Obter informações acerca do estado do servidor,
  • Ativar e desativar modo de depuração,
  • Executar algumas outras ações de controle.

A comunicação se dá através de um canal criptografado e autenticado através de uma chave simétrica de criptografia.

Esta chave de criptografia está configurada automaticamente através do arquivo: /etc/bind/rndc.key, após a instalação do pacote bind.

Página anterior    

Páginas do artigo
   1. Cache
   2. Diretivas de controle de acesso
Outros artigos deste autor

Script de firewall e análise de log

Construindo um portscanner TCP com Python

Gerenciando redes com Perl e SNMP

PuTTY - Release 0.66 - Parte V - (Final)

Trabalhos gráficos no Biglinux

Leitura recomendada

GNU/Linux integrado ao AD do Windows Server 2003

Pós-instalação no Slackware 10

Bluetooth no Debian 4.0

Configurando uma placa de rede no Linux

Recuperando e/ou adaptando o GRUB do Sabayon Linux

  
Comentários
[1] Comentário enviado por liciomz em 18/10/2012 - 11:33h

Vou testar, muito obrigado.

[2] Comentário enviado por fmpfmp em 01/08/2013 - 13:53h

Esse arquivo de configuração está errado. Se você utilizar o parâmetro "forward first" o servidor vai sempre enviar as requisições para os servidores do provedores, e caso não haja resposta, ele mesmo responderá. Ou seja, o cache quase nunca será acessado. O certo é apagar esta linha ou por "only" ao invés de "first". E utilizar DNSSEC para um servidor de cache local é inútil.

[3] Comentário enviado por removido em 01/08/2013 - 19:05h


[2] Comentário enviado por fmpfmp em 01/08/2013 - 13:53h:

Esse arquivo de configuração está errado. Se você utilizar o parâmetro "forward first" o servidor vai sempre enviar as requisições para os servidores do provedores, e caso não haja resposta, ele mesmo responderá. Ou seja, o cache quase nunca será acessado. O certo é apagar esta linha ou por "only" ao invés de "first". E utilizar DNSSEC para um servidor de cache local é inútil.


Boa Tarde,

Primeiramente, gostaria de dizê-lo que o meu arquivo de configuração não está errado.
Porque no próprio artigo está muito claro que caso o servidor receba uma requisição e a resposta NÃO esteja no cache do DNS ele vai utilizar as diretivas que estão configuradas como forwarders ===> forward first que é a padrão.
Caso eu retire a diretiva forwarders o meu cache de DNS nunca vai consultar os servidores
de DNS externos que é muito mais rico que qualquer cache de DNS pois o cache fica armazenado
em memória RAM e sem esta diretiva o meu cache de DNS vai tentar resolver tudo por conta própria causando
uma seria perda de desempenho por parte das resoluções. Ou seja é inviável retirar esta diretiva.

A diferença entre forward first e forward only é a seguinte : Caso o meu servidor DNS receba uma consulta cuja a resposta não está no cache ele vai utilizar a diretiva forward first ou seja consulte os DNS externos e se não for atendido ou seja se não for encontrado a resposta ele mesmo ( cache DNS) responderá. Já a opção "only" faz com que apenas encaminhe as requisições p/ o DNS externo caso não esteja no próprio cache do DNS mas neste caso ele (cache DNS) não irá responder caso a resposta não for encontrada .


E o DNSSEC é uma opção válida para qualquer DNS recursivo que no meu caso é o cache de DNS.

qualquer dúvida acesse este link:

http://www.zytrax.com/books/dns/ch7/queries.html#forward

forward is only relevant in conjunction with a valid forwarders statement. If set to 'only' the server will only forward queries, if set to 'first' (default) it will send the queries to the forwarder and if not answered will attempt to answer the query. This statement may be used in a zone, view or a global options clause.
.
grato.

[4] Comentário enviado por angkor em 05/09/2013 - 11:33h

Bom dia,

Parabéns pelo artigo.

Eu testei e obtive os seguintes erros:

options {
directory "/var/cache/bind";
allow-query { localhost; };
allow-query-on { 192.168.0.252; };
forwarders { 200.211.11.100; 200.211.11.101; };
forward first;
;
Na maquina cliente "192.168.0.31" eu tentei pingar o terra.
ping terra.com.br
A solicitação ping não pôde encontrar o host terra.com.br. Verifique o nome e tente
novamente.

O server bloqueava
Sep 5 11:23:23 samba4 named[8838]: client 192.168.0.31#64165: query (cache) 'terra.com.br/A/IN' denied


Então alterei para:
options {
directory "/var/cache/bind";
allow-query { 192.168.0.0/24; };
allow-query-on { 192.168.0.252; };
forwarders { 200.211.11.100; 200.211.11.101; };
forward first;
;

e o servidor loga o seguinte:
Sep 5 11:24:38 samba4 named[8881]: error (network unreachable) resolving 'terra.com.br/DS/IN': 2001:12f8:4::10#53


[5] Comentário enviado por removido em 05/09/2013 - 15:01h


[4] Comentário enviado por angkor em 05/09/2013 - 11:33h:

Bom dia,

Parabéns pelo artigo.

Eu testei e obtive os seguintes erros:

options {
directory "/var/cache/bind";
allow-query { localhost; };
allow-query-on { 192.168.0.252; };
forwarders { 200.211.11.100; 200.211.11.101; };
forward first;
;
Na maquina cliente "192.168.0.31" eu tentei pingar o terra.
ping terra.com.br
A solicitação ping não pôde encontrar o host terra.com.br. Verifique o nome e tente
novamente.

O server bloqueava
Sep 5 11:23:23 samba4 named[8838]: client 192.168.0.31#64165: query (cache) 'terra.com.br/A/IN' denied


Então alterei para:
options {
directory "/var/cache/bind";
allow-query { 192.168.0.0/24; };
allow-query-on { 192.168.0.252; };
forwarders { 200.211.11.100; 200.211.11.101; };
forward first;
;

e o servidor loga o seguinte:
Sep 5 11:24:38 samba4 named[8881]: error (network unreachable) resolving 'terra.com.br/DS/IN': 2001:12f8:4::10#53



Boa Tarde,

Reginaldo apesar de não conhecer as configurações da sua rede, este artigo serve como referência para montar um servidor

de DNS recursivo com a finalidade de fazer apenas o cache das solicitações feitas pelos usuários de uma máquina local onde esteja

instalado o Bind 9 ou para uma simples rede onde o Bind 9 esteja instalado junto ao gateway da rede ou seja a máquina que

onde esteja ligado o modem. Nas opções allow-query, allow-recursion e outras não utilizei nenhuma faixa de rede como exemplo,

mas no teu caso acredito que ficaria assim:

allow-query { 127.0.0.1; 192.168.0.0/24; };

allow-recursion { 127.0.0.1; 192.168.0.0/24; };

e recomendo utilizar a seguinte diretiva no arquivo de configuração:/etc/bind/named.conf.options :


// permite tanto o servidor como o gateway a utilizar a porta 53 caso exista algum bloqueio por parte do firewall.
listen-on port 53 { 127.0.0.1; 192.168.0.252; };

grato.

[6] Comentário enviado por removido em 05/09/2013 - 15:14h


[5] Comentário enviado por rulios em 05/09/2013 - 15:01h:


[4] Comentário enviado por angkor em 05/09/2013 - 11:33h:

Bom dia,

Parabéns pelo artigo.

Eu testei e obtive os seguintes erros:

options {
directory "/var/cache/bind";
allow-query { localhost; };
allow-query-on { 192.168.0.252; };
forwarders { 200.211.11.100; 200.211.11.101; };
forward first;
;
Na maquina cliente "192.168.0.31" eu tentei pingar o terra.
ping terra.com.br
A solicitação ping não pôde encontrar o host terra.com.br. Verifique o nome e tente
novamente.

O server bloqueava
Sep 5 11:23:23 samba4 named[8838]: client 192.168.0.31#64165: query (cache) 'terra.com.br/A/IN' denied


Então alterei para:
options {
directory "/var/cache/bind";
allow-query { 192.168.0.0/24; };
allow-query-on { 192.168.0.252; };
forwarders { 200.211.11.100; 200.211.11.101; };
forward first;
;

e o servidor loga o seguinte:
Sep 5 11:24:38 samba4 named[8881]: error (network unreachable) resolving 'terra.com.br/DS/IN': 2001:12f8:4::10#53



Boa Tarde,

Reginaldo apesar de não conhecer as configurações da sua rede, este artigo serve como referência para montar um servidor

de DNS recursivo com a finalidade de fazer apenas o cache das solicitações feitas pelos usuários de uma máquina local onde esteja

instalado o Bind 9 ou para uma simples rede onde o Bind 9 esteja instalado junto ao gateway da rede ou seja a máquina que

onde esteja ligado o modem. Nas opções allow-query, allow-recursion e outras não utilizei nenhuma faixa de rede como exemplo,

mas no teu caso acredito que ficaria assim:

allow-query { 127.0.0.1; 192.168.0.0/24; };

allow-recursion { 127.0.0.1; 192.168.0.0/24; };

e recomendo utilizar a seguinte diretiva no arquivo de configuração:/etc/bind/named.conf.options :


// permite tanto o servidor como o gateway a utilizar a porta 53 caso exista algum bloqueio por parte do firewall.
listen-on port 53 { 127.0.0.1; 192.168.0.252; };

grato.


gostaria de informá-lo também que quando cadastramos a faixa de rede p/ liberar o acesso
devemos cadastrar a máscara

allow-query { 192.168.0.252/24; };

com certeza os erros que você está encontrando está relacionado a falta da máscara de rede e não no meu arquivo de configuração.

obrigado.

[7] Comentário enviado por n3v3s em 17/03/2017 - 22:06h

Fabuloso, parabéns pelo artigo. Me ajudou bastante aqui em um projeto!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts