Возможно ли, чтобы mDNS / Bonjour публиковали одно и то же имя службы на разных серверах?

Я надеялся получить список серверов, предлагающих определенную услугу.

Например. допустим, у меня есть server01, который публикует службу под названием ControlSystem. Теперь я добавляю server02, который также публикует службу под названием ControlSystem.

Я хочу найти список серверов, публикующих службу ControlSystem.

Я думаю, что это должно быть возможно (например, у вас может быть более одного принтера, который публикует службу печати), но когда я регистрирую службу на двух разных серверах с помощью dsn-sd -R, тогда результат dns-sd -L будет просто:

Lookup ControlSystem._http._tcp.local
DATE: ---Mon 07 May 2018---
16:45:57.867  ...STARTING...
16:45:57.868  ControlSystem._http._tcp.local. can be reached at ControlSystem._http._tcp.local.:5000 (interface 11)
16:45:57.869  ControlSystem._http._tcp.local. can be reached at ControlSystem._http._tcp.local.:5000 (interface 11)

Это не очень полезно, потому что я хотел бы иметь хотя бы IP-адреса двух серверов.


person ChatterOne    schedule 07.05.2018    source источник


Ответы (1)


Как вы сказали: «можно ли опубликовать одно и то же имя службы» на разных серверах? Ответ положительный.

Но не так, как вы это реализовали.

Имя службы - это просто имя службы, а не имя экземпляра. Например, для службы веб-сервера имя службы будет _http._tcp.

Это имя может быть одинаковым на всех серверах.

То, что не может быть одинаковым на всех серверах, - это экземпляр каждой службы. Обычно это соответствует объединению имени устройства с именем службы с именем домена (в Bonjour / Zeroconf это .local). Продолжая пример с веб-серверами, это приведет к server1._http._tcp.local и server2._http._tcp.local. Это имя экземпляра ДОЛЖНО быть уникальным на всех серверах (и даже внутри одного сервера, если у вас будет несколько служб, например, с использованием разных портов).

Имя устройства также должно быть уникальным. Например, в случае ZeroConf это указано в RFC Multicast DNS (8. Проверка и Объявление о запуске).


Что касается вашего конкретного случая, вы регистрируете на обоих серверах одно и то же имя экземпляра, что, как указано выше, не допускается.

Вы должны зарегистрировать на каждом сервере разные экземпляры, а именно:

dns-sd -R server01 _http._tcp local 8088
dns-sd -R server02 _http._tcp local 8088

на каждом из серверов.

После этого вы сможете просматривать службы HTTP, выполняя следующие действия:

dns-sd -B _http._tcp local.

который должен найти оба экземпляра.


И, наконец, поскольку вы пытаетесь зарегистрировать новую нестандартную службу (ControlService), вам нужно просто заменить _http именем вашей службы, а _tcp фактическим протоколом (_tcp или _udp):

dns-sd -R server01 ControlService._tcp local 8088
dns-sd -R server02 ControlService._tcp local 8088

И запрос:

dns-sd -B ControlService._tcp local.
person LoPiTaL    schedule 20.12.2018