Чи є спосіб налаштувати Avahi для реалізації "будь-якої роздільної здатності імені" в локальній мережі?


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 ." в його рядок URL, він не збирається отримати відповідь. Звичайно, це ще не кінець світу, але це дратує користувачів-початківців, які очікують, що все "просто працює", а також це ускладнює розробку надійних сценаріїв на стороні клієнта (оскільки сценарій на стороні клієнта потрібно було б чітко знати, як керувати автономними серверами).

Зважаючи на це, моє запитання таке: чи можна настроїти Avahi на публікацію псевдоніма імені хоста mDNS у будь-якому стилі? Мета полягає в тому, щоб кожен міг сісти за свій ноутбук і ввести " 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 :( Програма друкує, що вона успішно опублікувала імена, але вони не відображаються при перегляді з іншого хоста в мережі.
Frederick Nord,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.