Как очистить кэш DNS?
Я только что обновил запись DNS (ns1
, ns2
, ns3.myhostingcompany.com
) для моего сайта, но я все еще получаю страницу парковки регистратора домена.
Я хотел бы посмотреть, если проблема в кэшированных записях DNS Ubuntu. Есть ли способ очистить кеш DNS Ubuntu? (если такая вещь существует?)
18 ответов
Для 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
глючит и не рекомендуется.
Ubuntu 17.04 и выше (18.04)
Начиная с Ubuntu 17.04 и далее, systemd-resolution используется для DNS. Вы можете очистить кэши systemd следующим образом:
sudo systemd-resolve --flush-caches
12,04
Ubuntu 12.04 использует dnsmasq
который встроен в network-manager
, но он не кеширует днс, поэтому нет необходимости сбрасывать его. Вот образец строки из моего 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, и более подробную информацию об этом подробно здесь.
Обратите внимание, что 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
, DJBDNSdnscache
(он же TinyDNS),pdns
,pdnsd
, Bind9 (и его варианты) и многое другое я даже не помню. Это, вероятно, будет подтверждено в/etc/resolv.conf
(с конфигурацией в /etc/resolvconf/`для автоматической генерации этого файла). Ниже показан локально перехваченный DNS-запрос:$ nslookup Ask-ubuntu.ru Server: 127.0.1.1 Address: 127.0.1.1#53 Non-authoritative answer: Name: Ask-ubuntu.ru 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
,
На 12.04:
Ubuntu 12.04 выполняет кеширование DNS с использованием dnsmasq (см. man dnsmasq
). Используйте следующее, чтобы очистить кеш:
sudo kill -HUP $(pgrep dnsmasq)
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
Лично я бы использовал OpenDNS и использовал их функцию проверки кэша для принудительного обновления, просто чтобы убедиться, что изменения работают, но вы не можете гарантировать, что они обновятся для ваших пользователей в течение 48 часов.
DNS медленный зверь. Терпение будет держать вас в здравом уме.
Если вы используете 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 может занять немного времени, чтобы распространиться по Интернету.
Все ответы, приведенные выше, забыли одну важную вещь в разрешении имен: обычно DNS-серверы, для которых вы запрашиваете разрешение имен, - это не те, которые содержат сами записи (авторитетный сервер). Поскольку каждая запись DNS имеет значение Time To Live, которое обязывает каждый DNS-сервер в цепочке разрешений выполнять кэширование в течение количества секунд, указанного в этом значении. Таким образом, вы можете не только кэшировать данные на своей машине, но, безусловно, результат поиска имени будет кэширован где-то на сервере, который вы не контролируете.
Единственное решение, которое будет немедленно уведомлено об изменении записи имени, - это использовать значение TTL 0 при создании / обновлении записи на полномочном сервере имен. Но это означает, что для каждого разрешения имени сервер будет работать, как правило, это не разрешено регистраторами. Например, они могут предоставить список предопределенных значений TTL, которые вы можете выбрать.
Я управляю разными доменными именами и, чтобы быть уверенным, что эти изменения хорошо применяются на авторитетных серверах имен, я использую инструмент под названием dnstracer
это может показать результат поиска на каждом сервере от корня DNS.
В заключение, даже без какого-либо решения для кэширования DNS все равно будет задержка между моментом изменения записей DNS и изменениями, которые видны на ПК. Эта задержка в значительной степени зависит от TTL записей и от количества DNS-серверов между вашим ПК и официальным сервером имен.
Ping использует другой DNS
Похоже, что Ubuntu 20.10 имеет два (2) кеша DNS:
-
systemd-resolve
-
nscd
Очистка кеша DNS с помощью следующей команды у меня не сработала:
sudo systemd-resolve --flush-caches
После отключения/включения сети и соединения Wi-Fi или перезагрузки системы проблема осталась:
-
nslookup
,dig
и другие команды работают - не работает
Вся системная конфигурация была в порядке, но некоторые адреса были где-то исправлены.
Поискав по разным сайтам нашел проблему: был другой кеш DNS и
ping
кажется, использует это.
Чтобы очистить второй кеш DNS, просто запустите:
sudo nscd -i hosts
Очистить ОБА кеша DNS
Вы можете сделать все вместе, просто скопируйте и вставьте в терминал:
sudo systemd-resolve --flush-caches
sudo nscd -i hosts
Проверка DNS очищена
Не уверены, что это работает? Просто взгляните:
sudo systemd-resolve --statistics
sudo nscd -g
Для Ubuntu 14.04 я рекомендую эту команду:
sudo service dns-clean
Я использовал следующую команду, чтобы очистить кэш DNS на моем 12.10 Ubuntu Box, и это работало фантастически.
sudo kill -HUP $(pgrep dnsmasq)
Другим полезным сигналом является SIGUSR1, который выдает небольшую статистику в системный журнал или, как это отмечено в man dnsmasq
:
В режиме --no-daemon или когда включено полное ведение журнала (-q), создается полный дамп содержимого кэша.
В Ubuntu 16.04 я не смог очистить кеш, если не сделал:
sudo service dnsmasq restart
Или даже
При использовании
bind9
на основе утилит:
rndc flush
или, в зависимости от вашей инфраструктуры
sudo rndc flush
Но на вашем хосте и / или на вашем локальном сервере доменных имен...
Я рекомендую 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
Тем, кто использует Ubuntu через подсистему Windows для Linux (WSL2), полезно знать, что кэширование DNS обрабатывается на стороне Windows (хост).
Таким образом, кэш можно очистить с помощью:ipconfig.exe /flushdns
Я также нашел противоречия, но это: https://superuser.com/a/521562 woks for me (Ubuntu 13.10 с последними обновлениями, специальные сетевые пакеты не установлены).
Короче, просто используйте этоsudo /etc/init.d/dns-clean