В файле конфигурации для локального сетевого интерфейса мы должны указать, что мы хотим получить адрес локального DNS-сервера от DHCP-сервера, используя DHCP=
опцию :
[Network]
DHCP=yes
или укажите его адрес явно, используя DNS=
опцию :
[Network]
DNS=10.0.0.1
Кроме того, нам нужно указать (в том же разделе) локальные домены, используя Domains=
опцию
Domains=domainA.example domainB.example ~example
Мы указываем локальные домены, domainA.example domainB.example
чтобы получить следующее поведение (из systemd-resolved.service, mand- страницы systemd-resolved ):
Поиск имени хоста, оканчивающегося в одном из доменов для интерфейса, направляется исключительно на соответствующие интерфейсы.
Этот способ hostX.domainA.example
будет решаться исключительно нашим локальным DNS-сервером.
Мы указываем, ~example
что все домены, оканчивающиеся на example
, должны рассматриваться как домены только для маршрутов, чтобы получить следующее поведение (из описания этого коммита):
DNS-серверы, имеющие домены только для маршрутов, должны использоваться только для указанных доменов.
Этот путь hostY.on.the.internet
будет решен исключительно нашим глобальным, удаленным DNS-сервером.
Заметка
В идеале при использовании протокола DHCP локальные доменные имена должны быть получены с DHCP-сервера, а не указываться явно в конфигурационном файле сетевого интерфейса выше. Смотрите UseDomains=
вариант . Однако с этой функцией все еще остаются нерешенные проблемы - см. Проблему с опцией systemd-networkd DHCP search domains .
Нам необходимо указать удаленный DNS-сервер в качестве глобального общесистемного DNS-сервера. Мы можем сделать это в /etc/systemd/resolved.conf
файле:
[Resolve]
DNS=8.8.8.8 8.8.4.4 2001:4860:4860::8888 2001:4860:4860::8844
Не забудьте перезагрузить конфигурацию и перезапустить сервисы:
$ sudo systemctl daemon-reload
$ sudo systemctl restart systemd-networkd
$ sudo systemctl restart systemd-resolved
Внимание!
Вышеуказанные гарантии применяются только тогда, когда имена разрешаются с помощью systemd-resolved - см. Справочную страницу для nss-resol, libnss_resolve.so.2 и справочную страницу для systemd-resolved.service, systemd-resolved .
Смотрите также:
Ссылки:
.local
в этом примере? Конечно, с avahi это должно было быть зарезервировано для MDNS, и злоупотребление им было большим нет-нет. Мне было бы понятнее использоватьexample.com
или .example ..local
определен как специальный домен в RFC 6762 - Multicast DNS в разделе Multicast DNS Names . Спасибо, исправлено./etc/systemd/network/*.network
? Нашел здесь superuser.com/a/1365864Просто чтобы расширить превосходный ответ @piotrDobrogost, не забудьте настроить его
/etc/nsswitch.conf
для использованияsystemd-resolved
в качестве источника разрешения DNS. Вашаhosts
директива должна выглядеть следующим образом для вашего конкретного случая использования:/etc/nsswitch.conf
Поэтому, если вы ограничите разрешение только теми доменами, которые указаны в
Domains
директиве,/etc/systemd/resolved.conf
как указано выше в разделе « Петр», далее следует обратиться к DNS в порядке источников разрешения имен, указанных,/etc/nsswitch.conf
когда домены НЕ найдены вDomains
директиве:Следующие ссылки пройдите по ссылке требования указать решительность в
/etc/nsswitch.conf
такsystemd-resolved
консультируются при разрешении имен:https://github.com/systemd/systemd/issues/940
Документация по SystemD, которую я нашел ужасной. Мне пришлось собрать воедино понимание из нескольких ссылок, включая ответ Петра выше ;-)
источник
/etc/resolve.conf
есть символическая ссылка на/run/systemd/resolve/stub-resolv.conf
файл, который, в свою очередь, содержит адрес преобразователя заглушки DNS systemd- resol, нет необходимости помещатьresolve
директиву в/etc/nsswitch.conf
файл, поскольку запросы DNS будут направлены (из-за стандартнойnss-dns
директивы) на преобразователь заглушки, который действует в соответствии с правилами systemd-resolved ./etc/nsswitch.conf``? In the specimen config above,
/ etc / hosts` (" файлы "), будет проверяться на статические сопоставления IP: имя, и если ничего не найдено, то разрешается заглушка с разрешением systemd, а затем - , Я не вижу, как можно было бы поэтому установить источники разрешения DNS без использования/etc/nsswitch.conf
. Я пропустил трюк здесь?/etc/nsswitch.conf
это не нужно. Я говорю, что когда кто-то использует заглушку DNS-преобразователя systemd-resolved, достаточно указатьdns
директиву вhosts:
строке (предположительно, послеfile
директивы). Там нет необходимости дляresolve
директивы там , как это незавершенная распознаватель , который является точкой входа в годов Systemd-разрешенная логики , а не наnss-resolve
подключаемый модуль ...resolve
директивы ➟ nss-resolution NSS plug-in module ➟ systemd-resolved или с помощьюdns
директивы ➟ nss-dns NSS plug-in module ➟ systemd-resolved's 'stub DNS resolver ver systemd -решенfiles
томуresolve
моменту/etc/nsswitch.conf
из 2-й части вашего вопроса. Перечитывая его, похоже, вы только что говорили о проверке локального кэша на предмет IP: сопоставление имен, а затем обращение к серверу пересылки, если он не найден. Я обычно устанавливаюfiles
первый источник разрешения DNS, чтобы обойти DNS, чтобы я мог тестировать и не попадать на рабочие хосты