systemd-resolved не запрашивает DNS-сервер для локального домена
После обновления до 17.04 я больше не могу разрешать адреса в своей локальной сети (silvesternet.local). Я получаю следующий ответ:
$ systemd-resolve edgerouter
edgerouter: resolve call failed: No appropriate name servers or networks for name found
В журнале есть только отчеты о тайм-аутах для транзакции, связанной с этим поиском.
Я использовал Wireshark, чтобы прослушать сетевой трафик, и кажется, что он даже не пытается найти имя. ДНС трафика нет вообще. Поиск другого внешнего домена работает просто отлично.
Многие проблемы, касающиеся одной и той же темы, упоминают изменение nsswitch.conf, но это, похоже, ничего не решает. Мои текущие настройки:
hosts: files mdns4_minimal dns [NOTFOUND=return] resolve [!UNAVAIL=return] mdns4
4 ответа
Я считаю, что это по замыслу.
Ubuntu 17.04 переключился на systemd-resolved для разрешения имен и использует только LLMNR (многоадресный поиск имен) для разрешения имен по одной метке. Смотрите эту ссылку для получения подробной информации: https://www.freedesktop.org/software/systemd/man/systemd-resolved.service.html
Для обоснования этого решения проверьте ответ от автора в этом отчете об ошибке: https://github.com/systemd/systemd/issues/2514
UPD: эту проблему можно обойти, используя домен для локальной сети. Если сетевой интерфейс настроен (либо вручную, либо по DHCP) на использование домена поиска, то systemd-resolved добавит этот домен к однокомпонентным именам, а затем выполнит их поиск по одноадресной DNS.
Очевидно, что локальный DNS-сервер должен быть перенастроен для распознавания этих доменов. В случае dnsmasq, который считывает локальные пары хост-IP из / etc / hosts, это можно сделать, добавив следующие инструкции в dnsmasq.conf:
domain=mydomain.net
local=/mydomain.net/
expand-hosts
UPD2: Или вы можете просто вернуться к dnsmasq, как описано здесь /questions/638949/kak-otklyuchit-sistemnoe-razreshenie-i-razreshit-dns-s-pomoschyu-dnsmasq/638961#638961
Я получил ту же проблему на Ubuntu 18.04, который также использует systemd-resolved для DNS. Его конфигурация по умолчанию не разрешает имена хостов с одной меткой или имена доменов.local по DNS, но по LLMNR или mDNS соответственно.
Чтобы разрешить локальные однокомпонентные имена хостов или имена доменов.local в DNS, я включил 3-й из "четырех режимов обработки /etc/resolv.conf", описанных на странице man для systemd-resolved.service:
sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
Аналогичный ответ был дан здесь. И снова, по причинам, лежащим в основе дефолта, см. Ответ поэтеринга в этом сообщении об ошибке.
После обновления до 18.04 у меня работало то, что я настроил файл /etc/systemd/resolved.conf, изменив параметр Domains на домен (локальный или как в моем случае mydomain.local). Я также изменил параметр DNS, но мне показалось, что он не актуален, но я упоминаю об этом на всякий случай, если это не так. Для получения дополнительной информации перейдите по https://www.freedesktop.org/software/systemd/man/systemd-resolved.service.html.
Кроме того, я изменил конфигурацию avahi (/etc/avahi/avahi-daemon.conf), чтобы изменить параметр домена в разделе сервера с локального (по умолчанию) на что-то другое, как указали некоторые люди на этом форуме.
С упомянутыми изменениями я могу связаться с машинами, используя имена без точек, например, при пинге с моим компьютером компьютер успешно подключен. Однако, если я отправляю ping на mycomputer.mydomain.local, он не работает, полное доменное имя не разрешается должным образом.
Надеясь, что это помогает в некоторых случаях или приводит к более общему решению.
Я столкнулся с этой проблемой из-за неправильной настройки nsswitch.conf, поскольку 12.04 следующая строка работала как ожидалось. Имена хостов без домена разрешаются успешно.
Но новый 17.04 версия (а также версия 16.10) ubuntu со старым шаблоном для настройки системы nss не работает, как раньше.
Неверно настроенная версия hosts , из старых версий Ubuntu:
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
Удачная рабочая версия hosts например от 17.04:
hosts: files mdns4_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] dns
Если кто-то использует systemd версии 242 или более ранней (Ubuntu 17.04 поставляется с systemd 232), systemd-networkd для настройки сети и DHCP для получения локальных доменов (UseDomains=true в [DHCP] раздел .network файлов), то одна из причин не разрешать local (не обязательно .local) домены могут быть ошибкой systemd-networkd в опции поиска DHCP-доменов, которая сделала так, чтобы разрешение работало только в том случае, если DHCP-сервер принудительно протолкнул доменные имена, т.е. даже если клиент не запрашивает его в списке запросов параметров.