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

1521
Circonflexe

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

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

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

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

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

  1. Помещенный search localв /etc/resolv.conf: это не оплачено MDNS, как это было якобы «создает проблемы». Я мог бы перекомпилировать с--enable-search-domains опциями на всех моих машинах.

  2. Записывать статические /etc/hostsфайлы на всех сетевых машинах. Это то, чем я сейчас занимаюсь. Однако, это делает конфигурацию распределенной, чего я хочу избежать (эти файлы делают в конечном итоге выйти из-синхронизации).

  3. Настройте DNS-сервер в сети. Однако маршрутизатор с доступом к Интернету не поддерживает DNS (это почти веская причина для замены другой компании), поэтому мне нужно настроить его на Raspberry. Это также создает проблему распределенной конфигурации: статическая информация DNS на малина, в конечном счете выйти из синхронизации с информацией MDNS, так что hostи host.localможет указывать на смешения двух различных IP - адресов ...

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

  • Какие «проблемы» ставятся --enable-search-domains опцией? (Единственное, что я вижу, это то, что это позволяет любому в локальной сети устанавливать неквалифицированное имя хоста, но 1. Я не использую неквалифицированные имена хостов, кроме тех, которые я уже контролирую, и 2. Доступ к локальной сети уже ограничен доверенным в любом случае

  • я пропустил любой другой четвертый вариант? (например, настроить DNS-сервер + crontab, периодически передавая ему какой-либо вывод avahi-browseкоманды?)

4
Это странный вопрос. Если вы настроили mDNS на своих локальных компьютерах в сети, каждый компьютер в вашей сети будет видеть эти `.local` адреса. В этом весь смысл mDNS; Вам не нужно беспокоиться почти обо всем, о чем вы пишете. Если каким-то образом вы не можете видеть другие машины в сети с mDNS, то это означает, что ваш маршрутизатор не передает пакеты mDNS. Если это так, вам нужно отрегулировать настройки вашего роутера или просто получить новый. JakeGould 7 лет назад 0
Это неуместный комментарий, я подозреваю, что вы неправильно поняли вопрос. Домен `.local` работает нормально, я хочу сделать его доменом по умолчанию. Я отредактировал для ясности. Circonflexe 7 лет назад 1
«Это комментарий не по теме…» Не совсем. Ваш вопрос в том виде, в котором он был опубликован, немного странный, поэтому уместен комментарий, который просто указывает на странность вопроса, основанную на неясности концепции и формулировки. JakeGould 7 лет назад 0
Этот вопрос совсем не странный. На самом деле, из всех поисков, которые я сделал по этой проблеме, и всех вопросов StackOverflow / AskUbuntu / SuperUser, которые я нашел, связанных с этой проблемой, этот вопрос ** единственный, который точно описывает проблема, потенциальные решения и проблемы с этими решениями. Я искал ответы на вопрос, почему `--enable-search-domains` не включен по умолчанию, почему он был отключен, но пока не нашел. blujay 6 лет назад 1

2 ответа на вопрос

2
grawity

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

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

0
vontrapp

Причина, по которой mdns не добавляет .local или поисковые домены, заключается в том, что в mdns нет NXDOMAIN или подобной концепции.

Поэтому, если mdns не может найти разрешение в каком-либо кеше, он должен отправить многоадресный запрос и подождать, если что-нибудь ответит. Этот тайм-аут достаточно продолжителен для «возникновения проблем».

Следующее не отвечает на вопрос, но является предположением о возможных реализациях для решения некоторых проблем.

Я хотел бы явно добавить .local к именам хостов без точек в конце цепочки nss. НАПРИМЕР

hosts: файлы mdns4_minimal [NOTFOUND = return] dns mdns_append

Возможно, можно было бы также указать разрешение mdns «только для кэша». Возможно с таким переключателем

hosts: файлы mdns4_minimal [NOTFOUND = return] mdns_append_cacheonly dns mdns_append

Я предполагаю, что mdns_append пытается как с добавленным .local, так и без него.