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?)


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.


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

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 .


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 .


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)

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


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.


+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.


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.


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

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.


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

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


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

Definitivamente, isso não é uma resposta para a pergunta.
blafasel
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.