Linux local dns cache

How do you see the OS DNS cache on linux?

According to Cloudflare docs, the sequence of a DNS query from Chrome to the recursive resolver looks something like this:

Check browser DNS cache --miss--> Check OS DNS cache --miss--> Recursive resolver | | V V hit hit 

Chrome’s DNS cache chrome://net-internals/#dns and firefox’s DNS cache about:networking#dns lists entries in one or another, and the Windows DNS cache can be accessed with ipconfig /displaydns . The Windows version looks like this:

PS C:\> ipconfig /displaydns Windows IP Configuration chrome.cloudflare-dns.com ---------------------------------------- Record Name . . . . . : chrome.cloudflare-dns.com Record Type . . . . . : 1 Time To Live . . . . : 54 Data Length . . . . . : 4 Section . . . . . . . : Answer A (Host) Record . . . : 104.18.27.211 vortex.data.microsoft.com ---------------------------------------- Record Name . . . . . : vortex.data.microsoft.com Record Type . . . . . : 5 Time To Live . . . . : 6 Data Length . . . . . : 8 Section . . . . . . . : Answer CNAME Record . . . . : asimov.vortex.data.trafficmanager.net . 

systemd-resolve

rj@VPS:~$ systemd-resolve motel6.com motel6.com: 23.35.171.243 -- link: eth0 -- Information acquired via protocol DNS in 85.2ms. -- Data is authenticated: no rj@VPS:~$ systemd-resolve motel6.com motel6.com: 23.35.171.243 -- link: eth0 -- Information acquired via protocol DNS in 1.4ms. -- Data is authenticated: no 

I would assume on the second instance, it’s pulling from the OS DNS cache, but a DNS request to VPS’ DNS server could also be 1.4ms and now cached.

Question

How do you see all entries in the DNS cache for Linux? (Bonus points for macos as well, but I’m scoping this to Linux)

Источник

Установка локального сервера кеширования DNS на Linux

img

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

Установка локального сервера кеширования DNS на Linux

Как кэширующий DNS-сервер может пригодиться?

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

Эта идея может показаться бесполезной. Подумаешь, какие-то там секунды. Но если DNS сервера провайдера тратят много времени на разрешение имени, то в результате падает скорость Интернет серфинга. Например, домашняя страница новостного канала MSNBC для корректной работы обращается более чем к 100 уникальным доменам. Даже если на запрос тратится одна десятая секунды, в итоге получается 10 секунд ожидания, что по нынешним меркам слишком много.

Читайте также:  Сервер arma 3 linux

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

И наконец, system-resolved поддерживает новейшие стандарты вроде DNSSEC и DNSoverTLS или DoT. Эти технологии увеличивают безопасность при работе в Интренет.

Какой локальный кэширующий сервер выбрать?

В этом руководстве будет использован сервер systemd-resolved . Эта утилита является частью набора управления системой systemd . Если в вашей системе используется systemd , а большинство дистрибутивов Linux используют это, то в системе уже установлен systemd-resolved , но не запущен. Большинство систем не используют эту утилиту.

systemd-resolved запускает небольшой локальный кэширующий DNS-сервер, который мы настроим на запуск при загрузке системы. Затем мы изменим конфигурацию всей системы так, чтобы DNS запросы шли на локальный сервер.

Как проверить используется ли systemd-resolved?

В некоторых дистрибутивах, например Ubuntu 19.04, по умолчанию используется systemd-resolved .

Если у вас уже запущен systemd-resolved , тогда не нужно что-то настраивать в системе. Но нужно проверить на корректность утилит управления сетевыми настройками, такие как NetworkManager, так как они могут игнорировать системные настройки сети.

Перед тем как перейти к следующему разделу проверьте запущен ли в вашей системе systemd-resolved :

Если в ответ получите сообщение ниже, значит в системе не настроен systemd-resolved :

$ resolvectl status Failed to get global data: Unit dbus-org.freedesktop.resolve1.service not found.

И наоборот, если на выходе видите что-то подобное, то systemd-resolved уже работает:

Global LLMNR setting: yes MulticastDNS setting: yes DNSOverTLS setting: opportunistic DNSSEC setting: allow-downgrade DNSSEC supported: no Current DNS Server: 1.1.1.1 DNS Servers: 1.1.1.1 1.0.0.1

Включение и настройка systemd-resolved

Отдельно устанавливать systemd-resolved не нужно, так как этот сервис является частью systemd . Всё что нужно сделать это запустить его и добавить в автозагрузку. Для включения данной службы введите команду ниже:

$ sudo systemctl start systemd-resolved.service

Далее нужно ввести следующую команду, чтобы добавить службу в автозапуск.

$ sudo systemctl enable systemd-resolved.service

И наконец нужно прописать DNS сервера, куда будет обращаться локальный сервер для разрешения имен. Есть много разных сервисов, но приведённые ниже самые быстрые, бесплатные и оба поддерживают DNSSEC и DoT:

Cloudflare Public DNS

Для этого откройте конфигурационный файл systemd-resolved любым текстовым редактором:

$ sudo nano /etc/systemd/resolved.conf

Отредактируйте строку, которая начинается на:

И пропишите одну из вышеуказанных пар. Мы используем Cloudflare Public DNS:

Сохраните изменения и перезапустите службу systemd-resolved :

$ sudo systemctl restart systemd-resolved.service

Итак, systemd-resolved уже запущен и готов для выполнения быстрых и безопасных DNS запросов, как только мы настроим систему соответствующим образом.

Читайте также:  Device driver in linux operating system

Настройка системы для использования systemd-resolved

Есть несколько путей настройки системы на использование локального DNS сервера. Мы рассмотрим два наиболее используемых метода. Первый – рекомендуемый метод, второй конфигурация в режиме совместимости. Разница в том, как будет обрабатываться файл /etc/resolv.conf .

В файле /etc/resolv.conf содержатся IP адреса серверов разрешения имен, которые используются программами. Программы при необходимости разрешения доменного имени обращаются к этому файлу в поисках адресов серверов разрешения имен.

Итак, первый метод конфигурации заключается в создании символьной ссылки на /run/systemd/resolve/stub-resolv.conf . В этом случае файл /etc/resolv.conf управляется службой systemd-resolved .

Это может вызвать проблемы в том случае, если другие программы пытаются управлять файлом /etc/resolv.conf . Режим совместимости оставляет /etc/resolv.conf не тронутым, позволяя программам управлять им. В этом режиме, в настройках программ, управляющих файлом /etc/resolv.conf в качестве системного сервера разрешения имен должен быть указан IP 127.0.0.53 .

Конфигурация в рекомендуемом режиме

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

$ sudo mv /etc/resolv.conf /etc/resolv.conf.original

Затем создаем символьную ссылку:

$ sudo ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

И наконец перезапускаем службу systemd-resolved :

$ sudo systemctl restart systemd-resolved.service

Настройка в режиме совместимости

В режиме совместимости, нужно убедиться, что локальный сервер разрешения имен system-resolved запущен и используется системными службами. Откройте файл /etc/resolv.conf любым редактором:

Удалите все строки, которые содержать ключевое слово nameserver и добавьте одну единственную строку:

Этот файл мажет быть изменён любой программой. Чтобы предотвратить это нужно настроить программы так, чтобы в качестве DNS они использовали адрес 127.0.0.53 .

Отладка systemd-resolved

Посмотреть, как система выполняет DNS запросы после внесённых изменений сложно. Самый эффективный метод – это включить режим отладки для службы systemd-resolved , а затем просмотреть файл логов.

systemd-resolved можно перевести в режим отладки созданием специального служебного файла, в котором содержатся настройки отладки. Делается это следующей командой:

$ sudo systemctl edit systemd-resolved.service

Вставьте в файл следующие строки:

[Service] Environment=SYSTEMD_LOG_LEVEL=debug

После этого служба systemd-resolved автоматический перезапуститься. Откройте второй терминал и просмотрите логи в journald :

$ sudo journalctl -f -u systemd-resolved

Строка, которая содержит слова “Using DNS server” показывает, какой DNS сервер используется для разрешения имён. В нашем случае это DNS сервера Cloudflare

Using DNS server 1.1.1.1 for transaction 19995.

Слова “Cache miss” в начале строки означает, что для данного домена нет закэшированной информации:

Cache miss for example.com IN SOA

И наконец слова “Positive cache” в начале строки означает, что systemd-resolved уже запрашивал информацию об этом домене и теперь ответы возвращает из кэша:

Positive cache hit for example.com IN A

Не забудьте отключить режим отладки, так как в это время создается большой файл логов. Сделать это можно командой:

$ sudo systemctl edit systemd-resolved.service

а затем удалить добавленные выше две строки.

Читайте также:  Создаем свой инсталлятор linux

Использование защищенных DNS запросов

systemd-resolved один из немногих DNS серверов, которые поддерживает DNSSEC и DNSoverTLS. Эта два механизма позволяют убедиться, что полученная DNS информация подлинная (DNSSEC) и он не был изменён по пути (DoT).

Эти функции легко включаются редактированием основного конфигурационного файла system-resolved :

$ sudo nano /etc/systemd/resolved.conf

Измените файл следующим образом:

DNSSEC=allow-downgrade DNSOverTLS=opportunistic

Сохраните изменения и перезапустите службу systemd-resolved .

$ sudo systemctl restart systemd-resolved.service

Пока прописанные DNS сервера поддерживают эти две функции все DNS запросы будут защищены. DNS сервера Google и CloudFlare поддерживают эти механизмы защиты.

Заключение

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

Источник

How to read the local DNS cache contents?

I know that on Windows I can issue ipconfig /displaydns and I see the local DNS’s cache content. How can I list the DNS’s cache content in Linux? I would like to get as much as cross-distro solution as possible.

As far as I am aware, there is no DNS cache maintained on the client in Linux (resolver) unless the system is using local caching only dns service on the client.

You always have the /etc/hosts file which may contain entries generated by DNS blacklisting services.

4 Answers 4

Prior to systemd , there was almost no OS-level DNS caching

Prior to systemd there was no OS-level DNS caching on Linux (and probably most Unix), unless nscd or dnsmasq was installed and running.

Even then, the DNS caching feature of nscd was disabled by default in Debian at least, simply because it is broken.

As for dnsmasq , the caching seems to occur in RAM by default.

A lot of systems these days use dnsmasq by default so unix.stackexchange.com/q/162973/79839 could be useful.

And these days, anything using systemd will likely have systemd-resolved running by default which does cache DNS results based on their TTL

nscd is the Name Service Caching Daemon. This is the utility that Linux, Solaris, and other use to cache name service lookups. Name Service in this case is a generic term, not strictly limited to host resolution, but also users, groups, etc.

I don’t know of a way to see the actual contents of the cache, though you can display statistics with /usr/sbin/nscd -g .

That can at least show you how efficient your cache is, though not exactly what it’s resolving.

You may have other options if you’re using an alternate caching tool, like DNSMASQ.

Источник

Оцените статью
Adblock
detector