Как вы видите 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, если это разрешено).