Update: Eu deveria ter verificado o log de alterações do BIND para começar, vejo esta entrada entre as duas versões que eu estava usando:
4957. The default setting for "dnssec-validation" is now
"auto", which activates DNSSEC validation using the
IANA root key. (The default can be changed back to
"yes", which activates DNSSEC validation only when keys
are explicitly configured in named.conf, by building
BIND with "configure --disable-auto-validation".)
[GL #30]
Aparentemente, o DNSSEC foi "desligado" por padrão até recentemente, pelo menos na minha configuração que não possui chaves "explicitamente configuradas no named.conf".
Eu estou deixando a questão em aberto porque eu ainda gostaria de descobrir porque o DNSSEC funciona quando eu tenho named.conf
apontou para o Google (8.8.8.8), mas não quando eu apontou para o meu roteador local (192.168.1.1).
Após uma atualização recente dos meus pacotes do Arch Linux, descobri que as solicitações de DNS não estavam mais funcionando. Eu tracei o problema para o meu local LIGAR configuração. (Eu tenho /etc/resolv.conf
apontando para localhost (127.0.0.1) para que eu possa interceptar DNSBL consultas e encaminhá-las diretamente para os servidores relevantes, evitando ocorrências de regras URIBL_BLOCKED em Spamassassin )
o named
saída mencionada "cadeia de confiança quebrada", o que me levou a esta discussão . Então eu tive a ideia de brincar com Opções dnssec-enable e dnssec-validate em named.conf
. Definir as duas opções como "yes" faz com que funcione novamente, mas, ironicamente, essa combinação tem o efeito de desativar DNSSEC . Aparentemente, definindo dnssec-enable
para "sim" e dnssec-validate
to "auto" força o DNSSEC e recria o problema para mim.
O problema desaparece quando mudo a linha "encaminhadores" de 192.168.1.1 (meu roteador) para 8.8.8.8 (DNS público do Google).
Aqui está o meu named.conf
:
options {
# 10 Aug 2018 setting dnssec-validation to "no" or "yes"
# makes it work; "auto" breaks it
dnssec-validation yes;
directory "/var/named";
pid-file "/run/named/named.pid";
allow-recursion { 127.0.0.1; };
allow-transfer { none; };
allow-update { none; };
version none;
hostname none;
server-id none;
forward only;
forwarders {
# problem goes away if I change this to 8.8.8.8
192.168.1.1;
};
};
zone "localhost" IN {
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "127.0.0.zone";
};
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" {
type master;
file "localhost.ip6.zone";
};
zone "255.in-addr.arpa" IN {
type master;
file "empty.zone";
};
zone "0.in-addr.arpa" IN {
type master;
file "empty.zone";
};
zone "." IN {
type hint;
file "root.hint";
};
Esta é a saída de named
quando faço uma pesquisa com falha. Estou incluindo a saída para duas pesquisas separadas porque elas parecem ser um pouco diferentes, apenas a segunda menciona "cadeia de confiança quebrada":
$ ping google.com
ping: google.com: Name or service not known
$ sudo named -d 2 -f -g -u named
...
14-Aug-2018 23:24:55.701 fetch: google.com/A
14-Aug-2018 23:24:55.744 delete_node(): 0x7f82b150b010 google.com (bucket 3)
14-Aug-2018 23:24:55.744 delete_node(): 0x7f82b150b010 google.com (bucket 3)
14-Aug-2018 23:24:55.744 delete_node(): 0x7f82b150d010 ns1.google.com (bucket 0)
14-Aug-2018 23:24:55.744 delete_node(): 0x7f82b150d010 ns2.google.com (bucket 11)
14-Aug-2018 23:24:55.744 delete_node(): 0x7f82b150d010 ns3.google.com (bucket 2)
14-Aug-2018 23:24:55.744 delete_node(): 0x7f82b150d010 ns4.google.com (bucket 5)
14-Aug-2018 23:24:55.744 fetch: com/DS
14-Aug-2018 23:24:55.746 no valid RRSIG resolving 'com/DS/IN': 192.168.1.1#53
14-Aug-2018 23:24:55.746 delete_node(): 0x7f82b150b010 google.com (bucket 3)
14-Aug-2018 23:24:55.746 no valid DS resolving 'google.com/A/IN': 192.168.1.1#53
14-Aug-2018 23:24:55.746 client @0x7f82ac0aa5e0 127.0.0.1#54841 (google.com): query failed (SERVFAIL) for google.com/IN/A at query.c:10721
14-Aug-2018 23:24:55.746 fetch completed at resolver.c:4017 for google.com/A in 0.045257: SERVFAIL/no valid DS [domain:.,referral:1,restart:2,qrysent:1,timeout:0,lame:0,quota:0,neterr:0,badresp:0,adberr:0,findfail:0,valfail:1,qminsteps:1]
14-Aug-2018 23:24:55.747 client @0x7f82a402d9d0 127.0.0.1#54841 (google.com): servfail cache hit google.com/A (CD=0)
14-Aug-2018 23:24:55.747 client @0x7f82a402d9d0 127.0.0.1#54841 (google.com): query failed (SERVFAIL) for google.com/IN/A at query.c:6112
...
15-Aug-2018 00:20:10.998 fetch: google.com/A
15-Aug-2018 00:20:11.040 delete_node(): 0x7f267b6e7160 ns2.google.com (bucket 0)
15-Aug-2018 00:20:11.040 delete_node(): 0x7f267b6e70f0 ns1.google.com (bucket 11)
15-Aug-2018 00:20:11.041 delete_node(): 0x7f267b6e7160 ns4.google.com (bucket 14)
15-Aug-2018 00:20:11.041 delete_node(): 0x7f267b6e70f0 ns3.google.com (bucket 9)
15-Aug-2018 00:20:11.041 validating google.com/A: bad cache hit (com/DS)
15-Aug-2018 00:20:11.041 broken trust chain resolving 'google.com/A/IN': 192.168.1.1#53
15-Aug-2018 00:20:11.041 client @0x7f26740aa5e0 127.0.0.1#58953 (google.com): query failed (SERVFAIL) for google.com/IN/A at query.c:10721
15-Aug-2018 00:20:11.041 fetch completed at resolver.c:5276 for google.com/A in 0.042605: broken trust chain/broken trust chain [domain:.,referral:1,restart:1,qrysent:1,timeout:0,lame:0,quota:0,neterr:0,badresp:0,adberr:0,findfail:0,valfail:1,qminsteps:1]
15-Aug-2018 00:20:11.041 client @0x7f2674055aa0 127.0.0.1#58953 (google.com): servfail cache hit google.com/A (CD=0)
15-Aug-2018 00:20:11.041 client @0x7f2674055aa0 127.0.0.1#58953 (google.com): query failed (SERVFAIL) for google.com/IN/A at query.c:6112
Com o acima named.conf
Posso resolver dnssec-failed.org
que, pelo que entendi, é uma coisa ruim:
$ host dnssec-failed.org 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:
dnssec-failed.org has address 69.252.80.75
Eu não posso resolver isso se eu usar 8.8.8.8 como o encaminhador.
Estou curioso sobre a causa do problema e da solução, mas também estou curioso para saber como depurar corretamente uma pesquisa de host com falha. Talvez todas as informações necessárias estejam na saída de depuração que eu postei, ou talvez haja uma ferramenta que eu não saiba, como traceroute
para DNS ou algo assim.