Во-первых, немного предыстории: у нас есть лаборатория, содержащая несколько выделенных серверов 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, поскольку это приведет к возникновению единой точки отказа, которой мы пытаемся избежать.
Здесь Трент Ллойд, один из авторов проекта 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, чтобы сделать это как панель закладок, я не уверен, что он до сих пор работает.