[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