Разрешение .local через NSS/systemd-resolved/mDNS

Модератор: /dev/random

Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8255
Статус: Маньяк
ОС: Arch, CentOS, Ubuntu

Разрешение .local через NSS/systemd-resolved/mDNS

Сообщение serzh-z »

У кого-нибудь получалось завести systemd-resolved так, чтобы он разрешал имена .local в локальной сети?

Сейчас так (Arch Linux):

- Запущен systemd-resolved
- mDNS разрешен и глобально и для интерфейса
- в /etc/nsswitch.conf включен модуль resolve

`resolvectl query -p mdns ...` работает, но приложения, использующие Glibc, ничего не могут разрешить.

Вообще непонятно - эта функциональность допилена или в процессе допиливания? В Ubuntu systemd-resolved, как вижу, включен (и используется через /etc/resolv.conf), но в NSS, вместо resolve, почему-то, они решили пока использовать mdns_minimal (который, ожидаемо, все разрешает). Тоже не смогли побороть?
Спасибо сказали:

Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8255
Статус: Маньяк
ОС: Arch, CentOS, Ubuntu

Re: Разрешение .local через NSS/systemd-resolved/mDNS

Сообщение serzh-z »

Продолжу складывающуюся традицию. =)

Что нужно, для работы mDNS (ресолвера и респондера, но не браузера, которого в systemd нет, пока) в конфигурации с systemd-resolved вместо Avahi:

- Включить MulticastDNS (resolve или yes) в /etc/systemd/resolved.conf и запустить systemd-resolved
- Добавить в /etc/nsswitch.conf "resolve [!UNAVAIL=return]"
- слинковать /etc/resolve.conf с /run/systemd/resolve/stub-resolv.conf
- Установить MulticastDNS в "yes" или "resolve" для нужных интерфейсов

В случае с последним пунктом у systemd-networkd нет проблем. Он включает MulticastDNS по умолчанию и ничего не ломает.

В случае NetworkNanager нужно явно добавить "connection.mdns=1" в конфиги NetworkManager (интеграция с systemd-resolved включится автоматически, если он обнаружит, что resolve.conf слинкован).

С NetworkManager есть одна неприятная проблема (вероятно, баг): если хост не входит в домен, то он выставляет на интерфейсе домен в "~.", что говорит resolved, что нужно любой DNS запрос роутить на DNS сервер, даже запрос ".local" (т.е. для запросов с ".local" выставляется скоуп "dns" вместо mdns" и модуль mDNS не обрабатывает такой запрос. Возможно, что это проблема дизайна systemd-resolved, так как было бы логичнее не применять правило роутинга корневого домена к ".local" - разработчики отмалчиваются.
Спасибо сказали: