Configure um resolvedor de DNS local que armazene em cache apenas por um curto período

Configure um resolvedor de DNS local que armazene em cache apenas por um curto período

Estou trabalhando em um aplicativo que será usado para verificar se novos domínios estão configurados corretamente à medida que são configurados para hospedagem. Parte disso verifica a validade dos registros SPF, DomainKey, DKIM, etc.

Atualmente uso um TTL padrão de uma hora para a maioria desses registros. Ocasionalmente, um erro é encontrado em um dos registros e é necessário atualizá-lo. Atualmente, se acabei de testar o domínio, tenho que esperar que o registro em cache do resolvedor do sistema expire antes de poder verificar se está correto com meu aplicativo. (Sim, posso verificar manualmente, mas escrevi o aplicativo para não precisar fazer isso).

Eu gostaria de configurar um servidor DNS no sistema para atuar como um resolvedor de cache normal, exceto que ele expirará os registros em um tempo máximo definido, como cinco minutos, ou simplesmente não armazenará nenhum cache. Nem todos os domínios têm DNS hospedado em meus servidores de nomes normais, portanto, esse sistema teria que consultar os servidores de nomes autorizados para um domínio, em vez de usar resolvedores upstream (que usariam apenas seus registros em cache).

Esta máquina não está executando nenhum tipo de DNS, então posso instalar o BIND ou o djbdns (ou qualquer outra coisa, se houver uma boa sugestão.

Responder1

Obrigado a todos por suas contribuições e sugestões. Eles me direcionaram para a seguinte solução:

  • Instale o bind9.
  • Edite /etc/bind/named.conf.optionspara que os encaminhadores fiquem em branco (para que o servidor não use os registros em cache de outro servidor de cache).
  • Defina as opções max-cache-ttle max-ncache-ttlpara 300 segundos. (referência)
  • Mude listen-on-v6 { any; };para listen-on-v6 { localhost; };para que o servidor não seja usado por outros sistemas. (referência)
  • Edite o sistema /etc/resolv.confpara incluir apenas nameserver 127.0.0.1aplicativos no servidor que usem o novo servidor local.

Reiniciei o bind9 e verifiquei que está funcionando:

dev:~# dig serverfault.com

; <<>> DiG 9.5.1-P2 <<>> serverfault.com
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63591
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 0

;; QUESTION SECTION:
;serverfault.com.               IN      A

;; ANSWER SECTION:
serverfault.com.        300     IN      A       69.59.196.212

;; AUTHORITY SECTION:
serverfault.com.        300     IN      NS      ns21.domaincontrol.com.
serverfault.com.        300     IN      NS      ns22.domaincontrol.com.

;; Query time: 190 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Jul 18 03:06:24 2009
;; MSG SIZE  rcvd: 101

Os TTLs são exibidos como 300, embora os TTLs publicados do registro do serverfault.com sejam 3600.

Responder2

Basta fazer chamadas para "cavar", usar +trace muito...

O Dig agirá como um servidor DNS e fará recursão completa, sem descontar, sem necessidade de conhecer os servidores NS com antecedência e se houver um problema de delegação, você também encontrará isso.

Se for um programa do Windows, você pode baixar o Bind aquihttps://www.isc.org/download/e contém um dig.exe, Linux geralmente há um pacote de ferramentas BIND ou talvez um pacote de ferramentas nomeadas disponível que conterá dig.

Instalar um servidor DNS inteiro apenas para fazer pesquisas... uma loucura!

$ dig www.google.com +trace +nodnssec -4

; <<>> DiG 9.11.9 <<>> www.google.com +trace +nodnssec -4
;; global options: +cmd
...

...

google.com.             172800  IN      NS      ns4.google.com.
;; Received 291 bytes from 192.48.79.30#53(j.gtld-servers.net) in 22 ms

www.google.com.         300     IN      A       172.217.10.228
;; Received 59 bytes from 216.239.32.10#53(ns1.google.com) in 30 ms

Responder3

Por que não usar o dnscache (do pacote djbdns) e eliminá-lo a cada 5 minutos?

Para aqueles que não usaram djbdns e especificamente dnscache - é um resolvedor recursivo que não mantém nada no disco. Além disso, o djb criou um conjunto de ferramentas que monitoram automaticamente um programa e, se ele morrer, o programa de monitoramento o reiniciará automaticamente (e instantaneamente).

Mate-o a cada 5 minutos e Bob será seu tio...

Responder4

Você pode, como você disse, limitar o TTL mais longo com max-cache-ttle max-ncache-ttl, na cláusula de opções BIND ou em uma visualização que se aplica apenas ao seu servidor de desenvolvimento.

No entanto, isso afeta o TTL de todas as pesquisas, aumentando a rede/carga em um servidor de produção e diminuindo a resiliência do DNS.

Para BIND 9.3 e superior, se quiser apenas limpar o cache de um domínio, você pode fazer

rndc flushname <domain>

Isso libera todos os registros do domínio exato, não dos subdomínios. Veja a saída de rndc.

Claro, se você quiseralongaro TTL por qualquer motivo, isto éoutra pergunta.

informação relacionada