Як очистити кеш-пам'ять 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
багато з цих відповідей припускають, що кешування вимкнено за замовчуванням, але вони також стосуються старих версій. Звичайно, у моїй машині за замовчуванням він увімкнено (18.04), і різні відповіді нижче показують, як його змити, просто прокрутіть вниз
Мадівад,

Відповіді:


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
Чи можете ви оновити свою відповідь - банкомат, це звучить як Ubuntu версії 11.10 і більше, кешуйте записи DNS
Мартін Конечний

70

Ubuntu 17.04 і новіші (18.04)

Починаючи з Ubuntu 17.04 і далі, DNS використовується для 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зробив трюк для мене з
Дебіаном

61

Зауважте, що Ubuntu використовує системне рішення з 17.04 і далі, тому ця відповідь більше не застосовується до останніх версій Ubuntu. Див. " Очищення кешу DNS в Ubuntu 17.04 і вище (18.04) "

За замовчуванням DNS не кешується в Ubuntu <17.04 (але він може бути кешований у мережі чи програмі)

Щоб підтвердити той чи інший спосіб dnsmasqкешування, запустіть ps ax | grep dnsmasqі подивіться на запущену команду. Ось розбивка моєї машини за замовчуванням 13.10:

/ usr / sbin / dnsmasq \
  --нерозв’язаний \
  - стрибок на передньому плані \
  - немає господарів \
  --інтерфейси \
  --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.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.

Отже, хоча DNS dnsmasq може кешувати, він не кешує поле. Ви можете перевірити свій апарат і різні каталоги конфігурації, щоб перевірити, чи перебуваєте ви на одній сторінці.

Якщо у вас виникають проблеми з кешем, це, ймовірно, відбувається в одному з небагатьох місць:

  • Вгору від вашого комп’ютера. Деякі маршрутизатори кешують. Багато корпоративних мереж кешуватимуть DNS. Багато DNS-сервери, які працюють під керуванням провайдером, будуть використовувати свої власні кеші. Єдиний спосіб гарантувати проти мережевого кешу - це використовувати кеш, який ви можете оновити вручну. Ось чому мені подобається OpenDNS.
  • У клієнтській програмі (особливо у браузерах). Програми можуть робити всілякі кешування, на які Ubuntu не впливає. Як Firefox кешує DNS . Як очистити кеш-пам'ять DNS Chrome . Інші браузери (і програми) можуть мати свої механізми.
  • Я записую бочку тут, але, можливо, ви встановили нестандартний DNS-сервер в Ubuntu замість того, щоб вмикати кешування в dnsmasq. Є багато: nscd, Djbdns dnscache(ака Tinydns) pdns, pdnsd, bind9 (і його варіанти), і більше я навіть не можу згадати. Вони, ймовірно, будуть засвідчені в /etc/resolv.conf(із налаштуванням в / etc / resolutionvconf / `для автогенізації цього файлу). Далі показано локально перехоплений 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, і це було вгору, тому питання про розповсюдження відхилено. Не мій маршрутизатор, ні мій провайдер, тому що я використовую 8.8.8.8 DNS від Google. Потім я перезавантажив комп’ютер (а НЕ маршрутизатор) і міг дійти до домену. Я повторював десяток разів перед перезавантаженням, не пощастивши. Перша спроба після перезавантаження до хоста.
Маттео

І це, до речі, не перший раз, коли я пережив те саме. Місяць тому сталося те саме, і єдиний спосіб, коли я міг дійти до домену, - це перезапуск комп'ютера, але тоді у мене була старіша версія Ubuntu.
Маттео

@matteo Браузер?
Олі

ні, як я вже сказав, я перевірив ping, а не (лише) браузер.
Маттео

@matteo Я додав більше, але мені не вистачає ідей. Просто немає ще багатьох місць, де хтось може кешувати DNS :)
Олі

39

За 12.04:

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

sudo kill -HUP $(pgrep dnsmasq)

Дякую! Ви перший, хто бачив щось, про кешування за замовчуванням 12,04!
Тарка

6
12.04 не кешує dns за замовчуванням - перевірте свій syslog після перезавантаження мережевого менеджера; він матиме запис, який показує, що 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 поширюються за допомогою копання та протистояння комусь іншому, ніж ваші сервери DNS за замовчуванням. У цьому випадку google DNS.

dig @8.8.8.8 example.com


12
Варто зазначити, що nscd не встановлений за замовчуванням.
Scaine

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, це дуже допомогло.
хвилевід

+1 для переключення місцевого сервера імен на Google працював
Bibek Sharma

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 на моєму вікні ubuntu 12.10, і він працював фантастично.

sudo kill -HUP $(pgrep dnsmasq)

Ще одним корисним сигналом є SIGUSR1, який скидає трохи статистики в syslog або, як це зазначається з man dnsmasq:

У режимі --no-daemon або коли ввімкнено повний журнал (-q), робиться повне скидання вмісту кешу.


використовувати pkillзамість killіpgrep
Роберт Сімер


0

Я також виявив суперечності, але це: https://superuser.com/a/521562 прокидається для мене (Ubuntu 13.10 з останніми оновленнями, не встановлено спеціальних мережевих пакетів).
Словом, просто скористайтеся цим
sudo /etc/init.d/dns-clean


0

Я рекомендую openDNS спеціально на віддалених серверах Ubuntu, це полегшує багато болю ...

Як це зробити? Ну...

cd /etc/dhcp
sudo nano dhclient.conf

вставити цей ПЕРЕД РОБОМ "РОБОТИ маска підмережі ..."

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.