Ядро
Ядро Linux может опосредованно “кэшировать” DNS-трафик через подсистему
netfilter/conntrack, если используется stateful-фильтрация. Несмотря на то, что UDP — протокол без установления соединения, ядро отслеживает состояние пакетов, относящихся к одному блоку запрос-ответ (например, запрос от [src_ip:src_port] к [8.8.8.8:53] и ожидаемый ответ от [8.8.8.8:53] к [src_ip:src_port]) и временно хранит информацию — по умолчанию около 30 секунд. Это необходимо для NAT и правил вроде iptables -m conntrack --ctstate ESTABLISHED,RELATED.Проверить текущие записи можно командой:
conntrack -L -p udp --dport 53
В списке отобразятся активные DNS-сессии, которые считаются допустимыми до истечения таймаута. Повторные DNS-запросы к тем же адресам в пределах срока жизни этих записей могут быть обработаны в рамках существующей записи состояния. Это не полноценное кэширование DNS-ответов, но conntrack может влиять на поведение сетевого уровня, особенно при диагностике проблем с NAT или firewall.
Для удаления записей из таблицы отслеживания соединений можно воспользоваться командой:
conntrack -D -p udp --dport 53Системный уровень
1.
systemd-resolvedСовременные дистрибутивы с systemd часто используют
systemd-resolved в качестве основного DNS-клиента, который:- имеет собственный кэш DNS-запросов, включая положительные и (опционально) отрицательные ответы;
- поддерживает split DNS (разные DNS-серверы для разных доменов), конфигурируется через systemd-networkd или NetworkManager;
- поддерживает DNS-over-TLS (DoT), включая fallback-серверы и DNSSEC;
- предоставляет API по D-Bus (org.freedesktop.resolve1), позволяет получать статус, менять настройки и управлять кэшем через resolvectl.
2. nscd (Name Service Cache Daemon)
Если запущен nscd, он кэширует результаты NSS-вызовов, включая DNS. Его настройки находятся в /etc/nscd.conf
enable-cache hosts yes
positive-time-to-live hosts 600
negative-time-to-live hosts 20‼️ Важный момент: nscd устарел и не рекомендуется к использованию в новых системах. В Debian-based дистрибутивах чаще всего его заменяет systemd-resolved, но в RHEL-based дистрибутивах он ещё встречается.
3. Популярные локальные кэширующие резолверы
dnsmasq — популярный выбор для локального кэширования(настройка кэша):
cache-size=1000 (cache-size управляет размером кэша. По умолчанию он небольшой (150), и для заметного эффекта его увеличивают до 1000–5000)
neg-ttl=60unbound — более мощный DNS-рекурсор.
Управление кэшем гибкое:
Размер кэша задаётся параметром msg-cache-size (отвечает за ответы) и rrset-cache-size (за записи ресурсов):
msg-cache-size: 50m
rrset-cache-size: 100mTTL кэшированных ответов можно ограничить директивами cache-min-ttl и cache-max-ttl
cache-min-ttl: 30 # минимальный TTL для любых ответов
cache-max-ttl: 86400 # максимальный TTL (24 часа)bind - распространенный DNS-сервер с поддержкой рекурсивного разрешения и кэширования. Управление кэшем и его мониторинг осуществляется через команду rndc (Remote Name Daemon Control).
В конфигурационном файле named.conf можно задавать TTL для кэша и контролировать поведение:
options {
max-cache-ttl 86400; // максимальное время жизни кэша (в секундах)
max-ncache-ttl 3600; // максимальное время жизни негативных ответов (NXDOMAIN)
};✋ В следующей части расскажу про уровни приложений и языков программирования, ставьте 👍
#DNS #Linux | 😏 @iscode