Como liberar o cache DNS no Linux (para systemd-resolved, BIND, Dnsmasq ou nscd)

11 de julho de 2019

Este artigo explica como liberar o cache DNS (limpar) no Linux, não apenas para sistemas que usam resolved pelo sistema (por exemplo, Ubuntu 18.04 e mais recente), mas também para aqueles que usam nscd, BIND ou Dnsmasq para armazenar consultas DNS em cache.

DNS, ou Sistema de Nomes de Domínio, é como a lista telefônica da Internet, traduzindo nomes de host de computador amigáveis para humanos em endereços IP. Por exemplo, google.com é traduzido para o endereço IPv4 216.58.214.238 e endereço IPv6 2a00:1450:400d:808::200e. Desta forma, o nome de domínio pode alterar o endereço IP sem afetar seus usuários e sem alterar o seu nome.

O cache DNS (ou cache de resolvedor DNS) é um banco de dados temporário que armazena esses registros, que é usado para pesquisar rapidamente um site quando você tenta visitá-lo.

Se o DNS estiver em cache, talvez você não consiga acessar alguns nomes de host que foram alterados recentemente - até que o cache DNS seja atualizado ou limpo, é por isso que é útil em algumas situações liberar/limpar o cache DNS. Depois que o cache DNS é limpo, os novos endereços são obtidos do servidor DNS definido para sua rede.

Como liberar o cache DNS ao usar o sistema resolved

systemd-resolution é um gerenciador de resolução de nome de rede. Ele implementa um resolvedor de stub DNS/DNSSEC de cache e validação, bem como um resolvedor e respondedor LLMNR e MulticastDNS.

systemd-resolved é usado por padrão em versões recentes de muitas distribuições Linux, incluindo Ubuntu, Linux Mint e Fedora.

Não sei se o seu sistema usa o sistema resolved? Use:

Comandos para usar no terminal

systemctl is-active systemd-resolved

Caso este comando retorne active, então seu sistema está com o systemd resolved habilitado e ativo. Se qualquer outra coisa (por exemplo, inactive) for exibida, então o systemd-resolution não será usado em seu sistema.

Limpe o cache DNS ao usar resolved pelo sistema:

Comandos para usar no terminal

sudo systemd-resolve --flush-caches

Verifique o cache DNS usando:

Comandos para usar no terminal

systemd-resolve --statistics

O Current Cache Size é o valor que você procura. Se for 0, você acabou de esvaziar o cache DNS.

Exemplo com saída (executado imediatamente após limpar o cache DNS, portanto, o tamanho do cache é 0):

$ systemd-resolve --statistics
DNSSEC supported by current servers: no

Transactions
Current Transactions: 0
  Total Transactions: 5538

Cache
  Current Cache Size: 0
          Cache Hits: 3482
        Cache Misses: 2096

DNSSEC Verdicts
              Secure: 0
            Insecure: 0
               Bogus: 0
       Indeterminate: 0

Como liberar o cache DNS ao usar BIND

BIND ou "named" atua como um servidor de nomes autoritativo para um ou mais domínios específicos, bem como um resolvedor recursivo para o sistema DNS em geral, e pode atuar como um servidor DNS de cache. O Bind teve três revisões principais, com BIND4 e BIND8 sendo tecnicamente obsoletos, e BIND9 sendo a versão com suporte, que apresenta DNSSEC, além de outros recursos e aprimoramentos.

Para verificar se o BIND (o nome do serviço é "named") está ativo em seu sistema (embora observe que na maioria dos casos ele está ativo apenas se você o instalar e habilitar explicitamente), você pode executar:

Comandos para usar no terminal

systemctl is-active named

Quando active é retornado por este comando, significa que o serviço está ativo em seu sistema.

Em sistemas mais antigos, ou sistemas sem systemd, você pode verificar o status do serviço, usando

Comandos para usar no terminal

service named status

Para liberar o cache DNS para BIND (named), use:

Comandos para usar no terminal

sudo rndc flush

Verificar se o cache DNS foi limpo é um pouco mais complicado para o BIND. Depois de limpar o cache DNS, execute o comando a seguir para despejar o cache:

Comandos para usar no terminal

sudo rndc dumpdb -cache

O arquivo de cache agora está salvo em /var/named/data/cache_dump.db. Você pode olhar para este arquivo como raiz para verificar se há alguma entrada DNS em cache:

Comandos para usar no terminal

sudo cat /var/named/data/cache_dump.db

Se o cache foi liberado (portanto, não há entradas DNS em cache), este arquivo deve ser assim:

$ sudo cat /var/named/data/cache_dump.db

;
; Start view _default
;
;
; Cache dump of view \'_default\' (cache _default)
;
$DATE 20190711141232
;
; Address database dump
;
; [edns success/4096 timeout/1432 timeout/1232 timeout/512 timeout]
; [plain success/timeout]
;
;
; Unassociated entries
;
;
; Bad cache
;

Se ele contiver entradas como as que seguem abaixo, o cache DNS não foi liberado:

102397 IN DNSKEY 256 3 8 (
  AwEAAeVDC34GZILwsQJy97K6Fst4P3XYZrXL
  yrkausYzStEjSUulgh+iLgHg0y7FIF890+sI
  jXsk7KLJUmCOWfYWPorNKEOKLk5Zx/4M6D3I
  HZE3O3m/Eahrc28qQzmTLxiMZAW65MvR2UO3
  LxVtYOPBEBiDgAQA47x2JLsJYtavCzNL5WiU
  k59OgvHmDqmcC7VXYBhK8V8Tic089XJgExGe
  plKWUt9yyc31ra1swJX51XsOaQz17+vyLVH8
  AZP26KvKFiZeoRbaq6vl+hc8HQnI2ug5rA2z
  oz3MsSQBvP1f/HvqsWxLqwXXKyDD1QM639U+
  XzVB8CYigyscRP22QFnwKIU=
  ) ; ZSK; alg = RSASHA256 ; key id = 25266

Como limpar o cache DNS ao usar Dnsmasq

Dnsmasq é um encaminhador DNS e servidor DHCP que pode ser usado como um servidor DNS de cache.

Para verificar se dnsmasq está ativo em seu sistema, você pode executar:

Comandos para usar no terminal

systemctl is-active dnsmasq

Quando active é retornado por este comando, significa que o serviço está ativo em seu sistema.

Em sistemas mais antigos ou sem systemd, você pode verificar o status do serviço, usando:

Comandos para usar no terminal

service dnsmasq status

Para limpar o cache DNS ao usar Dnsmasq, reinicie seu serviço:

Comandos para usar no terminal

sudo systemctl restart dnsmasq

Em sistemas mais antigos ou sem systemd, use este comando para liberar o cache DNS para Dnsmasq:

Comandos para usar no terminal

sudo service dnsmasq restart

Não consegui encontrar uma maneira de verificar se o dnsmasq foi liberado.

Como liberar o cache DNS ao usar nscd

nscd é um daemon de cache de serviço de nomes.

Para verificar se o nscd está ativo em seu sistema (embora observe que na maioria dos casos ele está ativo apenas se você instalá-lo e ativá-lo explicitamente), você pode executar:

Comandos para usar no terminal

systemctl is-active nscd

Quando "active" é retornado por este comando, significa que o serviço está ativo em seu sistema.

Em sistemas mais antigos ou sem systemd, você pode verificar o status do serviço, usando:

Comandos para usar no terminal

service nscd status

Embora a maioria dos guias encontre referências online para reiniciar o serviço nscd, isso não libera o cache DNS, uma vez que os arquivos ainda estão armazenados em /var/db/nscd e são usados depois que o serviço nscd é reiniciado. O que você realmente deseja fazer para liberar o cache DNS para nscd é invalidar o cache.

Para invalidar o cache de hosts (para liberar o cache de hosts DNS) ao usar nscd, use:

Comandos para usar no terminal

sudo nscd --invalidate=hosts

Para verificar se o cache DNS foi liberado, execute:

Comandos para usar no terminal

sudo nscd -g

E olhe na seção de hosts (se você tiver vários habilitados), e você verá 0 como o valor para used data pool size se o cache DNS acabou de ser liberado. Ele aumentará lentamente à medida que o DNS for usado para acessar vários nomes de hosts/domínios.

Exemplo com saída (depois que o cache DNS foi limpo):

$ sudo nscd -g
nscd configuration:

              0  server debug level
         1m  5s  server runtime
              5  current number of threads
             32  maximum number of threads
              0  number of times clients had to wait
             no  paranoia mode enabled
           3600  restart internal
              5  reload count
.......................................
hosts cache:

            yes  cache is enabled
            yes  cache is persistent
            yes  cache is shared
            211  suggested size
         216064  total data pool size
              0  used data pool size
           3600  seconds time to live for positive entries
             20  seconds time to live for negative entries
              0  cache hits on positive entries
              0  cache hits on negative entries
              5  cache misses on positive entries
......................................

Esse post foi traduzido do site LinuxUprising.com pela rtland.team.

Linux Uprising Blog

Confira a versão original desse post em inglês:

How To Flush DNS Cache On Linux (For systemd-resolved, BIND, Dnsmasq Or nscd)
Propaganda
Propaganda