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.
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:
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:
sudo systemd-resolve --flush-caches
Verifique o cache DNS usando:
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
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:
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
service named status
Para liberar o cache DNS para BIND (named), use:
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:
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:
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
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:
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:
service dnsmasq status
Para limpar o cache DNS ao usar Dnsmasq, reinicie seu serviço:
sudo systemctl restart dnsmasq
Em sistemas mais antigos ou sem systemd, use este comando para liberar o cache DNS para Dnsmasq:
sudo service dnsmasq restart
Não consegui encontrar uma maneira de verificar se o dnsmasq foi liberado.
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:
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:
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:
sudo nscd --invalidate=hosts
Para verificar se o cache DNS foi liberado, execute:
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.
Confira a versão original desse post em inglês:
How To Flush DNS Cache On Linux (For systemd-resolved, BIND, Dnsmasq Or nscd)