[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