[GTER] DNSSEC e named abortando, alguem já viu isso???
João Carlos Mendes Luís
jonny at jonny.eng.br
Mon Sep 17 21:50:31 -03 2007
Nada como falar com quem sabe...
Valeu Hugo!
Hugo Koji Kobayashi wrote:
> Jonny,
>
> Com a inclusão de DNSSEC, algumas condições de contorno nas validações
> de respostas estão causando este tipo de problema.
>
> Há algumas semanas atrás tivemos problemas com nosso servidor
> recursivo abortando também. A diferença em relação ao seu problema é
> que nosso log reportava problema no arquivo
> "lib/dns/resolver.c". Trabalhando com o pessoal do ISC, eles chegaram
> num patch [1] para correção do problema que reportamos. Este patch
> pode ser aplicado ao bind-9.4.2b1 e já foi incorporado para release
> futuro do 9.4.2.
>
> Pelo seu email, acredito que você esteja usando o 9.3.4. Não tenho
> acesso ao cvs do Bind, mas comparando as versões do arquivo adb.c do
> 9.3.4 (1.181.2.11.2.26 2006/01/04) e do 9.4.2b1 (1.215.18.13
> 2006/08/30), acredito que foram feitas várias alterações que podem ter
> corrigido o problema que você reporta.
>
> A sugestão é utilizar a versão 9.4.2b1 com o patch abaixo. Já estamos
> utilizando esta versão há pelo menos 3 semanas sem problemas de
> estabilidade.
>
> []s
> Hugo
>
> [1]
> ------- resolver.c.patch begin
> Index: lib/dns/resolver.c
> ===================================================================
> RCS file: /proj/cvs/prod/bind9/lib/dns/resolver.c,v
> retrieving revision 1.284.18.60
> diff -u -r1.284.18.60 resolver.c
> --- lib/dns/resolver.c 18 Jun 2007 02:43:46 -0000 1.284.18.60
> +++ lib/dns/resolver.c 23 Aug 2007 04:52:27 -0000
> @@ -55,6 +55,8 @@
> #include <dns/tsig.h>
> #include <dns/validator.h>
>
> +#define inline /* XXXMPA remove for 9.4.2 */
> +
> #define DNS_RESOLVER_TRACE
> #ifdef DNS_RESOLVER_TRACE
> #define RTRACE(m) isc_log_write(dns_lctx, \
> @@ -3531,7 +3533,12 @@
> if (result != ISC_R_SUCCESS &&
> result != DNS_R_UNCHANGED)
> goto noanswer_response;
> - if (vevent->sigrdataset != NULL) {
> + if (ardataset != NULL && ardataset->type == 0) {
> + if (NXDOMAIN(ardataset))
> + eresult = DNS_R_NCACHENXDOMAIN;
> + else
> + eresult = DNS_R_NCACHENXRRSET;
> + } else if (vevent->sigrdataset != NULL) {
> result = dns_db_addrdataset(fctx->cache, node, NULL, now,
> vevent->sigrdataset, 0,
> asigrdataset);
> @@ -3829,8 +3836,29 @@
> result = dns_db_addrdataset(fctx->cache, node, NULL,
> now, rdataset, 0,
> addedrdataset);
> - if (result == DNS_R_UNCHANGED)
> + if (result == DNS_R_UNCHANGED) {
> result = ISC_R_SUCCESS;
> + if (!need_validation &&
> + ardataset != NULL &&
> + ardataset->type == 0) {
> + /*
> + * The answer in the cache is better
> + * than the answer we found, and is
> + * a negative cache entry, so we
> + * must set eresult appropriately.
> + */
> + if (NXDOMAIN(ardataset))
> + eresult = DNS_R_NCACHENXDOMAIN;
> + else
> + eresult = DNS_R_NCACHENXRRSET;
> + /*
> + * We have a negative response from
> + * the cache so don't attempt to
> + * add the RRSIG rrset.
> + */
> + continue;
> + }
> + }
> if (result != ISC_R_SUCCESS)
> break;
> if (sigrdataset != NULL) {
> @@ -3968,6 +3996,14 @@
> if (result == ISC_R_SUCCESS && have_answer) {
> fctx->attributes |= FCTX_ATTR_HAVEANSWER;
> if (event != NULL) {
> + /*
> + * Negative results must be indicated in event->result.
> + */
> + if (dns_rdataset_isassociated(event->rdataset) &&
> + event->rdataset->type == dns_rdatatype_none) {
> + INSIST(eresult == DNS_R_NCACHENXDOMAIN ||
> + eresult == DNS_R_NCACHENXRRSET);
> + }
> event->result = eresult;
> dns_db_attach(fctx->cache, adbp);
> dns_db_transfernode(fctx->cache, &node, anodep);
> ------- resolver.c.patch end
>
>
> On Sun, Sep 16, 2007 at 10:36:01PM -0300, João Carlos Mendes Luís wrote:
>> Alguem já viu esse tipo de coisa?
>>
>> Sep 16 13:42:45 roma named[4043]:
>> /usr/cvsup/RELENG_6/src/lib/bind/dns/../../../contrib/bind9/lib/dns/adb.c:497:
>> INSIST((rdtype == ((dns_rdatatype_t)dns_rdatatype_a)) || (rdtype ==
>> ((dns_rdatatype_t)dns_rdatatype_aaaa))) failed
>> Sep 16 13:42:45 roma named[4043]: exiting (due to assertion failure)
>> Sep 16 13:42:45 roma kernel: pid 4043 (named), uid 53: exited on signal 6
>>
>> Achei umas referencias onde ninguém chegou a nenhuma conclusão, mas
>> achei curioso todos eles dizerem que estavam com suspeitas ou
>> simplesmente que rodavam DNSSEC, que também liguei recentemente.
>>
>> Jonny
>>
>> --
>> João Carlos Mendes Luís - Networking Engineer - jonny at jonny.eng.br
>>
>> --
>> gter list https://eng.registro.br/mailman/listinfo/gter
> --
> gter list https://eng.registro.br/mailman/listinfo/gter
More information about the gter
mailing list