Как очистить кеш DNS записей в Ubuntu 16.04+

Если зашёл на эту страницу не случайно, а понимая, в чём проблема  проматывай до команд.

В двух словах о DNS

DNS (англ. Domain Name System — система доменных имён) — компьютерная распределённая система для получения информации о доменах. Чаще всего используется для получения IP-адреса по имени хоста (компьютера или устройства), получения информации о маршрутизации почты, обслуживающих узлах для протоколов в домене (SRV-запись).

То есть с помощью DNS мы из слова localhost в строке браузера получим IP-адрес 127.0.0.1, соответствующий нашему локальному сетевому интерфейсу. Удобно, но само это сопоставление имя -> адрес хранится во многих местах. Сначала поглядеть в кеше, потом в /etc/hosts, затем сходить на сервера DNS, прописанные в /etc/resolve.conf, а они ходят на другие сервера DNS… И так до корневых. И на каждом уровне есть задержка обновления информации, кеши и прочие радости.

В результате неактуальных данных о DNS у нас могут быть интересные проблемы:

  • Ошибка «connection timed out» при попытке открыть страничку в браузере.
  • После регистрации домена можно долго ждать, пока все DNS-сервера о нём узнают.
  • Неправильные IP, которые закешировались и ведут на неправильный IP сервера (сайт будет недоступен).

Сколько обновляются DNS записи

По-разному.

Можно сразу прописать в /etc/hosts — будет сразу.

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

Но если не фантазировать, то это время колеблется от десятков минут до пары дней. То есть зарегистрированный домен или измененные записи DNS станут «видны» в интернете не сразу, а лишь по истечению некоторого времени.

Как очистить DNS кеш у себя на компьютере

Как ни странно, на Windows очистить DNS-кеш можно одной командой в консоли:

ipconfig /flushdns

В то время как на Linux существует много вариантов, каждый из которых не работает в конкретном дистрибутиве и т. д.

Если у нас Ubuntu, то я бы рекомендовал поставить службу nscd (name service caching daemon) и очистить ей DNS кеш:

sudo apt install nscd
sudo service nscd restart

Также можно посмотреть, что вообще происходит с кешем:

sudo ncsd -g

И список закешированных доменов

sudo strings /var/cache/nscd/hosts
Поделиться заметкой:
Узнать версию Linux
Все способы узнать версию дистрибутива Linux (а также FreeBSD, MacOS и прочих)
Права на файлы
Права на файлы и папки в Linux, FreeBSD и MacOS
Настоящий интеллект