Como limpar o cache de DNS no Mac
Para limpar o cache de DNS no Mac, abra o Terminal em Aplicativos › Utilitários e execute:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
Digite a senha de início de sessão do Mac quando for pedido. Nada é impresso quando funciona. Reiniciar o Mac também limpa o cache: o artigo de cache de DNS da Apple diz que você pode reiniciar o Mac para atualizar as informações em cache.
Esse artigo da Apple está arquivado e não é mais atualizado. A entrada mais nova, para o OS X Yosemite 10.10.4 e posterior, é sudo killall -HUP mDNSResponder; dscacheutil -flushcache é o comando que ele lista para o Snow Leopard. A Apple não publicou uma versão mais nova, então a linha acima executa os dois: a parte do killall é a que a Apple lista para as versões atuais, e dscacheutil -flushcache esvazia o cache do Directory Service segundo a página de manual (man dscacheutil), que também diz para usá-lo só em casos extremos. Uma resposta de DNS desatualizada é um desses casos. O Mole Mac não limpa o DNS; isso é uma tarefa do Terminal.
O que é o cache de DNS
Quando um app se conecta a example.com, o macOS primeiro precisa transformar esse nome num endereço IP. No Mac, essa consulta passa pelo mDNSResponder. A página de manual (man mDNSResponder) descreve-o como o daemon que faz consultas DNS em nome de outros processos e mantém um cache das respostas.
O cache economiza uma ida e volta em cada consulta repetida. Cada resposta fica guardada pelo tempo que os registros DNS do domínio permitem e depois é buscada de novo. Na maior parte do tempo isso funciona sem ninguém notar. Dá errado quando a resposta em cache fica desatualizada antes de expirar: um site mudou de servidor, você trocou os servidores DNS, ou uma consulta falhou uma vez e a falha continua sendo reutilizada.
-HUP em killall -HUP mDNSResponder escolhe qual sinal o killall envia; sem ele, o killall envia TERM (man killall). A Apple lista a forma HUP como o jeito de redefinir o cache de DNS, então não tire a flag nem troque por -9.
Quando limpar o DNS ajuda
| Situação | Por que limpar ajuda |
|---|---|
| Um site ou servidor mudou e o Mac ainda chega no endereço antigo | A resposta em cache ainda não expirou |
| Você mudou os servidores DNS nos ajustes de Rede | Respostas antigas dos servidores anteriores ainda estão em cache |
Você editou /etc/hosts e a mudança é ignorada |
A página de manual de hosts diz que o arquivo é lido pelo mDNSResponder, que ainda pode guardar a resposta anterior |
| Um site falhou ao resolver há um minuto e continua falhando, embora outros dispositivos cheguem nele | Uma consulta que falhou pode estar em cache |
Quando não ajuda
Limpar só esvazia o cache do resolvedor do próprio Mac. Vários arranjos comuns tornam isso irrelevante:
- Proxy. Se o tráfego passa por um proxy HTTP ou SOCKS, o proxy muitas vezes resolve os nomes ele mesmo. Confira com
scutil --proxy, que informa a configuração atual de proxy do sistema. - VPN. Uma VPN pode instalar os próprios servidores DNS ou encaminhar só alguns domínios para eles.
scutil --dnsmostra cada resolvedor em uso; resolvedores suplementares que listam um domínio são usados só para esse domínio. Se um domínio de trabalho falha, o DNS da VPN é o lugar para olhar. - O cache do próprio navegador. Navegadores podem guardar os próprios resultados de DNS de curta duração e reutilizar conexões abertas. Depois de limpar, encerre o navegador por completo e reabra, em vez de só recarregar a aba.
- Caches acima do Mac. O roteador e o provedor de DNS também guardam respostas em cache. Limpar o Mac não faz com que eles busquem um registro novo mais cedo.
- O site está mesmo fora do ar, ou bloqueado na sua rede. Se outros dispositivos numa rede diferente também falham, o DNS do seu Mac não é a causa.
Se as páginas estão lentas em vez de falhando, o cache de DNS raramente é o gargalo. Wi-Fi do Mac que engasga e Qual app está usando a minha rede cobrem causas mais prováveis.
Confira o que o Mac realmente resolve
Use o resolvedor do sistema para ver a resposta que os seus apps recebem:
dscacheutil -q host -a name example.com
A página de manual do dscacheutil diz que -q executa uma consulta pelas chamadas padrão, devolvendo resultados em cache ou buscando dados ao vivo.
Depois pergunte direto a um servidor DNS:
dig example.com
O dig não passa pelo resolvedor do macOS. A página de manual diz que ele usa os servidores listados em /etc/resolv.conf, e esse arquivo no macOS traz um aviso de que não é consultado para a resolução de DNS usada pela maioria dos processos do sistema. Se o dig devolve o endereço novo e o dscacheutil devolve o antigo, o cache do Mac ou a configuração do resolvedor é a diferença, e uma limpeza deve corrigir. Se os dois devolvem o endereço antigo, o registro ainda não mudou acima do Mac.
Para ver quais servidores DNS o Mac está usando:
scutil --dns
Os servidores que você definiu à mão ficam em Ajustes do Sistema › Rede: selecione um serviço de rede, clique em Detalhes e depois em DNS (Apple).
Confira /etc/hosts antes de culpar o cache
/etc/hosts substitui o DNS para qualquer nome que ele liste. Ferramentas de desenvolvimento, bloqueadores de anúncio e tutoriais antigos às vezes acrescentam linhas ali e as deixam. Para ler:
cat /etc/hosts
Um arquivo normal tem só algumas linhas para localhost e comentários que começam com #. Se você vir o domínio que está se comportando mal, essa linha é o motivo de ele resolver do jeito que resolve. Edite só essa linha, com um editor executado por sudo, guarde uma cópia do original e depois limpe o cache. Não apague as entradas de localhost.
Confira o resultado
- Execute o comando de limpeza.
- Execute
dscacheutil -q host -a name example.comde novo com o domínio do problema e confira o endereço. - Encerre e reabra o navegador ou o app que tinha o problema.
- Se ainda falhar, compare com
dig,scutil --dnsescutil --proxypara ver qual camada está respondendo.
O que não fazer
- Não limpe o DNS num horário fixo nem como ajuste de velocidade. Um cache aquecido torna as consultas mais rápidas, e um cache vazio torna as próximas mais lentas.
- Não apague
/etc/hostsnem mude as permissões dele. - Não troque servidores DNS num Mac de trabalho ou de escola que usa VPN ou perfil de gerenciamento sem conferir com quem administra; nomes internos podem deixar de resolver.
- Não mude ajustes de proxy ou VPN para "testar o DNS". Descubra primeiro qual camada responde.
Perguntas frequentes
Como limpo o cache de DNS no Mac?
Execute sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder no Terminal e digite a senha. Reiniciar o Mac também limpa.
Qual é o comando para limpar o DNS no macOS atual?
O artigo arquivado da Apple lista sudo killall -HUP mDNSResponder para o OS X 10.10.4 e posterior, e a Apple não publicou um mais novo. Executar sudo dscacheutil -flushcache antes também é comum; ele só limpa dados em cache.
Limpar o DNS no Mac limpa o cache do navegador?
Não. Limpa só o cache do resolvedor do macOS. Encerre e reabra o navegador para que ele não reutilize os próprios resultados de DNS nem conexões abertas.
Por que um site ainda vai para o endereço antigo depois de limpar?
Confira /etc/hosts, um proxy ou VPN, e se o dig mostra o endereço novo. Se o registro DNS ainda não mudou acima do Mac, nenhuma limpeza local ajuda.
O Mole pode limpar o cache de DNS?
Não. O Mole Mac não inclui uma limpeza de DNS; execute o comando do Terminal acima ou reinicie o Mac.