Как вы видите DNS-кеш ОС в Linux?

Контекст

Согласно документации Cloudflare, последовательность DNS-запроса от Chrome к рекурсивному преобразователю выглядит примерно так:

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

Кэш DNS Chrome chrome://net-internals/#dns и кеш DNS Firefox about:networking#dns перечисляет записи в том или ином виде, а к кешу DNS Windows можно получить доступ с помощьюipconfig /displaydns.

Версия для Windows выглядит так:

      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-решить

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

      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

Я предполагаю, что во втором случае он извлекается из кэша DNS ОС, но запрос DNS к DNS-серверу VPS также может составлять 1,4 мс и теперь кэшироваться.

Вопрос

Как просмотреть все записи в кеше DNS для Linux?

(Бонусные баллы также для MacOS, но я рассчитываю на Linux)

1 ответ

Не гарантируется, что кэширование будет присутствовать в каждой системе Linux. В традиционной конфигурации (т. е. без systemd) приложения будут отправлять DNS-запросы непосредственно на серверы, находящиеся в /etc/resolv.conf, поэтому никакой «системы» не существует. Кэш DNS должен быть виден в первую очередь.

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

systemd-resolved как кэш DNS

Если вы используете systemd-resolved в качестве кэша DNS (который в наши дни действительно наиболее близок к «системному кэшу DNS»), запустите systemctl kill -s USR1 systemd-resolvedи он выгрузит все содержимое кэша в системный журнал (journalctl -b -u systemd-resolved) после получения SIGUSR1.

Обратите внимание, что файл 'systemd-resolve' инструмент называетсяresolvectl queryв последних версиях, который дополнительно имеет--cache=noвозможность обойти кеширование, выполненное systemd-resolved.

Проверяя это, мы можем запросить у Journalctl все записи DNS в кеше после запуска скрипта, а затем с помощью grep получить записи IN .

      time=$(date +%s)
systemctl kill -s USR1 systemd-resolved
journalctl -b -u systemd-resolved -S "@$time" -o cat | grep " IN "

Мы получаем такой вывод:

      cloudflare.com IN A 104.16.133.229
cloudflare.com IN A 104.16.132.229
motel6.com IN A 23.35.171.243
vortex.data.microsoft.com IN CNAME asimov.vortex.data.trafficmanager.net

Несистемные преобразователи DNS

До systemd также нередко запускался Dnsmasq или Unbound Резолверы на 127.0.0.1 — у них, конечно, есть свои кэши. Если один из них работает в вашей системе, он, вероятно, заслуживает отдельной темы, поскольку в обоих случаях возможность создания дампа кэша должна быть заранее включена вручную.

  • В несвязанном:unbound-control dump_cacheвыгрузит весь кеш в текстовом формате, который можно будет загрузить обратно снова, но канал управления необходимо сначала настроить с помощьюunbound-control-setup.

  • В dnsmasq: SIGUSR1 сгенерирует дамп кэша, как и в случае с systemd-resolved, но это работает только в том случае, еслиlog-queriesопция включена (или если dnsmasq работает в режиме отладки с использованием-d).

Некоторые системы могут запускать nscd как демон кэширования общего назначения, который работает на более высоком уровне, чем DNS-запросы – он обрабатывает абстрактные " ;поиск имени»; Запросы. Похоже, что нет способа нормально выгрузить содержимое кэша (хотя nscd -pсуществует для проверки «автономного кэша»; в /var/db, если это разрешено).

Другие вопросы по тегам