Como limpo o cache do DNS?

191

Eu só atualizou o registro DNS ( ns1, ns2, ns3.myhostingcompany.com) para um site que eu tenho hospedado, mas eu ainda obter a página de estacionamento registro de domínio.

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 existe algo assim?)

Jono
fonte
11
Além disso, verifique /etc/hosts. Acabei de ter certeza de que o endereço IP antigo do meu domínio estava sendo armazenado em cache, mas apenas strace ping example.comrevelei que esqueci de remover o /etc/hostsregistro que adicionei há um tempo devido à falta de paciência para a propagação do DNS.
11134 ulidtko #
2
muitas dessas respostas sugerem que o cache está desativado por padrão, mas também se referem a versões mais antigas. Ele certamente parece ser ligado por padrão em minha máquina (18.04) e várias respostas abaixo mostram-lhe como eliminá-la, apenas rolar para baixo
Madivad

Respostas:

64

Para 18.04 e superior

Veja a resposta de Mike Shultz .

Para 11.10 e abaixo

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

Os registros DNS provavelmente são armazenados em cache pelos servidores DNS do seu provedor. Portanto, se você quiser verificar se as alterações feitas no DNS foram bem-sucedidas, pode interrogar um servidor DNS do serviço de hospedagem de domínio com dig:

dig -t a ns1.myhostingcompany.com @domain_registrar_dns_server

Você deseja que o Ubuntu inicie o cache do DNS, eu recomendo instalar pdnsdjunto resolvconf. nscdé de buggy e não é aconselhável.

Li Lo
fonte
14
Alguma referência de por que o nscd é buggy? Ainda está de buggy hoje (2012-10)?
Jjmontes
3
Você pode atualizar sua resposta - o ATM parece que as versões 11.10+ do Ubuntu fazem cache de registros DNS.
Martin Konecny ​​8/15
70

Ubuntu 17.04 e superior (18.04)

A partir do Ubuntu 17.04 em diante, systemd-resolve é usado para o DNS. Você pode liberar os caches do systemd da seguinte maneira:

sudo systemd-resolve --flush-caches
Mike Shultz
fonte
2
OMG, você quer se casar comigo? Resolvi meu problema com o 18.04 também \ o /
NiKo
5
Isso não funcionou para mim no 16.04 LTS - mas foi útil ver mais uma maneira de armazenar em cache: #: #sudo systemd-resolve --statistics
Phil Phil
você salvou o dia
Danilo Gomes
11
Não funciona em 18.04
LnxSlck
11
Para mim, systemctl restart systemd-resolved.servicetambém funcionou em 18.04.
Justin Sane
69

12.04

O Ubuntu 12.04 usa o dnsmasqque está embutido network-manager, mas não armazena em cache o DNS, portanto não há necessidade de liberá-lo. Aqui está uma linha de amostra minha syslogpara 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 estoque, ele não armazenará em cache o DNS, para isso, é necessário configurá-lo explicitamente, conforme descrito neste artigo do Ubuntu .

Se você quiser atualizar suas configurações, poderá desativar e, em seguida, ativar a rede ou executar

sudo service network-manager restart

Isso reinicia dnsmasqporque está embutido no network-manager; verifique se sysloghá evidências para isso.

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

liberdade de expressão
fonte
sudo service network-manager restartfez o truque para mim com Debian
Pierre de LESPINAY
61

Observe que o Ubuntu usa systemd-resolve a partir do 17.04 e, portanto, esta resposta não se aplica mais às versões recentes do Ubuntu. Consulte " liberar cache do 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 ser armazenado em cache na rede ou no aplicativo)

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

/ usr / sbin / dnsmasq \
  --no-resolv \
  - manter em primeiro plano \
  --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.destá vazio por padrão. Portanto, não há substituições chegando e apenas verificar --cache-size=0significa o que achamos que significa (em vez de um cache ilimitado ), man dnsmasqmostra:

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

Portanto, embora dnsmasq possa armazenar em cache o DNS, ele não está armazenando em cache a caixa. Você pode verificar sua máquina e vários diretórios de configuração para verificar se está na mesma página.

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

  • A montante do seu computador. Alguns roteadores fazem cache. Muitas redes corporativas armazenarão 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ê possa atualizar manualmente. É por isso que eu gosto do OpenDNS.
  • No aplicativo cliente (principalmente navegadores). Os aplicativos podem fazer todos os tipos de cache em que o Ubuntu não tem efeito. Como o Firefox armazena em cache 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 ativar o cache dnsmasq. Há muitos: nscd, DJBDNS dnscache(aka tinydns), pdns, pdnsd, Bind9 (e suas variantes), e mais não posso nem lembrar. Isso provavelmente será evidenciado em /etc/resolv.conf(com a configuração em / etc / resolvconf / `para autogenizar esse arquivo). A seguir, é exibida 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 está atingindo o 8.8.8.8 (ou o que você espera que seu servidor DNS), verifique o que está acessando. No meu caso, posso ver que isso está dnsmasqconfigurado apenas para espelhar as consultas DNS de volta para o LXC, mas no seu caso, pode estar fazendo coisas ruins em cache.

    Se você fez os caches listados, o processo para limpar cada um varia:

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

Em uma nota um pouco relacionada, consulte isso para ativar o armazenamento em cachednsmasq .

Oli
fonte
11
Minha saída do ps aux | grep é a mesma que a sua, mas algo definitivamente está armazenando DNSs em cache na minha máquina. Se não é dnsmasq, é outra coisa. Prova: criei um subdomínio no meu servidor, mas não consegui executar ping, hospedar inacessível. Eu verifiquei no downforeveryoneorjustme.com e ele estava funcionando, então o problema de propagação foi descartado. Não é meu roteador, nem meu ISP, porque eu uso o DNS do Google 8.8.8.8. Reiniciei o computador (e NÃO o roteador) e consegui acessar o domínio. Eu estava tentando uma dúzia de vezes antes de reiniciar sem sorte. A primeira tentativa após a reinicialização chegou ao host.
matteo
E não foi a primeira vez que experimentei a mesma coisa, a propósito. Meses atrás, aconteceu o mesmo e a única maneira de acessar o domínio era reiniciar o computador, mas eu tinha uma versão mais antiga do Ubuntu.
Matteo
@matteo O navegador?
Oli
não, como eu disse, testei com ping, não (apenas) o (s) navegador (s).
Matteo
@matteo Adicionei mais, mas estou ficando sem ideias. Não há muitos outros lugares em que alguém possa armazenar em cache o DNS :)
Oli
39

Para 12.04:

O Ubuntu 12.04 armazena em cache o DNS usando o dnsmasq (consulte man dnsmasq). Use o seguinte para limpar o cache:

sudo kill -HUP $(pgrep dnsmasq)
zacarias
fonte
Obrigado! Você é o primeiro que vi mencionar algo sobre o cache padrão do 12.04!
Tarka
6
12.04 não armazena em cache o DNS por padrão - verifique seu syslog após reiniciar o gerenciador de rede; ele terá uma entrada que mostra que o dnsmasq está iniciando com o cache-disabled.
11
Não sei se o cache está ativado por padrão, mas esta resposta funcionou para mim.
Jeyk
Por que não apenas sudo killall -HUP dnsmasq?
James Haigh
11
use em pkillvez de killepgrep
Robert Siemer
15

sudo /etc/init.d/nscd restart

http://www.ubuntugeek.com/howto-clearflush-dns-cache-in-ubuntu.html

Além disso, como nota, você pode verificar e ver se as alterações no seu DNS foram propagadas usando dig e procurando alguém que não seja o servidor DNS padrão. Neste caso, google DNS.

dig @8.8.8.8 example.com

Mark Davidson
fonte
12
Vale ressaltar que o nscd não está instalado por padrão.
Scaine
11

Pessoalmente, eu usaria o OpenDNS e usaria a 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 seus usuários dentro de 48 horas.

O DNS é um animal lento. Paciência irá mantê-lo são.

Oli
fonte
+1 Eu uso o OpenDNS, bem como limpar o cache é muito útil.
Mark-Davidson
Desconfio do OpenDNS. Fiquei feliz com isso no começo, mas depois comecei a suspeitar; embora eu ache que, se for uma escolha entre o ISP e o OpenDNS, estou melhor com o OpenDNS, certo?
Jono
2
Eu diria que o OpenDNS é o mal menor. Eles gostariam de gerar receita com seu tráfego, mas apenas em hits de domínio ruins.
Oli
@Oli O link está inoperante. Se você ainda o usa, atualize os links?
Shayan
7

Se você estiver usando o nscd:

sudo /etc/init.d/nscd restart

Vale ressaltar que pode não ser o SO que está armazenando em cache. Todo mundo gosta de armazenar em cache o DNS ... Alguns testes:

Verifique se é o IP novo ou antigo. A maioria dos navegadores também armazena em cache o DNS; portanto, se você não reiniciou o Chromium ou o que quer que esteja, não deve estar vendo o mais recente.

ping yourdomain.com

Troque seu servidor de nomes local no /etc/resolv.conf para outro provedor, google ou level, exemplos:

nameserver 8.8.8.8
nameserver 4.2.2.2

E depois faça ping novamente.

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

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

bikesandcode
fonte
2
Se o uso do NetworkManager e do DHCP /etc/resolve.conf for liberado quando a concessão do DHCP expirar, será necessário definir um IP estático no NetworkManager para que isso funcione por mais tempo.
LassePoulsen
+1 Eu não sabia que o Firefox estava armazenando em cache o DNS, isso ajudou muito.
Wavemode
+1 para comutação servidor de nomes locais para o Google trabalhou
Bibek Sharma
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 não são os que mantêm os registros (o servidor autoritativo). Como cada registro DNS vem com um valor de tempo de vida, que obrigará cada servidor DNS da cadeia de resolução a fazer cache durante o período de segundos mencionado por esse valor. Portanto, não apenas você pode armazenar em cache em sua máquina, mas CERTAMENTE o resultado da pesquisa de nome será armazenado em cache em algum lugar de um servidor que você não controla.

A única solução a ser notificada imediatamente sobre uma alteração no 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 TTL predefinidos nos quais você pode escolher.

Eu gerencio nomes de domínio diferentes e, para garantir que as alterações sejam bem aplicadas nos servidores de nomes autoritativos, estou usando uma ferramenta chamada dnstracerque pode mostrar o resultado da pesquisa em cada servidor a partir da raiz do DNS.

Concluindo, mesmo sem nenhuma solução de cache DNS em vigor, 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 PC e o servidor de nomes autorizado.

Benoit
fonte
Claro, mas se esse fosse o problema, reiniciar o computador não o corrigia.
Matteo
2

Para o ubuntu 14.04, recomendo este comando:

sudo service dns-clean
alphayax
fonte
Não está instalado no servidor padrão. Funciona apenas em 14.04 e abaixo.
RJ
1

Eu usei o seguinte comando para liberar o cache do DNS na minha caixa do ubuntu 12.10 e funcionou fantástico.

sudo kill -HUP $(pgrep dnsmasq)

Outro sinal útil é o SIGUSR1, que despeja um pouco de estatística no syslog ou como é observado em man dnsmasq:

No modo --no-daemon ou quando o log completo está ativado (-q), é feito um despejo completo do conteúdo do cache.

j0inty
fonte
use em pkillvez de killepgrep
Robert Siemer
1

No Ubuntu 16.04, eu não conseguia limpar o cache, a menos que:

sudo service dnsmasq restart
Volomike
fonte
0

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

Nitz
fonte
0

Eu recomendo o openDNS, especialmente em servidores remotos do Ubuntu, aliviando muita dor ...

Como fazer isso? Bem...

cd /etc/dhcp
sudo nano dhclient.conf

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

supersede domain-name-servers 208.67.222.222,208.67.220.220;

isso reiniciará a interface tão rapidamente que você nem perderá sua conexão SSH

sudo ifdown eth0 && sudo ifup eth0

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

cat /etc/resolv.conf
D.Snap
fonte
Definitivamente, isso não é uma resposta para a pergunta.
blafasel