Я делал несколько заметок на тему systemd, где встроенные возможности этой системы управления службами заменяют функциональность других линуксовых программ и утилит:
◽Systemd timers как замена Cron
◽Journald как замена Syslog
◽Systemd-journal-remote - централизованное хранение логов
◽Systemd-journal-gatewayd - просмотр логов через браузер
◽Systemd-mount для монтирования дисков
◽Есть ещё timesyncd как замена ntp или chrony.
Сегодня расскажу про ещё одну такую службу, которая заменяет локальный кэширующий DNS сервер - systemd-resolved. Изначально я научился настраивать DNS сервер Bind ещё в те времена, когда было привычным делом держать свою зону на своих серверах. Везде использовал его, даже в простых случаях, где нужно простое кэширование без поддержки своих зон. Потом познакомился с Dnsmasq и для обычного кэширования стал использовать его, так как настроить быстрее и проще. На пути к упрощению решил попробовать systemd-resolved. Он выступает в роли локального кэширующего сервера, то есть обрабатывает только запросы сервера, где он установлен, и его приложений.
В каких-то дистрибутивах systemd-resolved может быть в составе systemd. В Debian 12 это не так, поэтому придётся поставить отдельно:# apt install systemd-resolved
Далее открываем конфиг /etc/systemd/resolved.conf
и приводим его примерно к такому виду:[Resolve]
DNS=77.88.8.1 1.1.1.1 8.8.8.8
FallbackDNS=77.88.8.8 8.8.4.4
Cache=yes
Это минимальный набор настроек для локального кэширующего сервера. Сервера из списка FallbackDNS будут использоваться в случае недоступности основного списка.
Перезапускаем службу:# systemctl restart systemd-resolved
После установки systemd-resolved удаляет /etc/resolv.conf
и заменяет ссылкой на /run/systemd/resolve/stub-resolv.conf
. Проверить работу службы можно разными способами. Например так:# resolvectl query ya.ru
или так:# dig @127.0.0.54 ya.ru
То есть локальный DNS сервис имеет адрес 127.0.0.54. Он же и указан в виде nameserver 127.0.0.53
в resolv.conf
.
Посмотреть статус службы можно так:# resolvectl status
Если захотите посмотреть подробности работы службы, например, увидеть сами запросы и узнать сервера, к которым они были переадресованы, то можно включить режим отладки. # systemctl edit systemd-resolved
Добавляем параметр:[Service]
Environment=SYSTEMD_LOG_LEVEL=debug
Перезапускаем службу и смотрим логи:# systemctl restart systemd-resolved
# journalctl -f -u systemd-resolved
Если ответа нет в кэше, то вы увидите информацию о том, что был запрос к публичному DNS серверу. Если в кэше есть запись об этом домене, то увидите строку:Positive cache hit for example.com IN A
Посмотреть статистику по запросам:# resolvectl statistics
Очистить локальный кэш:# resolvectl flush-caches
В принципе, простой и эффективный инструмент. Можно пользоваться, особенно если он идёт в комплекте с systemd. Было бы интересно его приспособить и для удалённых запросов. Например, поставить на гипервизор и обслуживать запросы виртуальных машин. Но как я понял, он так не умеет и не предназначен для этого.
#systemd #dns
>>Click here to continue<<
