Consultas DNS que não usam nscd para armazenamento em cache

10

Estou tentando usar o nscd (Daemon de cache de serviços de nomes) para armazenar em cache o DNS localmente, para que eu possa parar de usar o Bind para fazer isso. Eu comecei e o ntpd parece tentar usá-lo. Mas tudo o mais para os hosts parece ignorá-lo. por exemplo, se eu cavar o apache.org 3 vezes, nenhum deles atingirá o cache. Estou visualizando as estatísticas de cache nscd -gpara determinar se elas foram usadas. Também subi o nível do log de depuração para ver se consigo vê-lo atingindo e as consultas nem sequer atingem o nscd.

nsswitch.conf

# Begin /etc/nsswitch.conf
passwd: files
group: files
shadow: files

publickey: files

hosts: cache files dns
networks: files

protocols: files
services: files
ethers: files
rpc: files

netgroup: files
# End /etc/nsswitch.confenter code here

nscd.conf

#
# /etc/nscd.conf
#
# An example Name Service Cache config file.  This file is needed by nscd.
#
# Legal entries are:
#
#       logfile                 <file>
#       debug-level             <level>
#       threads                 <initial #threads to use>
#       max-threads             <maximum #threads to use>
#       server-user             <user to run server as instead of root>
#               server-user is ignored if nscd is started with -S parameters
#       stat-user               <user who is allowed to request statistics>
#       reload-count            unlimited|<number>
#       paranoia                <yes|no>
#       restart-interval        <time in seconds>
#
#       enable-cache            <service> <yes|no>
#       positive-time-to-live   <service> <time in seconds>
#       negative-time-to-live   <service> <time in seconds>
#       suggested-size          <service> <prime number>
#       check-files             <service> <yes|no>
#       persistent              <service> <yes|no>
#       shared                  <service> <yes|no>
#       max-db-size             <service> <number bytes>
#       auto-propagate          <service> <yes|no>
#
# Currently supported cache names (services): passwd, group, hosts, services
#

    logfile                 /var/log/nscd.log
    threads                 4
    max-threads             32
    server-user             nobody
#   stat-user               somebody
    debug-level             9
#   reload-count            5
    paranoia                no
#   restart-interval        3600

    enable-cache            passwd          yes
    positive-time-to-live   passwd          600
    negative-time-to-live   passwd          20
    suggested-size          passwd          211
    check-files             passwd          yes
    persistent              passwd          yes
    shared                  passwd          yes
    max-db-size             passwd          33554432
    auto-propagate          passwd          yes

    enable-cache            group           yes
    positive-time-to-live   group           3600
    negative-time-to-live   group           60
    suggested-size          group           211
    check-files             group           yes
    persistent              group           yes
    shared                  group           yes
    max-db-size             group           33554432
    auto-propagate          group           yes

    enable-cache            hosts           yes
    positive-time-to-live   hosts           3600
    negative-time-to-live   hosts           20
    suggested-size          hosts           211
    check-files             hosts           yes
    persistent              hosts           yes
    shared                  hosts           yes
    max-db-size             hosts           33554432

    enable-cache            services        yes
    positive-time-to-live   services        28800
    negative-time-to-live   services        20
    suggested-size          services        211
    check-files             services        yes
    persistent              services        yes
    shared                  services        yes
    max-db-size             services        33554432

resolv.conf

# Generated by dhcpcd from eth0
nameserver 127.0.0.1
domain westell.com
nameserver 192.168.1.1
nameserver 208.67.222.222
nameserver 208.67.220.220

como uma nota lateral, estou usando o Arch Linux.

nota: isso foi movido duas vezes, eu nunca descobri por que os aplicativos, excluindo dig, não estão atingindo o cache nscd, navegadores, mensagens instantâneas, IRC, todos deveriam ter sido, mas não o fizeram

xenoterracida
fonte
Você não precisa reiniciar a máquina para o ncsd, pode liberá-la ou reiniciar o serviço, funciona para mim.

Respostas:

14

A razão pela qual você está perdendo as ocorrências do cache é que a escavação consulta o DNS diretamente. Você pode tentar e ver se o cache funciona com o getentcomando:

getent hosts host.example.com

A execução de um DNS de cache separado é uma boa ideia, mas considere executá-lo no nível da rede, se possível. Se cada host armazenar em cache os dados separadamente, eles ainda executarão várias consultas para os mesmos hosts. O cache único soluciona esse problema.

O próprio Nscd é um daemon de armazenamento em cache para funções do NSS. Portanto, o foco é um pouco diferente dos servidores de nomes com cache nativo. Portanto, se você deseja apenas um servidor de nomes em cache, use algo diferente de nscd. Se você deseja armazenar em cache coisas como nomes de usuário e dados do host compartilhados fora do sistema DNS normal, vá para nscd.

E, para que conste, gostei bastante do powerdns resolver (pdns-resolv).

Ressu
fonte
mas outras coisas além de dig não deveriam estar usando? este é um sistema de desktop. Eu sei que alguns dos softwares (como meu gerenciador de pacotes) não implementam seu próprio cache.
Xenoterracide
Também fora do meu ISP, este é o único computador na rede;) Estou apenas tentando evitar a latência, pois minha conexão está lenta.
Xenoterracide
2
Outro software deve realmente atingir o cache nscd. Apenas certifique-se de reiniciar o software após iniciar o nscd.
Eu reiniciei o sistema .... apenas o software que aparentemente tentou usar o nscd foi o ntp.
Xenoterracide
3

Está faltando a configuração de hosts no nscd.conf. Estou postando o meu como um exemplo:

enable-cache            hosts           yes
positive-time-to-live   hosts           3600
negative-time-to-live   hosts           20
suggested-size          hosts           211
check-files             hosts           yes
persistent              hosts           yes
shared                  hosts           yes
max-db-size             hosts           33554432

Isso vai quebrar algumas coisas. A seguinte informação é do pacote Debian:

  Since this release, hosts caching in nscd is off by default: for some of the
  libc calls (gethostby* calls) nscd does not respect the DNS TTLs.  It can
  lead to system lockups (e.g. if you are using pam-ldap and change the IP of
  your authentication server) hence is not considered safe.

  See debian bug #335476 and how upstream answered to that in
  http://sourceware.org/bugzilla/show_bug.cgi?id=4428.

 -- Pierre Habouzit <[email protected]>  Sat, 28 Apr 2007 11:10:56 +0200
jneves
fonte
2
na verdade eu tenho isso, você só precisa rolar o arquivo na pergunta.
Xenoterracide
2

Não sei muito sobre o nscd, exceto que muitas vezes causava problemas nas pesquisas de DNS que eu sempre o desabilitava (ou pelo menos as pesquisas de host fazem parte dele). O Nscd permite que você defina os valores de tempo de vida útil e sei que o DNS espera "possuir" esses valores e que todos os resolvedores os honrem. Você pode obter resultados estranhos se os TTLs no DNS não forem respeitados. Minha recomendação é não usar o nscd para armazenar em cache o DNS. Parece que você já possui um servidor de nomes em cache em execução na sua caixa local, portanto, não há necessidade de armazenar em cache as pesquisas de DNS duas vezes.

Marnix A. van Ammers
fonte
Eu esperava desativá-lo, embora isso realmente não importe (minha caixa é tão poderosa que o peso da ligação para o cache não é um problema). Agora isso é parcialmente uma questão de apenas aprender algo novo. Não conseguir fazê-lo funcionar é um pouco chato.
Xenoterracide
1

O nscd não é realmente confiável para tudo, não apenas para o DNS. Vale a pena evitar, a menos que você precise desesperadamente por algum motivo. Você deve usar um daemon de cache DNS específico para o objetivo, se desejar armazenar em cache o DNS localmente (o que é uma boa ideia!).

Dois dos meus favoritos são dnsmasq e dnscache de djbdns .

apenwarr
fonte
Para usar nscd, você precisa primeiro entender como ele funciona, que é um sistema de sistema de cache, não um simples cache DNS daemon
higuita
1

Se houver cache de DNS no inferno, ele será fornecido pelo nscd. Não. Usar. Isto.

Apenas para ser diferente: o pdnsd é realmente um substituto muito bom. Ou unscd (usado por padrão pelo menos no openSUSE).

Janne Pikkarainen
fonte
+1 Isto. Para redes pequenas NSCD ou locais com servidores DNS horríveis, essa é uma PITA séria. Esse deve ser um dos motivos mais freqüentes para eu ver "iniciantes" reinicializando servidores Linux e Solaris em qualquer lugar em que trabalhei.
Signal15
1
o link para pdnsdestá inoperante. Talvez esta seja uma boa ligação em vez disso: members.home.nl/parombouts/pdnsd
Ehtesh Choudhury