
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.options
para 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-ttl
emax-ncache-ttl
para 300 segundos. (referência) - Mude
listen-on-v6 { any; };
paralisten-on-v6 { localhost; };
para que o servidor não seja usado por outros sistemas. (referência) - Edite o sistema
/etc/resolv.conf
para incluir apenasnameserver 127.0.0.1
aplicativos 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-ttl
e 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.