Есть ли способ настроить Avahi для реализации «разрешения имен anycast» в локальной сети?

9

Сначала немного истории: у нас есть лаборатория, содержащая несколько выделенных серверов Linux, которые работают в изолированной локальной сети. Все серверы работают под управлением одной и той же ОС (Debian Linux) и одного и того же проприетарного серверного программного обеспечения, и процессы сервера обмениваются данными друг с другом для синхронизации своих данных. Это означает, что для любых клиентов не имеет значения, к какому серверу клиент подключается - любой сервер вернет те же данные, что и любой другой.

Все эти серверы Linux запускают avahi-daemon для публикации имен хостов mDNS для себя, что означает, что клиент может ввести, например, « http: //linux-server-1.local ». в свой веб-браузер и подключиться к Linux-серверу № 1 и так далее.

Это все хорошо, за исключением того, что это означает, что пользователь, сидящий за клиентским компьютером (обычно ноутбук Mac или Windows с установленным Bonjour) должен знать (или выяснить), какой из серверов Linux в данный момент подключен к сети, и он должен убедитесь, что он подключается к одному из них. Например, если сегодня сервер № 2 находится в автономном режиме, а клиент вводит « http: //linux-server-2.local ». в его адресную строку, он не собирается получать ответ. Конечно, это не конец света, но это раздражает начинающих пользователей, которые ожидают, что все будет «просто работать», а также усложняет разработку надежных сценариев на стороне клиента (так как сценарий на стороне клиента). необходимо знать, как работать с автономными серверами в явном виде).

Имея это в виду, мой вопрос заключается в следующем: можно ли настроить Avahi для публикации псевдонима имени хоста mDNS в стиле anycast? Цель состоит в том, чтобы любой мог сесть за свой ноутбук, введите « http: //any-linux-server.local ». (или аналогичный), и подключитесь к одному из серверов, которые в данный момент подключены к сети (опять же, не имеет значения, какой именно).

Обратите внимание, что это должно работать без какой-либо специальной конфигурации клиентских ноутбуков, так как мы не контролируем их (кроме того, что у них установлен Bonjour).

Также обратите внимание, что мы не можем полагаться на наличие отдельного сервера имен или прокси-сервера или на какой-либо конкретный сервер Linux, поскольку это может привести к единственной точке отказа, которую мы пытаемся избежать.

Джереми Фризнер
источник

Ответы:

13

Трент Ллойд здесь, один из авторов проекта Avahi.

Это теоретически возможно, но сделать это нелегко. К сожалению, механизм по умолчанию для публикации имени хоста в Avahi также опубликовал запись обратного DNS, которая указана как эксклюзивная. Таким образом, если вы попытаетесь опубликовать 2 имени хоста, указывающих на один и тот же IP, вы получите конфликт на обратной записи DNS.

Это можно сделать, если вы используете API Avahi для ручной публикации записи A и пометьте ее как неисключительную. Вам придется написать небольшой фоновый процесс для каждого сервера в Python, C или аналогичном.

Вызов API для использования - avahi_entry_group_add_record, и вам нужно передать AVAHI_PUBLISH_ALLOW_MULTIPLE в поле флагов. Это должно тогда работать.

Альтернатива - использовать обнаружение службы так, как оно было задумано, и каждый клиент должен публиковать службу HTTP, а также использовать плагин firefox или аналогичный для просмотра анонсированных веб-служб. Или какой-то другой вид браузера службы.

Bonjour раньше использовал плагин для Internet Explorer, чтобы сделать это как панель закладок, я не уверен, что он все еще делает.

Трент Ллойд
источник
2
Я получил это на работу, спасибо! На случай, если кому-то будет интересно, я разместил исходный код C здесь: public.msli.com/lcs/jaf/publish_cnames.c
Джереми
гектометр это, похоже, не работает с более свежими версиями avahi :( Программа печатает, что она успешно опубликовала имена, но они не отображаются при просмотре с другого хоста в сети.
Фредерик Норд,