Как очистить кэш DNS?


191

Я только что обновил запись DNS ( ns1, ns2, ns3.myhostingcompany.com) для сайта я получил прошла, но я все еще получаю страницу домена регистратора парковки.

Я хотел бы посмотреть, если проблема в кэшированных записях DNS Ubuntu. Есть ли способ очистить кеш DNS Ubuntu? (если такая вещь существует?)


1
Также проверьте /etc/hosts. Я просто был уверен, что старый IP-адрес моего домена кэшировался, но только strace ping example.comпоказал, что я забыл удалить /etc/hostsзапись, которую я добавил некоторое время назад, из-за отсутствия терпения для распространения DNS.
ulidtko

2
Многие из этих ответов предполагают, что кэширование по умолчанию отключено, но они также ссылаются на более старые версии. Похоже, что он
включен

Ответы:


64

Для 18.04 и выше

Посмотрите на ответ Майка Шульца .

Для 11.10 и ниже

Ubuntu по умолчанию не кэширует dns-записи, поэтому, если вы не установили dns-кеш, очищать нечего.

DNS-записи, вероятно, кэшируются DNS-серверами вашего провайдера, поэтому, если вы хотите проверить, были ли внесенные вами изменения DNS успешными, вы можете запросить DNS-сервер из службы хостинга вашего домена с помощью dig:

dig -t a ns1.myhostingcompany.com @domain_registrar_dns_server

Если вы хотите, чтобы Ubuntu начала кэшировать dns, я рекомендую установить pdnsdвместе с ним resolvconf. nscdглючит и не рекомендуется.


14
Любые ссылки на то, почему nscd глючит? Это все еще глючит сегодня (2012-10)?
jjmontes

3
Можете ли вы обновить свой ответ - ATM звучит так, как будто версии Ubuntu 11.10+ кэшируют записи DNS.
Мартин Конечни

71

Ubuntu 17.04 и выше (18.04)

Начиная с Ubuntu 17.04 и далее, systemd-resolution используется для DNS. Вы можете очистить кэши systemd следующим образом:

sudo systemd-resolve --flush-caches

2
OMG, ты выйдешь за меня? Решил мою проблему тоже с 18.04 \ o /
NiKo

5
Это не сработало для меня в 16.04 LTS - но было полезно увидеть еще один способ, которым он мог кэшироваться:sudo systemd-resolve --statistics
Фил,

ты спас день
Данило Гомес

1
Не работает 18.04
LnxSlck

1
Для меня systemctl restart systemd-resolved.serviceтоже сработало 18.04.
Джастин Сейн

69

12,04

Ubuntu 12.04 использует dnsmasqвстроенную функцию network-manager, но она не кэширует dns, поэтому ее не нужно очищать. Вот пример строки из моего, syslogчтобы доказать эту точку:

dnsmasq[2980]: started, version 2.59 cache disabled

Также нет необходимости в любой конфигурации dnsmasq. Если вы работаете со стандартными настройками, он не будет кэшировать dns, так как для этого вам нужно явно настроить его, как описано в этой статье Ubuntu .

Если вы хотите обновить настройки, вы можете отключить, а затем включить сеть или запустить

sudo service network-manager restart

Это перезапускается, dnsmasqпотому что он встроен в network-manager; проверьте свои syslogдоказательства на это.

Если вы используете проводное соединение с dhcp network manager, настройки будут приниматься непосредственно с вашего маршрутизатора, и ваше соединение будет автоматически установлено при входе в Ubuntu. Вы можете проверить правильность настроек вашего роутера, если получите доступ к нему через веб-интерфейс, и, возможно, перезагрузите его, если это необходимо. Если это общая проблема с DNS, вы можете попробовать использовать Google DNS вместо ISP DNS, и более подробную информацию об этом подробно здесь .


sudo service network-manager restartсделал трюк для меня с Debian
Пьер де Леспин

61

Обратите внимание, что Ubuntu использует systemd-resolv начиная с 17.04 и далее, поэтому этот ответ больше не применяется к последним версиям Ubuntu. Смотрите " очистить кеш DNS в Ubuntu 17.04 и выше (18.04) "

По умолчанию DNS не кэшируется в Ubuntu <17.04 (но он может кэшироваться в сети или приложении)

Чтобы подтвердить, так или иначе, dnsmasqявляется ли кэширование, запустите ps ax | grep dnsmasqи посмотрите на команду выполнения. Вот разбивка моей машины по умолчанию 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 = / и т.д. / NetworkManager / dnsmasq.d

/etc/NetworkManager/dnsmasq.dпо умолчанию пусто. Таким образом, здесь нет никаких переопределений, и просто проверка --cache-size=0означает, что мы думаем, что это означает (вместо неограниченного кэша), man dnsmasqпоказывает:

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

Так что, хотя dnsmasq можно кешировать DNS, он не кеширует из коробки. Вы можете проверить свою машину и различные каталоги конфигурации, чтобы убедиться, что вы находитесь на одной странице.

Если вы видите проблемы с кешем, это может произойти в одном из следующих мест:

  • Вверх по течению от вашего компьютера. Кеш некоторых роутеров. Многие корпоративные сети будут кешировать DNS. Многие DNS-серверы работают под управлением интернет-провайдера и будут использовать свои собственные кэши. Единственный способ гарантировать защиту от сетевого кэша - использовать кэш, который вы можете обновить вручную. Вот почему я люблю OpenDNS.
  • В клиентском приложении (особенно в браузерах). Приложения могут выполнять все виды собственного кэширования, на которые Ubuntu не влияет. Как Firefox кеширует DNS . Как очистить DNS-кеш Chrome . Другие браузеры (и приложения) могут иметь свои собственные механизмы.
  • Я здесь очищаю ствол, но, возможно, вы установили нестандартный DNS-сервер в Ubuntu вместо того, чтобы включить кеширование dnsmasq. Есть много: nscd, Djbdns dnscache(ака Tinydns) pdns, pdnsd, bind9 (и его варианты), и больше я даже не могу вспомнить. Это, вероятно, будет показано в /etc/resolv.conf(с помощью config в / etc / resolvconf / `для автоматической генерации этого файла). Ниже показан локально перехваченный DNS-запрос:

    $ 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
    

    Если вы не используете 8.8.8.8 (или что-то еще, чего вы ожидаете от DNS-сервера), проверьте, что вы используете. В моем случае я вижу, что это просто dnsmasqнастроено на зеркальное отражение DNS-запросов для LXC, но в вашем случае это может приводить к плохому кешированию.

    Если вы сделали из перечисленных кэшей, процесс очистки каждого из них варьируется:

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

Обратите внимание на это, чтобы включить кешированиеdnsmasq .


1
Мой вывод из ps aux | grep такой же, как и ваш, но что-то определенно кеширует DNS на моей машине. Если это не dnsmasq, это что-то еще. Доказательство: я создал поддомен на своем сервере, но я не мог пропинговать его, хост недоступен. Я проверил на downforeveryoneorjustme.com, и это было, поэтому проблема распространения не учитывается. Ни мой роутер, ни мой провайдер, потому что я использую DNS 8.8.8.8 от Google. Затем я перезагрузил компьютер (а не маршрутизатор) и смог добраться до домена. Я пытался повторить дюжину раз до перезагрузки без удачи. Первая попытка после перезагрузки достигла хоста.
Маттео

Кстати, это был не первый раз, когда я испытывал то же самое. Несколько месяцев назад произошло то же самое, и единственный способ получить доступ к домену - перезагрузить компьютер, но тогда у меня была более старая версия Ubuntu.
Маттео

@matteo браузер?
Оли

нет, как я уже говорил, я тестировал с помощью ping, а не (только) браузера (ов).
Маттео

@matteo Я добавил больше, но у меня заканчиваются идеи. Просто не так много мест, где кто-то может кешировать DNS :)
Oli

39

На 12.04:

Ubuntu 12.04 выполняет кеширование DNS с помощью dnsmasq (см. man dnsmasq). Используйте следующее, чтобы очистить кеш:

sudo kill -HUP $(pgrep dnsmasq)

Спасибо! Вы первый, кто видел упоминание о кэшировании по умолчанию в 12.04!
Тарка

6
12.04 не кэширует днс по умолчанию - проверьте ваш системный журнал после перезапуска сетевого менеджера; в нем будет запись, показывающая, что dnsmasq запускается с отключенным кешем.

1
Я не знаю, включен ли кеш по умолчанию, но этот ответ сработал для меня.
Jeyk

Почему не просто sudo killall -HUP dnsmasq?
Джеймс Хей

1
использовать pkillвместо killиpgrep
Роберт Симер

15

sudo /etc/init.d/nscd restart

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

Также в качестве заметки вы можете проверить и узнать, распространились ли ваши изменения DNS, используя dig и глядя на кого-то другого, кроме ваших DNS-серверов по умолчанию. В этом случае Google DNS.

dig @8.8.8.8 example.com


12
Стоит отметить, что nscd не установлен по умолчанию.
Скан

11

Лично я бы использовал OpenDNS и использовал их функцию проверки кэша для принудительного обновления, просто чтобы убедиться, что изменения работают, но вы не можете гарантировать, что они обновятся для ваших пользователей в течение 48 часов.

DNS медленный зверь. Терпение будет держать вас в здравом уме.


+1 Я использую OpenDNS, так как очистить кеш очень полезно.
Марк Дэвидсон

Я с подозрением отношусь к OpenDNS. Сначала я был счастлив, но потом я начал подозревать; хотя я думаю, если это выбор между ISP и OpenDNS, мне лучше с OpenDNS, верно?
Джоно

2
Я бы сказал, OpenDNS - меньшее зло. Они хотели бы монетизировать ваш трафик, но только при неудачных попаданиях в домен.
Оли

@Oli Ссылка не работает. Если вы все еще используете его, не могли бы вы обновить ссылки?
Шаян

7

Если вы используете nscd:

sudo /etc/init.d/nscd restart

Стоит отметить, что это может быть не та ОС, которая его кеширует. Всем нравится кешировать DNS ... Некоторые тесты:

Проверьте, является ли это новым или старым IP. Большинство браузеров также кэшируют DNS, поэтому, если вы еще не перезапустили Chromium или что-то еще, вы можете не увидеть последнюю версию.

ping yourdomain.com

Переключите ваш локальный сервер имен в /etc/resolv.conf на другого провайдера, Google или уровень, например:

nameserver 8.8.8.8
nameserver 4.2.2.2

А потом снова пинг.

Убедитесь, что ваш маршрутизатор не кэширует DNS в любой форме. (Зависит от роутера / прошивки / и т.д.)

Наконец-то терпение. DNS может занять немного времени, чтобы распространиться по Интернету.


2
При использовании NetworkManager и DHCP /etc/resolve.conf сбрасывается после истечения срока аренды DHCP, поэтому вам придется установить статический ip в NetworkManager, чтобы заставить его работать в течение более длительного времени.
LassePoulsen

+1 Я не знал, что Firefox кеширует DNS, это очень помогло.
Волновой режим 22.12.14

+1 за переключение локального сервера имен в Google работал
Бибек Шарма

5

Все ответы, приведенные выше, забыли одну важную вещь в разрешении имен: обычно DNS-серверы, для которых вы запрашиваете разрешение имен, - это не те, которые содержат сами записи (авторитетный сервер). Поскольку каждая запись DNS имеет значение Time To Live, которое обязывает каждый DNS-сервер в цепочке разрешений выполнять кэширование в течение количества секунд, указанного в этом значении. Таким образом, вы можете не только кэшировать данные на своей машине, но, безусловно, результат поиска имени будет кэширован где-то на сервере, который вы не контролируете.

Единственное решение, которое будет немедленно уведомлено об изменении записи имени, - это использовать значение TTL 0 при создании / обновлении записи на полномочном сервере имен. Но это означает, что для каждого разрешения имени сервер будет работать, как правило, это не разрешено регистраторами. Например, они могут предоставить список предопределенных значений TTL, которые вы можете выбрать.

Я управляю разными доменными именами и, чтобы быть уверенным в том, что изменения хорошо применяются на авторитетных серверах имен, я использую инструмент, dnstracerкоторый может отображать результаты поиска на каждом сервере из корня DNS.

В заключение, даже без какого-либо решения для кэширования DNS все равно будет задержка между моментом изменения записей DNS и изменениями, которые видны на ПК. Эта задержка в значительной степени зависит от TTL записей и от количества DNS-серверов между вашим ПК и официальным сервером имен.


Конечно, но если бы это было проблемой, перезагрузка компьютера не исправила бы это.
Маттео

2

Для Ubuntu 14.04 я рекомендую эту команду:

sudo service dns-clean

Не на сервере по умолчанию устанавливает. Работает только 14.04 и ниже.
RJ

1

Я использовал следующую команду, чтобы очистить кэш DNS на моем 12.10 Ubuntu Box, и это работало фантастически.

sudo kill -HUP $(pgrep dnsmasq)

Другим полезным сигналом является SIGUSR1, который выдает небольшую статистику в системный журнал или, как это видно из man dnsmasq:

В режиме --no-daemon или когда включено полное ведение журнала (-q), создается полный дамп содержимого кэша.


использовать pkillвместо killиpgrep
Роберт Симер

1

В Ubuntu 16.04 я не смог очистить кеш, если не сделал:

sudo service dnsmasq restart

0

Я также нашел противоречия, но это: https://superuser.com/a/521562 woks for me (Ubuntu 13.10 с последними обновлениями, специальные сетевые пакеты не установлены).
Короче, просто используйте это
sudo /etc/init.d/dns-clean


0

Я рекомендую openDNS специально для удаленных серверов Ubuntu, это облегчает боль ...

Как это сделать? Что ж...

cd /etc/dhcp
sudo nano dhclient.conf

вставьте ПЕРЕД строкой «request subnet-mask ...»

supersede domain-name-servers 208.67.222.222,208.67.220.220;

это перезапустит интерфейс так быстро, что вы даже не потеряете соединение SSH

sudo ifdown eth0 && sudo ifup eth0

проверьте это, чтобы увидеть, правильно ли установлены ваши новые openDNS

cat /etc/resolv.conf

Это определенно не ответ на вопрос.
Blafasel
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.