systemd-resolved (Русский)

systemd-resolved — служба systemd, выполняющая разрешение сетевых имён для локальных приложений посредством D-Bus, NSS-службы resolve (см. nss-resolve(8)) или локальной слушающей DNS-заглушки на адресе 127.0.0.53. Подробнее об использовании см. systemd-resolved(8).

Состояние перевода: На этой странице представлен перевод статьи systemd-resolved. Дата последней синхронизации: 11 июля 2021. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Установка

systemd-resolved входит в пакет , который установлен по умолчанию.

Настройка

systemd-resolved работает как распознаватель для Системы доменных имён (включая DNSSEC и DNS over TLS), Multicast DNS (mDNS) и Link-Local Multicast Name Resolution (LLMNR).

Настройки распознавателя можно изменить в файле и/или с помощью drop-in-файлов с суффиксом .conf в каталоге . См. .

Для запуска systemd-resolved запустите и включите службу systemd-resolved.service.

Совет: Чтобы лучше понимать контекст выборов и переключателей, включите для systemd-resolved сохранение подробной отладочной информации по инструкции в статье systemd#Диагностика службы.

DNS

systemd-resolved может выполнять разрешение доменных имён четырьмя различными способами. Все четыре режима работы подробно описаны в руководстве . Наиболее часто используются следующие два:

  1. С файлом DNS-заглушки systemd — файл содержит указание использовать локальную заглушку (local stub) на адресе 127.0.0.53 в качестве единственного DNS-сервера, а также список доменов для поиска. Это рекомендуемый режим работы. Файл стоит заменить символической ссылкой на файл заглушки, чтобы все процессы использовали последний при разрешения имён:
  2. С файлом resolv.confsystemd-resolved работает с файлом как обычный клиент. Этот режим менее разрушителен, поскольку другие программы по-прежнему смогут использовать .
Автоматически

systemd-resolved работает "из коробки" с сетевыми менеджерами, использующими файл . Никаких дополнительных настроек не требуется, поскольку systemd-resolved будет автоматически обнаружен при переходе по символической ссылке . Во всяком случае, это работает для systemd-networkd и NetworkManager.

Тем не менее, если какой-то DHCP- или VPN-клиент настраивает сервера имён и домены поиска с помощью resolvconf (список использующих resolvconf программ приведён в статье openresolv#Пользователи), то необходимо дополнительно установить пакет , который предоставляет символическую ссылку .

Вручную

В режиме локальной DNS-заглушки можно назначить произвольные DNS-серверы, указав их в файле :

/etc/systemd/resolved.conf.d/dns_servers.conf
[Resolve]
DNS=192.168.35.1 fd7b:d0bd:7a6e::1
Domains=~.
Примечание:
  • Если не указать в файле resolved.conf(5) опцию Domains=~., то systemd-resolved может использовать DNS-серверы из настроек отдельных сетевых интерфейсов, если параметр Domains=~. в них есть.
  • Данная опция не повлияет на запросы доменных имён, которые совпадают с каким-то более точным поисковым доменом из настроек интерфейса — разрешение таких имён будет выполняться посредством соответствующих "интерфейсных" DNS-серверов.

Подробнее о настройках для сетевых интерфейсов см. systemd-networkd#Файлы network.

Резерв

Если systemd-resolved не получает адреса DNS-серверов от сетевого менеджера и никакие сервера не были настроены вручную, то он использует специальные зарезервированные DNS-адреса. Таким образом, разрешение доменных имён работает всегда.

Изменить адреса можно с помощью параметра в файле , например:

Чтобы полностью отключить функциональность резервных DNS-серверов, задайте параметр без указания адреса:

DNSSEC

Проверка DNSSEC настраивается параметром в файле .

  • — проверка выполняется только в том случае, если опрашиваемый сервер её поддерживает.
  • — проверка выполняется всегда; если сервер не поддерживает DNSSEC, то разрешение доменных имён работать не будет. Пример:
Примечание:
  • Если ваш DNS-сервер не поддерживает DNSSEC и вы испытываете проблемы в стандартном (используется по умолчанию) allow-downgrade-режиме (см. systemd issue 10579), попробуйте полностью отключить DNSSEC в systemd-resolved параметром DNSSEC=false.
  • systemd-resolved может отключить DNSSEC после нескольких неудачных попыток выполнить проверку. Если задано значение DNSSEC=true, то разрешение имён вообще перестанет работать. См. systemd issue 9867.

Проверьте, работает ли DNSSEC, отправив запрос к домену с неправильной подписью:

Затем проверьте домен, подпись которого в порядке:

DNS over TLS

Важно: В systemd до версии 245.2-2 systemd-resolved проверяет сертификат DNS-сервера только в том случае, если он был выдан для IP-адреса сервера (что встречается довольно редко). Сертификаты без IP-адреса не проверяются, что открывает возможность для атаки "человек-посередине". См. systemd issue 9397.

DNS over TLS по умолчанию не работает. Чтобы его включить, задайте параметр в разделе файла . Чтобы включить проверку сертификата DNS вашего провайдера, добавьте соответствующее имя хоста в параметр в формате . Например:

С помощью ngrep можно проверить, работает ли DNS over TLS. В этом режиме для DNS-запросов используется порт 853 (вместо стандартного 53). По этой причине при разрешении имени с DoT команда не выдаст ничего, а команда выведет зашифрованные данные.

Wireshark позволяет более подробно изучить пакеты запросов и ответов DNS over TLS. Установить Wireshark можно с пакетами и .

mDNS

systemd-resolved может работать в режиме multicast DNS, причём и как распознаватель (resolver), так и как передатчик (responder).

Распознаватель выполняет разрешение имени хоста по схеме "имя_хоста.local"

mDNS будет работать для конкретного соединения только в том случае, если он включён одновременно и в глобальных настройках systemd-resolved (параметр MulticastDNS= в ), и в настройках сетевого менеджера для данного соединения. systemd-resolved по умолчанию работает как mDNS-передатчик, но systemd-networkd и NetworkManager требуют дополнительных настроек, чтобы включить этот режим для соединений:

  • Для systemd-networkd — задайте параметр MulticastDNS= в разделе , а также в разделе . См. .
  • Для NetworkManager — задайте параметр mdns= в разделе . См. . Также необходимо включить режим mDNS для каждого сетевого интерфейса, на котором он будет использоваться: .

Если вы планируете использовать mDNS при работающем межсетевом экране, не забудьте открыть UDP-порт .

LLMNR

Link-Local Multicast Name Resolution — разработанный Microsoft протокол разрешения имён хостов.

LLMNR будет работать для конкретного соединения только в том случае, если он включён одновременно и в глобальных настройках systemd-resolved (параметр в ), и в настройках сетевого менеджера для данного соединения. systemd-resolved по умолчанию работает как LLMNR-передатчик, но systemd-networkd и NetworkManager требуют дополнительных настроек, чтобы включить этот режим для соединений:

  • Для systemd-networkd — задайте параметр в разделе . См. .
  • Для NetworkManager — задайте параметр llmnr= в разделе . См. .

Если вы планируете использовать LLMNR при работающем межсетевом экране, не забудьте открыть UDP- и TCP-порт 5355.

Запросы

С помощью утилиты resolvectl можно отправлять запросы к DNS-серверам, а также к mDNS- или LLMNR-хостам.

Например, DNS-запрос выглядит следующим образом:

Решение проблем

systemd-resolved не ищет в локальном домене

Иногда systemd-resolved не может выполнить поиск в локальном домене при передаче ему только имени хоста. При этом возможна ситуация, когда с формальной точки зрения всё в порядке — в соответствующем .network-файле systemd-networkd присутствуют параметры или , в результате чего в файле , как и положено, появилась строка . Запустите или , чтобы убедиться, что домены для поиска в самом деле были обнаружены и собраны.

Возможные решения:

  • Отключите LLMNR, чтобы systemd-resolved начал присоединять DNS-суффиксы.
  • Отредактируйте базу данных в файле /etc/nsswitch.conf (например, удалите опцию после службы resolve).
  • Перейдите на использование полных доменных имён.
  • Используйте файл /etc/hosts для разрешения имён.
  • Используйте службу из библиотеки glibc вместо resolve из systemd.

systemd-resolved не выполняет разрешение имён без суффикса

Чтобы systemd-resolved выполнял разршение частичных доменных имён, добавьте параметр в .

Судя по всему, это работает только с отключённым LLMNR ().

Если вы используете systemd-networkd, то можно использовать в качестве поискового домен, предоставленный DHCP-сервером или IPv6 Router Advertisement. По умолчанию эта возможность отключена; для включения добавьте следующие строки в .network-файл сетевого интерфейса:

Проверить домены для всех интерфейсов можно командой:

$ resolvectl domain

Смотрите также

gollark: They knew my name though.
gollark: "I just wanted bee food."
gollark: My name is gollark.
gollark: Yes, the wilds ARE quite dangerous to be fair.
gollark: I look suspiciously at "Kyume", d6,
This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.