Como faço para limpar o cache do DNS?

159

Acabei de atualizar o registro de DNS ( ns1 , ns2 , ns3.myhostingcompany.com ) de um site que hospedei, mas ainda recebo a página de registro de registradores de domínios.

Gostaria de ver se o problema são os registros DNS em cache do Ubuntu. Existe uma maneira de limpar o cache DNS do Ubuntu? (se tal coisa existe?)

    
por Jono 13.08.2010 / 23:23

13 respostas

56

Para 18.04 e superior

Veja a resposta Mike Shultz '.

Para 11.10 e abaixo

O Ubuntu não armazena em cache os registros de DNS por padrão, a menos que você tenha instalado um cache de DNS não há nada para limpar.

É provável que os registros DNS sejam armazenados em cache pelos servidores DNS do seu provedor. Portanto, se você quiser verificar se as alterações feitas no DNS foram bem-sucedidas, poderá interrogar um servidor DNS do serviço de hospedagem de domínios com dig:

dig -t a ns1.myhostingcompany.com @domain_registrar_dns_server

Se você deseja que o Ubuntu inicie o cache do dns, eu recomendo instalar pdnsd junto com resolvconf . nscd é buggy e não é aconselhável.

    
por Li Lo 14.08.2010 / 02:13
69

12,04

O Ubuntu 12.04 usa dnsmasq que é incorporado em network-manager , mas ele não armazena em cache o dns, portanto, não há necessidade de liberá-lo. Aqui está uma linha de amostra do meu syslog para provar esse ponto:

dnsmasq[2980]: started, version 2.59 cache disabled

Também não há necessidade de nenhuma configuração de dnsmasq . Se você estiver executando com configurações de ações não será caching dns, como para isso você tem que explicitamente configurá-lo como este Artigo do Ubuntu descreve.

Se você quiser atualizar suas configurações, desative e ative a rede ou execute

sudo service network-manager restart

Isso reinicia dnsmasq porque está embutido em network-manager ; verifique seu syslog para a evidência disso.

Se você estiver usando uma conexão com fio com dhcp network manager estará tomando as configurações diretamente do seu roteador e sua conexão será estabelecida automaticamente quando você fizer o login no Ubuntu. Você pode verificar se as configurações estão corretas no seu roteador, se você pode acessá-lo através da interface web, e talvez reiniciá-lo, se necessário.  Se for um problema geral com o dns, você pode tentar usar o dns do Google em vez do dns do isp, e mais informações sobre isso são detalhado aqui .

    
por user76204 14.09.2012 / 22:39
62

Note que o Ubuntu usa systemd-resolve a partir de 17.04 e assim esta resposta não se aplica mais a versões recentes do Ubuntu. Veja " esvaziar o cache DNS no Ubuntu 17.04 e superior (18.04) "

Por padrão, o DNS não é armazenado em cache no Ubuntu < 17.04 (mas pode estar em cache na rede ou na aplicação)

Para confirmar de uma forma ou de outra se dnsmasq está armazenando em cache, execute ps ax | grep dnsmasq e observe o comando em execução. Aqui está um detalhamento da minha máquina padrão 13.10:

/usr/sbin/dnsmasq \
  --no-resolv \
  --keep-in-foreground \
  --no-hosts \
  --bind-interfaces \
  --pid-file=/var/run/NetworkManager/dnsmasq.pid \
  --listen-address=127.0.1.1 \
  --conf-file=/var/run/NetworkManager/dnsmasq.conf \
  --cache-size=0 \
  --proxy-dnssec \
  --enable-dbus=org.freedesktop.NetworkManager.dnsmasq \
  --conf-dir=/etc/NetworkManager/dnsmasq.d

/etc/NetworkManager/dnsmasq.d está vazio por padrão. Portanto, não há substituições chegando lá e apenas para verificar --cache-size=0 significa o que achamos que significa (em vez de um cache ilimitado ), man dnsmasq mostra:

-c, --cache-size=<cachesize>
  Set the size of dnsmasq's cache. The default is 150 names. 
  Setting the cache size to zero disables caching.

Então, enquanto dnsmasq pode armazenar em cache o DNS, não é feito o cache da caixa. Você pode verificar sua máquina e vários diretórios de configuração para verificar se você está na mesma página.

Se você está vendo problemas de cache, isso provavelmente está acontecendo em um dos poucos locais:

  • Upstream do seu computador. Alguns roteadores armazenam em cache. Muitas redes corporativas armazenam em cache o DNS. Muitos servidores DNS executados pelo ISP e usarão seus próprios caches. A única maneira de garantir um cache de rede é usar um cache que você pode atualizar manualmente. É por isso que gosto do OpenDNS.
  • No aplicativo cliente (principalmente navegadores). As aplicações podem fazer todo o tipo de cache que o Ubuntu não tem efeito. Como o Firefox armazena o DNS . Como limpar o cache DNS do Chrome . Outros navegadores (e aplicativos) podem ter seus próprios mecanismos.
  • Estou raspando o barril aqui, mas talvez você tenha instalado um servidor DNS não padrão no Ubuntu, em vez de transformar o cache em dnsmasq . Existem muitos: nscd , DJBDNS dnscache (também conhecido como TinyDNS), pdns , pdnsd , Bind9 (e suas variantes), e mais eu nem consigo lembrar. Estes serão provavelmente evidenciados em /etc/resolv.conf (com config em / etc / resolvconf / 'para autogerir esse arquivo). A seguir, é mostrada uma consulta DNS interceptada localmente:

    $ nslookup askubuntu.com
    Server:     127.0.1.1
    Address:    127.0.1.1#53
    
    Non-authoritative answer:
    Name:   askubuntu.com
    Address: 198.252.206.24
    

    Se você não estiver acessando 8.8.8.8 (ou o que você espera que seja seu servidor DNS), verifique o que você está pressionando. No meu caso, posso ver que isso é apenas dnsmasq configurado para espelhar as consultas DNS de volta para o LXC, mas no seu caso pode estar fazendo coisas ruins em cache.

    Se você tiver feito os caches listados, o processo de limpeza de cada um varia:

    sudo /etc/init.d/nscd reload    # nscd
    sudo /etc/init.d/named restart  # bind9
    

Em uma nota ligeiramente relacionada, veja isso para ativar o armazenamento em cache em dnsmasq .

    
por Oli 17.03.2014 / 11:40
40

Para 12.04:

O Ubuntu 12.04 faz o cache do DNS usando o dnsmasq (veja man dnsmasq ). Use o seguinte para limpar o cache:

sudo kill -HUP $(pgrep dnsmasq)
    
por zechariah 21.07.2012 / 23:32
22

Ubuntu 17.04 e superior (18.04)

Do Ubuntu 17.04 em diante, o systemd-resolve é usado para o DNS. Você pode limpar os caches do systemd assim:

sudo systemd-resolve --flush-caches
    
por Mike Shultz 27.06.2017 / 06:09
16

sudo /etc/init.d/nscd restart

link

Além disso, como nota, você pode verificar e ver se suas alterações de DNS se propagaram usando escavações e procurando alguém diferente de seus servidores DNS padrão. Neste caso, o DNS do Google.

dig @8.8.8.8 example.com

    
por Mark Davidson 13.08.2010 / 23:25
11

Pessoalmente, eu uso o OpenDNS e uso a loja Função de verificação de cache para forçar uma atualização apenas para garantir que as alterações funcionem, mas você não pode garantir que elas serão atualizadas para o seu usuários dentro de 48 horas.

O DNS é uma fera lenta. A paciência vai mantê-lo são.

    
por Oli 13.08.2010 / 23:26
7

Se você estiver usando o nscd:

sudo /etc/init.d/nscd restart

Vale a pena mencionar que talvez não seja o sistema operacional que está armazenando em cache. Todos gostam de armazenar em cache DNS ... Alguns testes:

Verifique se é o IP novo ou antigo. A maioria dos navegadores também armazena em cache o DNS, por isso, se você não tiver reiniciado o Chromium ou qualquer outro que possa não estar vendo as últimas.

ping yourdomain.com

Mude seu servidor de nomes local no /etc/resolv.conf para outro provedor, google ou nível, exemplos:

nameserver 8.8.8.8
nameserver 4.2.2.2

E depois ping novamente.

Verifique se o seu roteador não está armazenando DNS em cache de qualquer forma. (Varia de acordo com o roteador / firmware / etc)

Finalmente, paciência. O DNS pode demorar um pouco para se propagar pela internet.

    
por bikesandcode 13.08.2010 / 23:33
5

Todas as respostas acima esqueceram uma coisa importante na resolução de nomes: geralmente, os servidores DNS para os quais você solicita a resolução de nomes não são os que mantêm os registros em si (o servidor autoritativo). Como cada registro DNS vem com um valor Time To Live que obrigará cada servidor DNS na cadeia de resolução a fazer o cache durante a quantidade de segundos mencionados por este valor. Portanto, não só você pode armazenar em cache na sua máquina, mas CERTAMENTE o resultado da pesquisa de nomes será armazenada em algum lugar em um servidor que você não controla.

A única solução a ser notificada imediatamente de uma alteração de registro de nome é usar um valor TTL de 0 ao criar / atualizar a entrada no servidor de nomes autoritativo. Mas isso significa que, para cada resolução de nome, o servidor será atingido, geralmente isso não é permitido pelos registradores. Por exemplo, eles podem fornecer uma lista de valores de TTL predefinidos que você pode escolher.

Eu gerencio nomes de domínio diferentes e, para ter certeza de que a alteração é bem aplicada nos servidores de nomes oficiais, estou usando uma ferramenta chamada dnstracer que pode mostrar o resultado da pesquisa em cada servidor da raiz do DNS.

Em conclusão, mesmo sem nenhuma solução de cache DNS, ainda haverá um atraso entre o momento em que você altera os registros DNS e a alteração é vista em um PC. Esse atraso depende muito do TTL dos registros e do número de servidores DNS entre o seu PC e o servidor de nomes oficial.

    
por Benoit 18.03.2014 / 11:07
2

Para o ubuntu 14.04, eu recomendo este comando:

sudo service dns-clean
    
por alphayax 02.06.2016 / 16:33
1

Eu usei o seguinte comando para limpar o cache do DNS na minha caixa do Ubuntu e funcionou de forma fantástica.

sudo kill -HUP $(pgrep dnsmasq)

Outro sinal útil é o SIGUSR1 que despeja uma pequena estatística no syslog ou como é uma nota de man dnsmasq :

In --no-daemon mode or when full logging is enabled (-q), a complete dump of the contents of the cache is made.

    
por j0inty 25.02.2013 / 22:41
0

Eu também encontrei contradições, mas esta: link woks para mim (Ubuntu 13.10 com atualizações mais recentes, nenhum pacote de rede especial instalado). Em suma, basta usar este sudo /etc/init.d/dns-clean

    
por Nitz 23.03.2014 / 10:39
0

Eu recomendo o openDNS especialmente em servidores remotos do Ubuntu, o que facilita muito a dor ...

Como fazer isso? Bem ...

cd /etc/dhcp
sudo nano dhclient.conf

insira este ANTES da linha "request subnet-mask ..."

supersede domain-name-servers 208.67.222.222,208.67.220.220;

isto irá reiniciar a interface tão rápido que você nem perderá sua conexão SSH

sudo ifdown eth0 && sudo ifup eth0

verifique isso para ver se o seu novo openDNS está instalado corretamente

cat /etc/resolv.conf
    
por D.Snap 23.03.2016 / 20:49