===== Настройка кеширующего DNS-клиента systemd-resolved в Debian GNU/Linux 12 (Bookworm) ===== {{:unix-linux:debian:pasted:20171124-194401.png }} Одним из изменений конфигурации **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'' будет автоматически заменена на следующий вид: ... hosts: files resolve [!UNAVAIL=return] dns myhostname ... Отредактируем конфигурационный файл ''/etc/systemd/resolved.conf'':
# nano /etc/systemd/resolved.conf
Заполним параметры секции ''[Resolve]'', например, следующим образом: # 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
{{ :unix-linux:debian:bookworm:pasted:20230620-190132.png }} ---- Для совместимости с приложениями, которые не используют библиотечные вызовы, а обращаются к 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
{{ :unix-linux:debian:bookworm:pasted:20230621-091117.png }} Если мы заглянем в этот самый, автоматически генерируемый, конфиг ''/run/systemd/resolve/stub-resolv.conf'', то увидим там отсылку на локальный псевдо-сервер DNS с адресом **127.0.0.53**. {{ :unix-linux:debian:bookworm:pasted:20230621-093006.png }} Отсылка на локальный псевдо-сервер DNS связана с тем, что в конфигурации по умолчанию в ''/etc/systemd/resolved.conf'' активирован механизм **DNSStubListener** (''DNSStubListener=yes''), который запускает отдельные TCP/UDP-прослушиватели на 127.0.0.53%lo:53 и 127.0.0.54:53: {{ :unix-linux:debian:bookworm:pasted:20230621-092159.png }} Согласно [[https://www.freedesktop.org/software/systemd/man/systemd-resolved.service.html|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 серверы будет автоматически изменена: {{ :unix-linux:debian:bookworm:pasted:20230621-100205.png }} При этом, само собой разумеется, в системе пропадут TCP/UPD-прослушиватели локального псевдо-сервера DNS: {{ :unix-linux:debian:bookworm:pasted:20230621-100649.png }} ---- После проведённой настройки и запуска **systemd-resolved** можно отключить настройки DNS в таких местах, как, например, в классическом для Debian конфигурационном файле ''/etc/network/interfaces''. При этом следует помнить про то, что если настройка сетевой подсистемы сервера выполняется с помощью конфигурационных файлов [[unix-linux:debian:bookworm:how-to-setup-network-configuration-with-systemd-networkd-on-debian-linux-12|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
{{ :unix-linux:debian:bookworm:pasted:20230621-102524.png }} С помощью этой же полезной утилиты можно сделать много дополнительных вещей, типа включения и выключения режима отладки, просмотра статистики использования кеша, очистки кеша, мониторинга запросов и ответов в реальном режиме времени и т.д. ---- Дополнительные источники информации: * [[https://www.freedesktop.org/software/systemd/man/systemd-resolved.service.html|man systemd-resolved.service]] * [[https://wiki.archlinux.org/title/Systemd-resolved_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)|ArchWiki на Русском - systemd-resolved]] * [[https://www.hippolab.ru/perehodim-na-systemd-resolved|HippoLab - Переходим на systemd-resolved]] ---- Проверено на следующих конфигурациях: ^ Версия ОС ^ Версия systemd-resolved ^ |Debian GNU/Linux Bookworm 12.0 | 252.6-1 amd64 | ---- {{:user:blogroot.png?50&nolink |}} Автор первичной редакции:\\ [[user:blogroot|Алексей Максимов]] \\ Время публикации: 20.06.2023 20:00 {{tag>Linux Debian "Debian 12" "Debian Bookworm" DNS systemd systemd-resolved resolved resolvectl NSS libnss}} ~~DISCUSSION~~