[GTER] DNSSEC e named abortando, alguem já viu isso???

Hugo Koji Kobayashi koji at registro.br
Mon Sep 17 09:51:09 -03 2007


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



More information about the gter mailing list