Як очистити кеш DNS у Windows, macOS і Linux
Щоб очистити DNS, виконайте: ipconfig /flushdns у Windows, sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder у macOS або resolvectl flush-caches у Linux із systemd-resolved. Точна команда залежить від вашої операційної системи, а в Linux ще й від того, який резолвер там працює.
Що таке DNS-кеш і чому очищення допомагає
Щоразу, коли пристрій визначає IP-адресу за іменем хоста, він на певний час зберігає відповідь, замість того щоб питати знову при наступному запиті. Ця збережена відповідь живе в DNS-кеші операційної системи, і він окремий від DNS-кешу, який поверх нього тримає ваш браузер. Саме кешування робить перегляд сторінок швидким: без нього кожен запит до кожного ресурсу на сторінці запускав би новий пошук.
Кеш стає проблемою в ту мить, коли запис змінюється. Якщо сайт переїхав на нову IP-адресу, змінив хостинг-провайдера або оновив CNAME, ваша машина може й далі відповідати старим значенням, поки кешований запис не втратить чинність. Резолвери також кешують негативні відповіді, тобто «такого імені не існує», на період, заданий SOA-записом домену, тож ім’я, яке щойно запрацювало, усе ще може кілька хвилин не працювати локально. Очищення кеша змушує наступний пошук вийти свіжим, а не повторно використовувати те, що вже було збережено.
Як очистити DNS у Windows
- Відкрийте командний рядок. Власні інструкції Microsoft для усунення несправностей DNS радять запускати його з підвищеними правами (клацніть правою кнопкою і виберіть Запуск від імені адміністратора), тож почніть із цього, якщо звичайна версія поводиться дивно.
- Виконайте
ipconfig /flushdns. За документацією Microsoft Learn для цієї команди, вона «очищує і скидає вміст кешу DNS-клієнта», відкидаючи і негативні записи, і все, що додалося динамічно. - Перевірте результат командою
ipconfig /displaydns, яка виводить усе, що зараз є в кеші резолвера. Одразу після очищення список має бути майже порожнім; відвідайте кілька сайтів і виконайте команду знову, щоб побачити, як там з’являються свіжі записи.
Якщо застаріла адреса весь час повертається, разом з орендою мережевої адреси в кеші могли залишитися й самі DNS-сервери, видані по DHCP. Звільнення й поновлення адаптера прибирає обидва шари одразу:
ipconfig /release
ipconfig /renew
Як очистити DNS у macOS
Команда залежить від того, наскільки стара версія macOS на машині, і використання команди не для тієї версії на сучасному Mac просто нічого не робить.
- Yosemite 10.10.4 і всі версії після неї (це охоплює всі версії macOS, які й досі підтримуються, включно з Sequoia, Sonoma, Ventura, Monterey і Big Sur):
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder. Перша команда очищує кеш Directory Service, друга надсилає mDNSResponder сигнал HUP, щоб той перезапустився і скинув усе, що тримав. - Тільки Yosemite з 10.10 по 10.10.3 використовувала інший інструмент:
sudo discoveryutil mdnsflushcache. - Mavericks, Mountain Lion і Lion: достатньо було й самого
sudo killall -HUP mDNSResponder. - Snow Leopard (10.6 - 10.6.8): лише
sudo dscacheutil -flushcache, без кроку з killall.
Якщо у вас не Mac, достатньо старий, щоб бути випущеним до оновлення Yosemite у 2014 році, використовуйте першу команду. Обидві її частини вимагають пароль вашого облікового запису, і у разі успіху команда не виводить нічого.
Як очистити DNS у Linux
У Linux немає єдиного DNS-кеша для очищення, бо різні дистрибутиви постачають різні стеки резолвера. Перш ніж обирати команду, перевірте, який саме активний у вас.
Спершу виконайте resolvectl status. Якщо команда повертає налаштування DNS по кожному інтерфейсу, машина працює на systemd-resolved, який є типовим у сучасних Ubuntu, Fedora й більшості інших дистрибутивів. Якщо команда не знайдена, перевірте два інших поширені сервіси: systemctl status nscd або systemctl status dnsmasq (або, якщо systemd не використовується, пошукайте процес командою ps aux | grep -E 'nscd|dnsmasq').
- systemd-resolved (systemd 239 і новіші):
resolvectl flush-caches. Посібник systemd описує це як очищення «всіх кешів DNS-записів, які сервіс тримає локально». Перевірити результат можна командоюresolvectl statistics, яка показує поточний розмір кеша. - systemd-resolved на старішому systemd (до перейменування у версії 239):
sudo systemd-resolve --flush-caches. Деякі сучасні дистрибутиви досі тримають це як аліас для сумісності навіть після появиresolvectl, тож варто спробувати, якщоresolvectlвідсутній, аsystemd-resolveні. - nscd:
sudo systemctl restart nscdперезапускає весь сервіс і разом з ним очищує кеш. Щоб інвалідувати лише кеш hosts без перезапуску, на дистрибутивах, що підтримують цей прапорець, працюєsudo nscd -i hosts. - dnsmasq: надсилання сигналу HUP очищує кеш без зупинки сервісу, як зазначено в його man-сторінці:
sudo killall -HUP dnsmasq. Звичайнийsudo systemctl restart dnsmasqтакож працює і додатково перезавантажує конфігурацію.
Як очистити власний DNS-кеш браузера
Chrome тримає власний DNS-кеш, окремий від системного, тож самого лише очищення кеша ОС часто недостатньо, щоб зміна набула чинності. Відкрийте chrome://net-internals/#dns і натисніть Clear host cache. Браузери на Chromium (Edge, Brave, Opera та інші) відкривають ту саму сторінку за тією самою адресою.
Але це ще не повне вирішення. Chrome також тримає пул уже відкритих з’єднань зі старою IP-адресою і може повторно використати одне з них замість того, щоб створювати нове, навіть після того, як DNS-кеш порожній. Відкрийте chrome://net-internals/#sockets і скористайтеся Flush socket pools, щоб закрити і їх. Якщо сайт після обох кроків усе ще завантажує стару версію, спробуйте приватне вікно, оскільки воно стартує взагалі без кешованих з’єднань.
Чому стара адреса з’являється навіть після очищення
Якщо ви очистили всі кеші на машині, а браузер усе ще показує старий сервер, затримка зазвичай уже не локальна. Домашній роутер зазвичай тримає власний невеликий DNS-кеш для кожного пристрою в мережі, і перезавантаження роутера прибирає цей шар. Крім роутера, власний кеш тримає й резолвер вашого провайдера, і прямого способу очистити саме його у вас немає; він очищується сам, коли спливає TTL кешованого запису.
TTL, значення часу життя DNS-запису, і є реальним обмеженням того, наскільки швидко зміна може поширитися. Кожен резолвер між вами й авторитетним nameserver-ом має право тримати відповідь рівно стільки секунд, перш ніж він зобов’язаний спитати знову. Запис із TTL в одну годину може цілком законно й далі віддавати стару адресу частині відвідувачів майже годину після зміни, хоч би що ви очищали на власній машині. Дивіться як працює поширення DNS про те, що керує цим часовим вікном і як перевірити, чи запис уже оновився всюди.
Часті запитання
Чи потрібно перезавантажувати комп’ютер після очищення DNS?
Ні. Кожна команда вище діє миттєво й очищує лише кеш у пам’яті; перезавантаження не є частиною процесу ні у Windows, ні в macOS, ні в Linux.
Чому очищення DNS не вирішило проблему?
Стару відповідь зазвичай тримають три речі: власний кеш браузера (очистіть його окремо на chrome://net-internals/#dns), роутер, що обслуговує вашу мережу, або TTL запису, який просто ще не сплив десь-інде в інтернеті. Якщо пошук узагалі не вдається чи завершується тайм-аутом, а не повертає застарілу відповідь, це радше вказує на DNS-сервер, що не відповідає, ніж на проблему з кешем.
Як очистити DNS на телефоні?
Ні iOS, ні Android не мають команди для ручного очищення DNS. Увімкнення й вимкнення режиму польоту або перемикання з Wi-Fi на мобільний інтернет і назад змушує пристрій скинути кешований стан DNS і визначити ім’я заново при наступному запиті.
Чи виправляє очищення DNS повільне завантаження сторінок?
Рідко саме собою. Пошкоджений або надто великий локальний кеш може додати невелику затримку, але стабільно повільні пошуки частіше спричинені самим резолвером. Дивіться чому DNS-пошуки бувають повільними про ймовірніші причини й способи їх перевірити.
У чому різниця між очищенням DNS і очищенням кеша браузера?
Кеш браузера зберігає вміст сторінки: HTML, CSS, зображення й скрипти. DNS-кеш зберігає лише відповідність між іменем хоста та IP, потрібну, щоб узагалі знайти сервер. Очищення одного не очищує інше, і застаріла сторінка може бути наслідком будь-якого з них.
Як підтвердити, що очищення спрацювало?
У Windows одразу після очищення виконайте ipconfig /displaydns; список має повернутися майже порожнім. У Linux із systemd-resolved resolvectl statistics показує поточний розмір кеша. У macOS немає еквівалентної команди для перевірки, тож практичний спосіб - знову визначити домен командою dig example.com або запустити перевірку з-за меж власної мережі інструментом на кшталт DNS-запиту, який опитує кілька локацій одночасно і заодно показує, чи застаріла відповідь локальна для вас, чи надходить від власних nameserver-ів домену.