Разрешение имени `.local` (только для mDNS)

У меня есть домашняя сеть, настроенная с использованием mDNS, содержащая разные системы (включая постоянно включенную Raspberry Pi). На моих машинах работают демоны avahi, поэтому текущая ситуация такова:

  • каждый в сети может решить host.local имена.

Что я хочу в дополнение:

  • машины, которые я администрирую, также могут разрешать host на тот же адрес, что и host.local,

Я мог бы придумать три способа сделать это:

  1. Положил search local в /etc/resolv.conf mDNS это не соблюдает, поскольку это якобы "вызывает проблемы". I could recompile with the --enable-search-domains options on all my machines.

  2. Write static /etc/hosts files in all network machines. This is what I currently do. However, it makes configuration distributed, which I want to avoid (these files do eventually go out-of-sync).

  3. Set up a DNS server on the network. However, the router provided with the Internet access does not do DNS (this is almost a good reason to change for another company), so I would need to set it up on the Raspberry. This also poses the problem of a distributed configuration: the static DNS info on the Raspberry would eventually go out of sync with the mDNS information, so that host а также host.local could confusingly point to two different IP addresses...

Итак, мой вопрос:

  • what are the “problems” posed by the --enable-search-domains вариант? (The only one I see is that it enables anyone on the LAN to set up an unqualified host name, but 1. I don't use unqualified host names apart from those I already control, and 2. LAN access is already restricted to trusted peers anyway).

  • did I miss any other fourth option? (such as, setup a DNS server + a crontab periodically feeding it with some output of an avahi-browse command?)

2 ответа

The reason mdns doesn't append .local or search domains is because there is no NXDOMAIN or similar concept in mdns.

So if mdns fails to find a resolution in any caches, it must send a multicast query and wait to see if anything responds. This timeout is lengthy enough for "causing problems".

The following doesn't answer the question, but is speculative of possible implementations to resolve some of the issues.

What I would wish for is to explicitly append .local to hostnames without any dots at the end of the nss chain. НАПРИМЕР

hosts: files mdns4_minimal [NOTFOUND=return] dns mdns_append

Perhaps it would also be possible to specify a "cache only" mdns resolution. Perhaps with an nsswitch like this

hosts: files mdns4_minimal [NOTFOUND=return] mdns_append_cacheonly dns mdns_append

I envision mdns_append trying both with and without .local appended.

Я подозреваю, что опция "не рекомендуется", потому что она практически бесполезна на практике: почти все другие реализации mDNS используют .local только домен, поэтому попытка выполнить поиск для любого домена, который вы получили по DHCP, в большинстве случаев будет приводить только к дополнительным задержкам. Есть также проблемы безопасности, упомянутые в фактической спецификации mDNS.

Вместо этого nss-mdns может быть исправлен, чтобы добавить .local имена без точек, прежде чем пытаться их искать, вместо использования доменов resolv.conf.

Другие вопросы по тегам