Quando executo, dig example.com
a resposta retorna com SERVER: 192.168.0.1
, mesmo nas execuções subsequentes. Isso implica que o DIG está sempre fazendo uma chamada de rede para resolver o registro DNS.
Eu (um tanto ignorantemente) presumi que meu sistema operacional estaria armazenando em cache o registro DNS de acordo com seu TTL e que o DIG estaria usando esse cache.
O DIG ignora o TTL/não faz uso de caches por padrão? Em caso afirmativo, como posso fazer com que o DIG use um cache e honre os TTLs?
Antecedentes / Problema XY:
Eu quero uma maneira de resolver rapidamente os registros DNS TXT para um script nginx que estou escrevendo. O script encaminhará as solicitações com base no conteúdo desses registros TXT, portanto, gostaria que o método que estou usando respeitasse os TTLs e usasse registros armazenados em cache localmente quando apropriado.
dig
(apalpador de informações de domínio), como explica o manual, é uma ferramenta flexível para interrogar servidores de nomes DNS , não consulta ou usa seu cache DNS local (e/ouhosts
arquivo), mas consulta diretamente o servidor de nomes para o qual você o aponta. Por padrão, esse será o(s) de/etc/resolv.conf
.Para usar o cache DNS do seu sistema a partir da linha de comando, use
getent hosts [ip-address | hostname]
ou em scripts/código, use uma versão nativa daman 3 gethostbyname
chamada do sistema.Reconhecidamente, isso não ajuda você com mais nada além
A
AAAA
ouPTR
registros.Na
dig
saída, o rótulo SERVER é o endereço IP do servidordig
de nomes usado, que nunca terá um TTL...Eu executo meu próprio servidor DNS de cache localmente, em vez de usar um resolvedor público do ISP ou do Google (8.8.8.8), principalmente para spamassassin, que tem a vantagem de ser local, mas o cache também não é pré-semeado/preenchido por outros usuários .
Esta é realmente uma questão de resolução de sistema operacional, mas você não especificou o sistema operacional. Como
dig
é mencionado, vou presumir que estamos trabalhando com algum tipo de UNIX aqui.Os sistemas operacionais baseados em UNIX não implementam um cache DNS dentro do próprio kernel. Existem alguns tópicos que precisam ser resumidos antes de entrarmos em como isso é realmente implementado.
NSS
As chamadas para a biblioteca do resolvedor geralmente implementam suas pesquisas usando Name Service Switch (NSS), um sistema modular para especificar fontes de dados a serem usadas e a ordem em que são pesquisadas. Você pode encontrar uma lista dessas pilhas de módulos em
/etc/nsswitch.conf
. Para referência, aquele com o qual estamos preocupados aqui éhosts
.Não é recomendado brincar com a
hosts
entrada a/etc/nsswitch.conf
menos que você realmente saiba o que está fazendo. Reordenar esses módulos pode resultar em coisas esquisitas como DNS consultado antes do/etc/hosts
arquivo!nscd
Antes de consultar a pilha de módulos, o NSS verifica a presença de um
nscd
soquete em execução e tenta consultá-lo. Senscd
estiver configurado para manter um cache para o banco de dados NSS em questão, é possível que uma entrada em cachenscd
seja retornada sem que os módulos NSS sejam consultados. A maioria das distribuições Linux que conheço não habilitam o cache dohosts
banco de dados por padrão e/etc/nscd.conf
devem ser personalizadas.Dito isso, deve-se notar que muitos administradores consideram o
nscd
daemon "stock" não confiável, pelo menos no Linux. Há pelo menos uma implementação alternativa por aí. Sua milhagem pode variar.Juntando tudo
Sabendo do exposto, a ordem de pesquisa para o banco de dados de hosts funciona nesta ordem:
nscd
(se estiver em execução, seu soquete está presente e o cache de hosts está ativado)/etc/nsswitch.conf
Isso nos leva a onde
dig
se enquadra nessa equação. Você pode se referir a toda a resposta do HBrujin (dig
não usa NSS, apenas fala sobre TCP / IP), mas o problema é que não há cache para NSS, a menos que 1)nscd
esteja em execução e 2) esteja configurado para armazenar em cache ohosts
banco de dados.tl;dr
A complexidade de fazer com que o cache DNS funcione bem no NSS geralmente é o motivo pelo qual a maioria dos administradores adota a solução "mais simples" de executar seu próprio servidor DNS recursivo. Você não precisa saber nada sobre NSS. Apenas aponte
/etc/resolv.conf
para o seu novo cache DNS brilhante e deixe-o esconder os males do NSS de você. (pelo menos até você precisar aprender como funciona a integração do LDAP)