Вики IT-KB

Пошаговые руководства, шпаргалки, полезные ссылки...

Инструменты пользователя

Инструменты сайта


unix-linux:debian:bookworm:configuring-systemd-resolved-caching-dns-client-on-debian-12

Настройка кеширующего DNS-клиента systemd-resolved в Debian GNU/Linux 12 (Bookworm)

Одним из изменений конфигурации systemd, используемой по умолчанию в Debian GNU/Linux 12.0, является отсутствие службы, отвечающей за разрешение имён с возможностью кэширования результатов запросов с внешних DNS-серверов - systemd-resolved. Поэтому, если нужно ускорить работу механизма разрешения имён, например с корпоративных DNS-серверов, можно выполнить самостоятельную установку и настройку этой службы.

Устанавливаем одноимённый пакет systemd-resolved из стандартных репозиториев Debian Bookworm:

# apt-get install systemd-resolved

В ходе установки для службы systemd-resolved будет включён автоматический запуск при старте системы. Помимо этого, в систему автоматически будут доустановлены пакеты libnss-myhostname и libnss-resolve. Модуль nss-resolve (библиотека libnss_resolve.so из пакета libnss-resolve) будет добавлен в механизм Name Service Switch (NSS), который будет вызывать службу systemd-resolved для разрешения имён. А в конфигурационном файле /etc/nsswitch.conf строка hosts: files dns будет автоматически заменена на следующий вид:

nsswitch.conf
...
hosts:          files resolve [!UNAVAIL=return] dns myhostname
...

Отредактируем конфигурационный файл /etc/systemd/resolved.conf:

# nano /etc/systemd/resolved.conf

Заполним параметры секции [Resolve], например, следующим образом:

resolved.conf
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it under the
#  terms of the GNU Lesser General Public License as published by the Free
#  Software Foundation; either version 2.1 of the License, or (at your option)
#  any later version.
#
# Entries in this file show the compile time defaults. Local configuration
# should be created by either modifying this file, or by creating "drop-ins" in
# the resolved.conf.d/ subdirectory. The latter is generally recommended.
# Defaults can be restored by simply deleting this file and all drop-ins.
#
# Use 'systemd-analyze cat-config systemd/resolved.conf' to display the full config.
#
# See resolved.conf(5) for details.
 
[Resolve]
# Some examples of DNS servers which may be used for DNS= and FallbackDNS=:
# Cloudflare: 1.1.1.1#cloudflare-dns.com 1.0.0.1#cloudflare-dns.com 2606:4700:4700::1111#cloudflare-dns.com 2606:4700:4700::1001#cloudflare-dns.com
# Google:     8.8.8.8#dns.google 8.8.4.4#dns.google 2001:4860:4860::8888#dns.google 2001:4860:4860::8844#dns.google
# Quad9:      9.9.9.9#dns.quad9.net 149.112.112.112#dns.quad9.net 2620:fe::fe#dns.quad9.net 2620:fe::9#dns.quad9.net
DNS=10.0.0.9 10.1.0.9
#FallbackDNS=
Domains=sub1.holding.com sub2.holding.com
#DNSSEC=no
#DNSOverTLS=no
MulticastDNS=no
LLMNR=no
Cache=yes
#CacheFromLocalhost=no
#DNSStubListener=yes
#DNSStubListenerExtra=
#ReadEtcHosts=yes
#ResolveUnicastSingleLabel=no

После настройки конфигурационного файла выполняем перезапуск службы и проверяем её статус:

# systemctl restart systemd-resolved # systemctl status systemd-resolved


Для совместимости с приложениями, которые не используют библиотечные вызовы, а обращаются к DNS серверам напрямую, получая их из /etc/resolv.conf, нам потребуется символическая ссылка на файл resolv.conf, контент которого автоматически генерируется исходя из настроек, заданных нами в /etc/systemd/resolved.conf.

В конфигурации по умолчанию текущая реализация пакета systemd-resolved в Debian Bookworm при установке заменяет реальный файл /etc/resolv.conf на ссылку к автоматически генерируемому файлу: /run/systemd/resolve/stub-resolv.conf.

# ls -la /etc/resolv.conf

Если мы заглянем в этот самый, автоматически генерируемый, конфиг /run/systemd/resolve/stub-resolv.conf, то увидим там отсылку на локальный псевдо-сервер DNS с адресом 127.0.0.53.

Отсылка на локальный псевдо-сервер DNS связана с тем, что в конфигурации по умолчанию в /etc/systemd/resolved.conf активирован механизм DNSStubListener (DNSStubListener=yes), который запускает отдельные TCP/UDP-прослушиватели на 127.0.0.53%lo:53 и 127.0.0.54:53:

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

Если же по какой-то причине работа DNSStubListener вас не устроит и вы решите отказаться от его использования , то его также легко можно будет отключить в конфигурации /etc/systemd/resolved.conf (DNSStubListener=no) с последующим перезапуском службы systemd-resolved. В этом случае после перезапуска службы в генерируемом конфиге /run/systemd/resolve/stub-resolv.conf отсылка на DNS серверы будет автоматически изменена:

При этом, само собой разумеется, в системе пропадут TCP/UPD-прослушиватели локального псевдо-сервера DNS:


После проведённой настройки и запуска systemd-resolved можно отключить настройки DNS в таких местах, как, например, в классическом для Debian конфигурационном файле /etc/network/interfaces.

При этом следует помнить про то, что если настройка сетевой подсистемы сервера выполняется с помощью конфигурационных файлов systemd-networkd, и в файлах /etc/systemd/network/*.network тоже указаны настройки DNS, то эти настройки также попадут в результирующую конфигурацию systemd-resolved (и, как следствие, в тот же resolv.conf). Поэтому важно сразу выбрать стратегию того, в каком именно месте вы будете редактировать конфигурацию DNS серверов (в файлах /etc/systemd/network/*.network или в файле /etc/systemd/resolved.conf). На мой взгляд, указание DNS серверов и доменных суффиксов представляется более логичным в файлах /etc/systemd/network/*.network, так как это даёт дополнительную гибкость настройки, особенно в конфигурациях с несколькими сетевыми интерфейсами, каждый из которых должен использовать собственные DNS серверы.


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

# resolvectl status

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


Дополнительные источники информации:


Проверено на следующих конфигурациях:

Версия ОС Версия systemd-resolved
Debian GNU/Linux Bookworm 12.0 252.6-1 amd64

Автор первичной редакции:
Алексей Максимов
Время публикации: 20.06.2023 20:00

Обсуждение

Ваш комментарий:
 
unix-linux/debian/bookworm/configuring-systemd-resolved-caching-dns-client-on-debian-12.txt · Последнее изменение: 21.06.2023 10:25 — Алексей Максимов

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki