Как рекламировать услугу с помощью Bonjour в подсетях? - PullRequest
9 голосов
/ 20 сентября 2010

Я знаком с использованием Bonjour для рекламных услуг на «локальном» домене.Я работал с несколькими примерами, и я знаю соответствующие классы Какао, которые я использую для этого.

Мне любопытно, как я рекламирую простой сервис Bonjour в другой подсети.В частности, я пытаюсь написать сетевой сервис, который работает на моем рабочем столе, который подключен через Ethernet.Клиент работает на мобильном устройстве (iPhone / iPad), которое подключено через Wi-Fi.В моей настройке сети Wi-Fi находится в другой подсети, чем Ethernet.Тем не менее, оба находятся за брандмауэром.Мне не нужно размещать рекламу вне брандмауэра, я просто хочу, чтобы клиенты wifi могли видеть сервисы, рекламируемые сервером, подключенным к Ethernet.

Возможно ли это?Я знаю, что Bonjour должен поддерживать связь между подсетями, но всякий раз, когда я пытаюсь прочитать об этой функции, она углубляется в записи DNS и еще много чего.Я разработчик приложений ... Я понятия не имею об этом, и при этом я не хочу, чтобы пользователи беспокоились об этом.Я что-то упустил?

1 Ответ

15 голосов
/ 24 сентября 2010

Это не типичный вопрос программирования, но я вижу, что это серьезное препятствие при тестировании вашего кода на основе Bonjour.

Bonjour поддерживает два механизма для информирования клиентов об их существовании: сначала многоадресные рассылки в локальной сети, затем DNS.

Многоадресные передачи просты в использовании, поскольку нет настроек, к сожалению, их можно использовать только в одной сети.

DNS может позволить себе работать через маршрутизаторы (Интернет), но для этого требуется правильно настроенный сервер имен и клиенты, использующие этот сервер имен.

Я думаю, у вас есть только два варианта.

  1. рекламируйте свою услугу Bonjour в сети WiFi
  2. настроить свой собственный DNS

В первом случае важно понимать, что услуга не обязательно должна рекламироваться вашим собственным приложением, работающим на Mac. Вы можете использовать утилиту dns-sd для регистрации любого IP-адреса / порта в качестве службы Bonjour в сети. Чтобы это работало, вам нужен компьютер (Mac, Linux), который подключен к вашему WiFi, и запустите там dns-sd аналогично этому:

dns-sd -P "Stack Overflow" _http._tcp . 80 stackoverflow.com 69.59.196.211

Это позволит зарегистрировать службу http с именем «Переполнение стека» в качестве службы Bonjour. Проверьте это - запустите его в терминале и проверьте его в закладках Safari в разделе Bonjour. Так же, как вы можете зарегистрировать свою заявку.

К сожалению, вам нужно запустить это на машине, подключенной к сети WiFi. Это означает, что ваше приложение Mac будет размещать рекламу в собственной сети Ethernet, dns-sd - в сети WiFi.

Второй вариант немного пугающий, но это не имеет большого значения, если вы хотите испачкать руки администрацией.

Опять же, вам не нужно динамически регистрировать службы в DNS. Вы можете просто жестко закодировать имя вашего Mac и порт вашего приложения в конфигурации DNS. Это всего лишь 4 строки, которые необходимо добавить в файл зоны (файл конфигурации DNS).

b._dns-sd._udp  IN PTR @   ;  b = browse domain
lb._dns-sd._udp IN PTR @   ; lb = legacy browse domain
_icool._tcp  PTR iCool\ App\ Service._http._tcp
iCool\ App\ Service._http._tcp     SRV 0 0 8888 macpro.domain.com.

Первые две строки сообщают клиентам (в вашем случае, устройствам iOS), что Bonjour включен для этого домена. Третья строка сообщает клиентам, что доступна служба «Служба приложений iCool» типа icool. Четвертая строка сообщает клиенту текущий адрес и порт услуги.

Клиенты будут искать записи DNS для своих настроенных (или полученных через DHCP) «Поиск доменов». Проверьте настройки сети.

Вы можете запустить nameserver на вашем Mac, на каком-нибудь компьютере с Linux или использовать такие службы, как dyndns.com.

Надеюсь, это поможет.

...