Estamos vendo níveis altos (mais de 2000 solicitações / segundo) de consultas DNS de nossos servidores DNS em cache para servidores externos. Isso pode ter acontecido por um longo tempo - isso veio à luz recentemente devido a problemas de desempenho com o nosso firewall. Conversando com colegas de outras instituições, fica claro que estamos fazendo mais consultas do que elas.
Meu pensamento inicial foi que o problema era a falta de armazenamento em cache das respostas do SERVFAIL. Tendo feito mais investigações, fica claro que o problema é um alto nível de solicitações para o registro com falha dos servidores DNS do Windows. Parece que, em nosso ambiente, uma única consulta a um dos servidores DNS do Windows para um registro de uma zona que retorna SERVFAIL resulta em um fluxo de solicitações para esse registro de todos dos servidores DNS do Windows. O fluxo de pedidos não pára até que eu adicione uma zona vazia falsa em um dos servidores Bind.
Meu plano de amanhã é verificar a configuração dos servidores DNS do Windows - eles devem apenas estar encaminhando para os servidores Bind de cache. Eu acho que devemos ter algo errado lá, pois não posso acreditar que ninguém mais tenha acertado isso se não for um erro de configuração. Eu atualizarei esta questão depois disso (possivelmente fechando esta e abrindo uma nova, mais clara).
Nossa configuração é um par de servidores de cache que executam o Bind 9.3.6, que são usados diretamente pelos clientes ou por meio de nossos controladores de domínio do Windows. Os servidores de armazenamento em cache passam consultas para nossos servidores DNS principais que estão executando 9.8.4-P2 - esses servidores são autoritativos para nossos domínios e passam consultas para outros domínios para servidores externos.
Comportamento que estamos vendo é que consultas como essa abaixo não estão sendo armazenadas em cache. Eu verifiquei isso observando o tráfego de rede dos servidores DNS usando o tcpdump.
[root@dns1 named]# dig ptr 119.49.194.173.in-addr.arpa.
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.6 <<>> ptr 119.49.194.173.in-addr.arpa.
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 8680
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;119.49.194.173.in-addr.arpa. IN PTR
;; Query time: 950 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Mar 9 13:34:20 2014
;; MSG SIZE rcvd: 45
A consulta do servidor do Google mostra diretamente que estamos recebendo uma resposta RECUSADA.
[root@dns1 named]# dig ptr 119.49.194.173.in-addr.arpa. @ns4.google.com.
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.6 <<>> ptr 119.49.194.173.in-addr.arpa. @ns4.google.com.
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 38825
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;119.49.194.173.in-addr.arpa. IN PTR
;; Query time: 91 msec
;; SERVER: 216.239.38.10#53(216.239.38.10)
;; WHEN: Sun Mar 9 13:36:38 2014
;; MSG SIZE rcvd: 45
Isso não está acontecendo apenas com endereços do Google ou pesquisas reversas, mas uma alta proporção das consultas é para esses intervalos (suspeito que seja por causa de um recurso de relatório do Sophos).
Nossos servidores DNS devem armazenar em cache essas respostas negativas? Eu li o link , mas não vi nada sobre REFUSED. Nós não especificamos lame-ttl no arquivo de configuração, então eu esperaria que o padrão fosse 10 minutos.
Eu acredito que isso (a falta de cache) é um comportamento esperado. Não entendo porque os outros sites com os quais falei não estão vendo a mesma coisa. Eu tentei um servidor de teste executando a última versão estável do Bind e que mostra o mesmo comportamento. Eu também tentei o Unbound e isso também não armazenou em cache o SERVFAIL. Há alguma discussão sobre isso em djbdns aqui , mas a conclusão é que a funcionalidade foi removida.
Existem configurações na configuração do Bind que podemos alterar para influenciar esse comportamento? lame-ttl não ajudou (e nós estávamos rodando com o padrão de qualquer maneira).
Como parte da investigação, adicionei algumas zonas vazias falsas em nossos servidores DNS em cache para cobrir os intervalos que levam à maioria das solicitações. Isso diminuiu o número de solicitações para servidores externos, mas não é sustentável (e também parece errado). Paralelamente, pedi a um colega para obter logs dos servidores DNS do Windows, para que possamos identificar os clientes que fazem as solicitações originais.