Quanto tempo normalmente dura o cache DNS negativo?

44

Se um servidor DNS procurar um registro e ele estiver ausente, geralmente "armazenará em cache negativamente" o fato de esse registro estar ausente e não tentará procurá-lo novamente por um tempo. Não vejo nada na RFC sobre o TTL no cache negativo, então acho que é um tanto arbitrário. No mundo real, por quanto tempo esses registros negativos permanecem?

Leopd
fonte

Respostas:

60

O TTL para cache negativo não é arbitrário. Ele é retirado do registro SOA na parte superior da zona à qual o registro solicitado teria pertencido, se ele existisse. Por exemplo:

example.org.    IN      SOA     master-ns1.example.org. Hostmaster.example.org. (
            2012091201 43200 1800 1209600 86400 )

O último valor no registro SOA ("86400") é a quantidade de tempo que os clientes são solicitados a armazenar em cache resultados negativos example.org..

Se um cliente solicitar doesnotexist.example.org., ele armazenará em cache o resultado por 86400 segundos.

Celada
fonte
1
@ MarcusAdams ... e um cliente não fará cache negativo de nenhum registro no SERVFAIL. O TTL no registro SOA é, de fato, usado para cache negativo. É por isso que o registro SOA é produzido nas respostas NXDOMAIN.
Celada
3
@MarcusAdams Correct. Se você receber um SERVFAIL, não receberá SOA nem TTL. Não há resposta para você fazer cache negativo. Se em vez você obter um NXDOMAIN do que você faz ter uma SOA, com um TTL. Você armazenará em cache negativo essa resposta pela duração do TTL.
Celada
Beartrap para usuários DNS RBL: como as respostas RBL tendem a ser mínimas (e a implementação do servidor DNS possivelmente não conforme), você pode não obter um SOA com a resposta NXDOMAIN. Isso pode significar que seu cache DNS não armazena em cache NXDOMAIN (ou seja, os que não são spammers): - /
mr.spuratic
Na verdade MIN(SOA TTL, SOA.MINIMUM), não é simplesmente SOA.MINIMUM. (Ver tools.ietf.org/html/rfc2308#section-5 )
Håkan Lindqvist em
12

Isso depende da sua definição exata de uma "consulta negativa", mas em ambos os casos, isso está documentado em rfc2308 «Armazenamento em cache negativo de consultas DNS (DNS NCACHE)» :


NXDOMAIN

  • Se a resolução for bem-sucedida e resultar em NXDOMAIN, a resposta virá com um SOAregistro, que conteria o NXDOMAINTTL (tradicionalmente conhecido como MINIMUMcampo). rfc2308#section-4

SERVFAIL

  • Se a resolução não for bem-sucedida e resultar em um tempo limite ( SERVFAIL) , ela também poderá não ser armazenada em cache e, em todas as circunstâncias, NÃO DEVE ser armazenada em cache por mais de 5 minutos. rfc2308#section-7.1

    Observe que, na prática, armazenar em cache esses resultados pelos 5 minutos permitidos completos é uma ótima maneira de diminuir a experiência de um cliente, caso o servidor de cache sofra ocasionalmente breves problemas de conectividade (e torne-o facilmente vulnerável a uma amplificação de negação de serviço, alguns segundos de inatividade resultariam em algumas partes do DNS inativas por cinco minutos completos).

    Antes do BIND 9.9.6-S1 (lançado em 2014), aparentemente, SERVFAILnão era armazenado em cache. a878301(04/09/2014)

    Por exemplo, no momento da sua pergunta e em todas as versões do BIND lançadas antes de 2014, o resolvedor recursivo do BIND NÃO fez cache SERVFAIL, se se acredita que o commit acima e a documentação sobre a primeira introdução no 9.9.6-S1 .

    No BIND mais recente, o padrão servfail-ttlé 1se a configuração é codificada para um limite máximo de 30s(no lugar do limite obrigatório de RFC de 300s). 90174e6(17/10/2015)

    Além disso, a seguir, algumas citações dignas de nota sobre o assunto:

    O resultado das respostas do SERVFAIL em cache incluiu algumas situações em que isso foi prejudicial à experiência do cliente, principalmente quando as causas do SERVFAIL sendo apresentadas ao cliente eram transitórias e de um cenário em que uma nova tentativa imediata da consulta seria uma ação mais apropriada.

    A segunda tática é afirmar que os clientes DNS generalizados farão algo particularmente ruim quando não conseguirem acessar todos os servidores DNS. O problema com esse argumento é que a afirmação é falsa. Qualquer cliente desse tipo está claramente com problemas e não poderá sobreviver no mercado: considere o que acontece se os roteadores do cliente ficarem inativos por pouco tempo ou se a rede do cliente for temporariamente inundada.


Em resumo, uma NXDOMAINresposta seria armazenada em cache conforme especificado na SOAzona aplicável, enquanto SERVFAILé improvável que seja armazenada em cache ou, se armazenada em cache, será no máximo um número de dois dígitos.

cnst
fonte
1

Há uma RFC dedicada a este tópico: RFC 2308 - Armazenamento em cache negativo de consultas DNS (DNS NCACHE) .

A seção relevante a ser lida é 5 - Caching Negative Answers, que afirma:

Como respostas normais, as respostas negativas têm um tempo de vida (TTL). Como não há registro na seção de respostas à qual esse TTL possa ser aplicado, o TTL deve ser carregado por outro método. Isso é feito incluindo o registro SOA da zona na seção de autoridade da resposta. Quando o servidor autoritativo cria esse registro, seu TTL é obtido no mínimo do campo SOA.MINIMUM e TTL do SOA. Este TTL diminui de maneira semelhante a uma resposta em cache normal e ao atingir zero (0) indica que a resposta em cache negativa NÃO DEVE ser usada novamente.

Em primeiro lugar, vamos identificar o SOA.MINIMUMe SOA TTL descrito no RFC. O TTL é o número antes do tipo de registro IN( 900segundos no exemplo abaixo). Enquanto o mínimo é o último campo no registro ( 86400segundos no exemplo abaixo).

$ dig serverfault.com soa @ns-1135.awsdns-13.org +noall +answer +multiline

; <<>> DiG 9.11.3-1ubuntu1.8-Ubuntu <<>> serverfault.com soa @ns-1135.awsdns-13.org +noall +answer +multiline
;; global options: +cmd
serverfault.com.    900 IN SOA ns-1135.awsdns-13.org. awsdns-hostmaster.amazon.com. (
                1          ; serial
                7200       ; refresh (2 hours)
                900        ; retry (15 minutes)
                1209600    ; expire (2 weeks)
                86400      ; minimum (1 day)
                )

Agora vamos ver alguns exemplos, a serverfault.comzona é ilustrativa, pois possui servidores autoritativos de dois provedores diferentes configurados de maneira diferente.

Vamos encontrar os servidores de nomes com autoridade para a serverfault.comzona:

$ host -t ns serverfault.com
serverfault.com name server ns-860.awsdns-43.net.
serverfault.com name server ns-1135.awsdns-13.org.
serverfault.com name server ns-cloud-c1.googledomains.com.
serverfault.com name server ns-cloud-c2.googledomains.com.

Em seguida, verifique o registro SOA usando um servidor de nomes aws:

$ dig serverfault.com soa @ns-1135.awsdns-13.org | grep 'ANSWER SECTION' -A 1
;; ANSWER SECTION:
serverfault.com.    900 IN  SOA ns-1135.awsdns-13.org. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400

A partir disso, podemos ver que o TTL do registro SOA é 900segundos enquanto o valor TTL negativo é 86400segundos. O valor SOA TTL de 900é menor, portanto esperamos que esse valor seja usado.

Agora, se consultarmos um servidor autoritativo em busca de um domínio inexistente, obteremos uma resposta sem resposta e com um registro SOA na seção de autoridade:

$ dig nxdomain.serverfault.com @ns-1135.awsdns-13.org

; <<>> DiG 9.11.3-1ubuntu1.8-Ubuntu <<>> nxdomain.serverfault.com @ns-1135.awsdns-13.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 51948
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;nxdomain.serverfault.com.  IN  A

;; AUTHORITY SECTION:
serverfault.com.    900 IN  SOA ns-1135.awsdns-13.org. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400

;; Query time: 125 msec
;; SERVER: 205.251.196.111#53(205.251.196.111)
;; WHEN: Tue Aug 20 15:49:47 NZST 2019
;; MSG SIZE  rcvd: 135

Quando um resolvedor recursivo (em cache) recebe essa resposta, ele analisa o registro SOA no AUTHORITY SECTIONe usa o TTL desse registro para determinar quanto tempo deve armazenar em cache o resultado negativo (nesse caso, 900segundos).

Agora vamos seguir o mesmo procedimento com um servidor de nomes do Google:

$ dig serverfault.com soa @ns-cloud-c2.googledomains.com | grep 'ANSWER SECTION' -A 1
;; ANSWER SECTION:
serverfault.com.    21600   IN  SOA ns-cloud-c1.googledomains.com. cloud-dns-hostmaster.google.com. 1 21600 3600 259200 300

Você pode ver que os servidores de nomes do Google têm valores diferentes para os valores SOA TTL e Negative TTL. Nesse caso, o TTL negativo de 300é menor que o SOA TTL de 21600. Portanto, o servidor do Google deve usar o valor mais baixo no AUTHORITY SECTIONregistro SOA ao retornar uma NXDOMAINresposta:

$ dig nxdomain.serverfault.com @ns-cloud-c2.googledomains.com

; <<>> DiG 9.11.3-1ubuntu1.8-Ubuntu <<>> nxdomain.serverfault.com @ns-cloud-c2.googledomains.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 25920
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;nxdomain.serverfault.com.  IN  A

;; AUTHORITY SECTION:
serverfault.com.    300 IN  SOA ns-cloud-c1.googledomains.com. cloud-dns-hostmaster.google.com. 1 21600 3600 259200 300

;; Query time: 130 msec
;; SERVER: 216.239.34.108#53(216.239.34.108)
;; WHEN: Tue Aug 20 16:05:24 NZST 2019
;; MSG SIZE  rcvd: 143

Como esperado, o TTL do registro SOA na NXDOMAINresposta é 300segundos.

O exemplo acima também demonstra como é fácil obter respostas diferentes para a mesma consulta. A resposta que um resolvedor de armazenamento em cache individual acaba usando é a que servidor de nomes autoritativo foi consultado.

Nos meus testes, também observei que alguns resolvedores recursivos (cache) não retornam um AUTHORITY SECTIONcom um registro SOA com um TTL decrescente para solicitações subsequentes, enquanto outros o fazem.

Por exemplo, o resolvedor de cloudflare faz (observe o decrescente valor TTL):

$ dig nxdomain.serverfault.com @1.1.1.1 | grep 'AUTHORITY SECTION' -A 1
;; AUTHORITY SECTION:
serverfault.com.    674 IN  SOA ns-1135.awsdns-13.org. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400
$ dig nxdomain.serverfault.com @1.1.1.1 | grep 'AUTHORITY SECTION' -A 1
;; AUTHORITY SECTION:
serverfault.com.    668 IN  SOA ns-1135.awsdns-13.org. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400

Enquanto o resolvedor padrão em um AWS VPC responderá com uma seção de autoridade apenas na primeira solicitação:

$ dig nxdomain.serverfault.com @169.254.169.253 | grep 'AUTHORITY SECTION' -A 1
;; AUTHORITY SECTION:
serverfault.com.    300 IN  SOA ns-cloud-c1.googledomains.com. cloud-dns-hostmaster.google.com. 1 21600 3600 259200 300
$ dig nxdomain.serverfault.com @169.254.169.253 | grep 'AUTHORITY SECTION' -A 1 | wc -l
0

Nota: Esta resposta aborda o comportamento das NXDOMAINrespostas.

Glossário:

htaccess
fonte